void compileArguments(void) { // TODO switch (lookAhead->tokenType) { case SB_LPAR: eat(SB_LPAR); compileExpression(); compileArguments2(); eat(SB_RPAR); break; case KW_END: case SB_SEMICOLON: case KW_ELSE: case SB_TIMES: case SB_SLASH: case SB_MOD: case SB_PLUS: case SB_MINUS: case SB_EQ: case SB_NEQ: case SB_LE: case SB_LT: case SB_GE: case SB_GT: case KW_DO: case KW_TO: case KW_THEN: case SB_RPAR: case SB_RSEL: case SB_COMMA: break; default: error(ERR_INVALIDARGUMENTS, lookAhead->lineNo, lookAhead->colNo); break; } }
void compileArguments(void) { while(lookAhead->tokenType == SB_LPAR){ eat(SB_LPAR); compileExpression(); compileArguments2(); eat(SB_RPAR); } }
void compileArguments2(void) { // TODO if(lookAhead->tokenType==SB_COMMA) { eat(SB_COMMA); compileExpression(); compileArguments2(); } }
void compileArguments2(void) { // TODO switch (lookAhead->tokenType) { case SB_COMMA: eat(SB_COMMA); compileExpression(); compileArguments2(); break; case SB_RPAR: break; default: error(ERR_INVALIDARGUMENTS, lookAhead->lineNo, lookAhead->colNo); break; } }
void compileArguments(void) { // TODO switch (lookAhead->tokenType) { case SB_LPAR: eat(SB_LPAR); compileExpression(); compileArguments2(); eat(SB_RPAR); break; // Follow - same as call statement as statement: case SB_SEMICOLON: case KW_END: case KW_ELSE: // Follow - term2 case SB_TIMES: case SB_SLASH: // Follow - expression3 // Follow (For statement) case KW_TO: case KW_DO: // Follow (arguments2) case SB_COMMA: // Follow (condition2) case SB_EQ: case SB_NEQ: case SB_LE: case SB_LT: case SB_GE: case SB_GT: // Follow (factor) case SB_RPAR: // Follow (indexes) case SB_RSEL: // Follow (if statement) case KW_THEN: break; // Error default: error(ERR_INVALIDARGUMENTS, lookAhead->lineNo, lookAhead->colNo); break; } }