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.