private boolean Factor2(Table table, Type idnestList, Type factor2){

		boolean success = skipErrors(nt.Factor2);
		//Type aparams = new Type();
		
		if (lookAhead.inRHS1(nt.Factor2)){
			
			lastIdnest.setStructure("function");

			
			Record tempLastIdnest = lastIdnest;
			
			//get AParams to return a set number of parameters
			if (match("openpar") && AParams(lastIdnest, table) && match("closepar")){
				Record r;
				//re-evaluate type
				lineNum = lookBehind.getLine();
				if(lastClassScope != null){
					
					r = lastClassScope.find(tempLastIdnest, true, lineNum);
					factor2.setTo(getType(tempLastIdnest, lastClassScope, lineNum));
				}
				else {
					r = table.find(lastIdnest, true, lineNum);
					factor2.setTo(getType(lastIdnest, table, lineNum));
				}
				
				idnestList.setTo(factor2);
				if(r != null){
					lineNum = lookBehind.getLine();
					checkParameters(r, lineNum);
				}
				functionCallParams.clear();
				
				parseInfo += "*Factor2 -> ( AParams )" + "\r\n";
			}
			else {
				success = false;
			}
		}
		else if (lookAhead.inFollow(nt.Factor2)){
			lineNum = lookBehind.getLine();
			if(table.find(lastIdnest, true, lineNum) != null){
				
			}
			
			parseInfo += "*Factor2 -> epsilon" + "\r\n";
			factor2.setTo(idnestList);
			
		}
		else {
			success = false;
		}
		return success;
	}