code: public ExpressionBuilder and() {
  		GroupExpression lastGroupExpression = stack.isEmpty() ? null : stack.peek();
  
  		if (lhsExpression == null) {
  			throw new SyntaxException("Syntax exception: AND missing LHS operand");
  		} else if (lastGroupExpression == null) {
  			GroupExpression and = new GroupExpression(GroupExpression.Type.AND);
  			and.add(lhsExpression);
  			stack.push(and);
  			expression.setExpression(and);
  			lhsExpression = null;
  		} else if (lastGroupExpression.getType().equals(GroupExpression.Type.AND)) {
  			// Keep using the existing AND
  			lhsExpression = null;
  			return this;
  		} else if (lastGroupExpression.getType().equals(GroupExpression.Type.OR)) {
  			// AND takes precedence over OR, so we steal the OR's RHS
  			GroupExpression or = lastGroupExpression;
  			GroupExpression and = new GroupExpression(GroupExpression.Type.AND);
  
  			or.remove(lhsExpression);
  			and.add(lhsExpression);
  			or.add(and);
  			stack.push(and);
  			lhsExpression = null;
  		}
  
  		return this;
  	}
docs: Appends an AND expression to the RHS of the expression. The current RHS of the expression must be an Operand.
  
  @return this ExpressionBuilder.