/** * Function representing the <par_dec_list_prime> prods */ ParamList* RecursiveDescentParser::par_dec_list_prime(Type type) { ParamList* paramList = NULL; if(errorCondition) return paramList; if(token == TK_COMMA) { #if DEBUG_PARSER std::cout << "<par_dec_list_prime> --> ,<par_spec><par_dec_list_prime>\n"; #endif token = scanner->getToken(); VariableEntry* ve = par_spec(type); ve->setParamFlag(); if(!ve) { // error recovery: consume tokens until we find another comma or a semicolon while(token != TK_EOF) { if(token == TK_LEFT_BRACE) { break; } if(token == TK_COMMA || token == TK_SEMICOLON) { return par_dec_list_prime(type); } token = scanner->getToken(); } return new ParamList(); } paramList = par_dec_list_prime(type); paramList->push_front(ve); } else if(token == TK_SEMICOLON) { #if DEBUG_PARSER std::cout << "<par_dec_list_prime> --> e\n"; #endif paramList = new ParamList(); } else { //errorHandler(); errorHandler("missing semicolon at the end of parameter declaration", token); } return paramList; }