108 lines
4.0 KiB
ObjectPascal
108 lines
4.0 KiB
ObjectPascal
unit dpglib.WildCardElem;
|
|
|
|
interface
|
|
uses
|
|
dpgrtl.types,
|
|
dpglib.Types,
|
|
dpglib.GrammarAtom;
|
|
|
|
type
|
|
// =========================================================================
|
|
// Class TWildcardElem declaration
|
|
// =========================================================================
|
|
TWildcardElem = class( TGrammarAtom,
|
|
IwildcardElem,
|
|
IGrammarAtom,
|
|
IAlternativeElem,
|
|
IGrammarElem)
|
|
|
|
// ---------------------------------------------------------------
|
|
// Constructor/destructor
|
|
// ---------------------------------------------------------------
|
|
public
|
|
constructor Create( pGrammar : IGrammar;
|
|
pToken : IToken;
|
|
pAutoGenType: integer);
|
|
|
|
// ---------------------------------------------------------------
|
|
// IGrammarElem overrides
|
|
// ---------------------------------------------------------------
|
|
public
|
|
procedure Generate;
|
|
function Look( pK: integer): ILookahead;
|
|
function AsString: AnsiString;
|
|
|
|
// ---------------------------------------------------------------
|
|
// IAlternativeElem overrides
|
|
// ---------------------------------------------------------------
|
|
protected
|
|
function Get_Label : AnsiString;
|
|
procedure Put_Label( pLabel: AnsiString);
|
|
|
|
end;
|
|
|
|
implementation
|
|
// ****************************************************************************
|
|
// Constructor/destructor
|
|
// ****************************************************************************
|
|
// ============================================================================
|
|
// Constructor
|
|
// ============================================================================
|
|
constructor TWildcardElem.Create( pGrammar : IGrammar;
|
|
pToken : IToken;
|
|
pAutoGenType: integer);
|
|
begin
|
|
inherited Create( pGrammar, pToken, pAutoGenType);
|
|
fLine := pToken.TokenLine;
|
|
end;
|
|
|
|
// ****************************************************************************
|
|
// IGrammarElem overrides
|
|
// ****************************************************************************
|
|
// ============================================================================
|
|
// Generate
|
|
// ============================================================================
|
|
procedure TWildcardElem.Generate;
|
|
begin
|
|
fGrammar.Generator.gen( self);
|
|
end;
|
|
|
|
// ============================================================================
|
|
// Look
|
|
// ============================================================================
|
|
function TWildcardElem.Look(pK: integer): ILookahead;
|
|
begin
|
|
result := fGrammar.LLkAnalyzer.Look( pK, self);
|
|
end;
|
|
|
|
// ============================================================================
|
|
// AsString
|
|
// ============================================================================
|
|
function TWildcardElem.AsString: AnsiString;
|
|
begin
|
|
result := '';
|
|
if fLabel <> '' then result := result + fLabel + ':';
|
|
result := result + '.';
|
|
end;
|
|
|
|
// ****************************************************************************
|
|
// IAlternativeElem overrides
|
|
// ****************************************************************************
|
|
// ============================================================================
|
|
// Get_Label
|
|
// ============================================================================
|
|
function TWildcardElem.Get_Label: AnsiString;
|
|
begin
|
|
result := fLabel;
|
|
end;
|
|
|
|
// ============================================================================
|
|
// Put_Label
|
|
// ============================================================================
|
|
procedure TWildcardElem.Put_Label(pLabel: AnsiString);
|
|
begin
|
|
fLabel := pLabel;
|
|
end;
|
|
|
|
end.
|