void TParser::ParseStart() { printf("ParseStart!\n"); GetNextToken(); //??? why? ParseDeclarations(); IgnoreNewlines = true; Match(TToken::SECTION); ParseGrammar(); printf("Type=%d\n", CurrentToken.Type); if(CurrentToken.Type == TToken::SECTION) { Match(TToken::SECTION); if(CurrentToken.Type == TToken::PROGRAM) Match(TToken::PROGRAM); } printf("Type=%d\n", CurrentToken.Type); if(CurrentToken.Type != TToken::TKEOF) Error("SYNTAX_EXPECTING_EOF", "BadToken", TokenCursor-1 ); DUMPVERBOSE("%u nonterminals.\n", SymbolTable->NonTerminals.size()); for(auto NonTerm : SymbolTable->NonTerminals) { DUMPVERBOSE("%s ->\n", NonTerm->Name().c_str()); for(auto Rule : NonTerm->Derives) { DUMPVERBOSE(" %s -> ", Rule->Name().c_str()); for(auto Item : Rule->Derives) { DUMPVERBOSE("%s ", Item->Name().c_str()); } DUMPVERBOSE("\n"); } } }
bool CParser::Advance(int tokenId, const SToken &tokenData) { ParseGrammar(m_parser, tokenId, tokenData, this); return !m_isFatalError; }