Initial check in lib
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
unit dpglib.TokenRefElem;
|
||||
|
||||
interface
|
||||
uses
|
||||
dpgrtl.types,
|
||||
dpglib.Types,
|
||||
dpglib.GrammarAtom;
|
||||
|
||||
type
|
||||
// =========================================================================
|
||||
// Class TTokenRefElem declaration
|
||||
// =========================================================================
|
||||
TTokenRefElem = class( TGrammarAtom,
|
||||
ITokenRefElem,
|
||||
IGrammarAtom,
|
||||
IAlternativeElem,
|
||||
IGrammarElem)
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Constructor/destructor
|
||||
// ---------------------------------------------------------------
|
||||
public
|
||||
constructor Create( pGrammar : IGrammar;
|
||||
pToken : IToken;
|
||||
pInverted : boolean;
|
||||
pAutoGenType: integer);
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// IGrammarElem overrides
|
||||
// ---------------------------------------------------------------
|
||||
public
|
||||
procedure Generate;
|
||||
function Look( pK: integer): ILookahead;
|
||||
end;
|
||||
|
||||
implementation
|
||||
// ****************************************************************************
|
||||
// Constructor/destructor
|
||||
// ****************************************************************************
|
||||
// ============================================================================
|
||||
// Constructor
|
||||
// ============================================================================
|
||||
constructor TTokenRefElem.Create( pGrammar : IGrammar;
|
||||
pToken : IToken;
|
||||
pInverted : boolean;
|
||||
pAutoGenType: integer);
|
||||
var
|
||||
ts: ITokenSymbol;
|
||||
|
||||
begin
|
||||
inherited Create( pGrammar, pToken, pAutoGenType);
|
||||
|
||||
fNot := pInverted;
|
||||
ts := fGrammar.TokenManager.TokenSymbol[fAtomText];
|
||||
|
||||
if ts <> nil then
|
||||
begin
|
||||
fTokenType := ts.TokenType;
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// Set the AST node type to whatever was set in tokens {...}
|
||||
// section (if anything).
|
||||
// After this is create, the element option can set this.
|
||||
// ------------------------------------------------------------
|
||||
SetASTNodeType( ts.ASTNodeType);
|
||||
end
|
||||
else
|
||||
begin
|
||||
fGrammar.Tool.Error( 'Undefined token symbol: ' + String(fAtomText),
|
||||
fGrammar.GrammarFile,
|
||||
pToken.TokenLine,
|
||||
pToken.TokenColumn);
|
||||
end;
|
||||
end;
|
||||
|
||||
// ****************************************************************************
|
||||
// IGrammarElem overrides
|
||||
// ****************************************************************************
|
||||
// ============================================================================
|
||||
// Generate
|
||||
// ============================================================================
|
||||
procedure TTokenRefElem.Generate;
|
||||
var
|
||||
_self: ITokenRefElem;
|
||||
|
||||
begin
|
||||
_self := self;
|
||||
fGrammar.Generator.Gen(_self);
|
||||
|
||||
// fGrammar.Generator.Gen(self as ITokenRefElem);
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// Look
|
||||
// ============================================================================
|
||||
function TTokenRefElem.Look(pK: integer): ILookahead;
|
||||
begin
|
||||
result := fGrammar.LLkAnalyzer.Look( pK, self);
|
||||
end;
|
||||
|
||||
|
||||
end.
|
||||
Reference in New Issue
Block a user