code: private PExp readEvaluatorP1Expression() throws ParserException,
  			LexException
  	{
  		PExp exp = readEvaluatorP2Expression();
  		boolean more = true;
  
  		while (more) // Left grouping
  		{
  			LexToken token = lastToken();
  
  			switch (token.type)
  			{
  				case PLUS:
  					nextToken();
  					exp = AstFactory.newAPlusNumericBinaryExp(exp, token, readEvaluatorP2Expression());
  					break;
  
  				case MINUS:
  					nextToken();
  					exp = AstFactory.newASubstractNumericBinaryExp(exp, token, readEvaluatorP2Expression());
  					break;
  
  				case UNION:
  					nextToken();
  					exp = AstFactory.newASetUnionBinaryExp(exp, token, readEvaluatorP2Expression());
  					break;
  
  				case SETDIFF:
  					nextToken();
  					exp = AstFactory.newASetDifferenceBinaryExp(exp, token, readEvaluatorP2Expression());
  					break;
  
  				case MUNION:
  					nextToken();
  					exp = AstFactory.newAMapUnionBinaryExp(exp, token, readEvaluatorP2Expression());
  					break;
  
  				case PLUSPLUS:
  					nextToken();
  					exp = AstFactory.newAPlusPlusBinaryExp(exp, token, readEvaluatorP2Expression());
  					break;
  
  				case CONCATENATE:
  					nextToken();
  					exp = AstFactory.newASeqConcatBinaryExp(exp, token, readEvaluatorP2Expression());
  					break;
  
  				default:
  					more = false;
  					break;
  			}
  		}
  
  		return exp;
  	}
docs: Evaluator Family...