/**
 * 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;
}