/** * Function representing the <par_spec> prods */ VariableEntry* RecursiveDescentParser::par_spec(Type type) { if(errorCondition) return NULL; if(token == TK_IDENTIFIER) { #if DEBUG_PARSER std::cout << "<par_spec> --> i<par_spec_prime>\n"; #endif Token identifier = token; token = scanner->getToken(); VariableAttribute va = par_spec_prime(); VariableEntry* paramList = new VariableEntry(type, va); if(symTab.search(identifier)) { // duplicate parameter name std::stringstream errorMsg; errorMsg << "Duplicate declaration for parameter '" << identifier.getValue() << "'"; errorHandler(errorMsg.str(), identifier); } else { VariableEntry* entry = new VariableEntry( paramList->getType(), paramList->getAttribute(), paramList->getArraySize(), true ); symTab.insert(identifier, entry); } return paramList; } else { //errorHandler(); errorHandler("Missing variable name in parameter declaration", token); } return NULL; }