void compileStatements2(void) { // TODO if(lookAhead->tokenType==SB_SEMICOLON) { eat(SB_SEMICOLON); compileStatement(); compileStatements2(); } else if(lookAhead->tokenType!=KW_END) eat(SB_SEMICOLON); }
void compileStatements2(void) { // TODO switch(lookAhead->tokenType){ case SB_SEMICOLON: eat(SB_SEMICOLON); compileStatement(); compileStatements2(); break; case KW_END: break; default: missingToken(SB_SEMICOLON,lookAhead->lineNo,lookAhead->colNo); break; } }
void compileStatements2(void) { // TODO switch (lookAhead->tokenType) { case SB_SEMICOLON: eat(SB_SEMICOLON); compileStatement(); compileStatements2(); break; // Follow case KW_END: break; // Error default: error(ERR_INVALIDSTATEMENT, lookAhead->lineNo, lookAhead->colNo); break; } }
void compileStatements(void) { // TODO switch(lookAhead->tokenType){ case TK_IDENT: case KW_CALL: case KW_BEGIN: case KW_IF: case KW_WHILE: case KW_FOR: case SB_SEMICOLON: case KW_END: case KW_ELSE: compileStatement(); break; //check sau default: break; } compileStatements2(); }
void compileStatement(void) { switch (lookAhead->tokenType) { case TK_IDENT: compileAssignSt(); break; case KW_CALL: compileCallSt(); break; case KW_BEGIN: compileGroupSt(); break; case KW_IF: compileIfSt(); break; case KW_WHILE: compileWhileSt(); break; case KW_FOR: compileForSt(); break; // EmptySt needs to check FOLLOW tokens case SB_SEMICOLON: compileStatements2(); break; case KW_END: // eat(KW_END); // compileStatements2(); break; case KW_ELSE: compileElseSt(); break; // Error occurs default: error(ERR_INVALIDSTATEMENT, lookAhead->lineNo, lookAhead->colNo); break; } }
void compileStatements(void) { // TODO compileStatement(); compileStatements2(); }
void compileStatements(void) { //while(lookAhead->tokenType == TK_IDENT || lookAhead->tokenType == KW_CALL || lookAhead->tokenType == KW_BEGIN ||lookAhead->tokenType == KW_WHILE || lookAhead->tokenType == KW_FOR) compileStatement(); compileStatements2(); }