Exemplo n.º 1
0
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;
}