ParseTree* Parser::DECL() { ParseTree* retTree = new ParseTree(); if(!(*parser).Advance()) ThrowParserError(); (*retTree).SetLeaf1(ID_LIST(false)->getLeaf()); if(!((*parser).get().token == SEMI_COLON)) ThrowParserError(); if(!(*parser).Advance()) ThrowParserError(); return retTree; }
int PROG_BODY(){ printf(" Program body begins\n"); if(getNextToken()==VAR){ printf(" declaration begins\n"); sa_index++; if(ID_LIST()==TRUE){ if(getNextToken()==SEMICOLON){ printf(" declaration ends\n"); sa_index++; if(STMT_LIST()==TRUE){ printf(" Program body ends\n"); return TRUE; } return FALSE; } return FALSE; } return FALSE; } return FALSE; }
ParseTree* Parser::ID_LIST(bool in) { ParseTree* retTree = new ParseTree(); if(!((*parser).get().token == ID)) { ThrowParserError(); } if(in) { if(!isin((*parser).get().string)) { ThrowParserError(); } } else { if(isin((*parser).get().string)) { ThrowParserError(); } } (*retTree).SetLeaf1(ID_TERMINAL()->getLeaf()); if((*parser).get().token == COMMA) { if(!(*parser).Advance()) ThrowParserError(); (*retTree).SetLeaf2(ID_LIST(in)->getLeaf()); (*retTree).setAlt(2); } else { (*retTree).setAlt(1); } return retTree; }