code: @Override
  	public Boolean evaluate() {
  		switch (getType()) {
  			case OR: {
  				if (operands.size() < 2) {
  					throw new IllegalArgumentException(
  							"An OR expression must have at least 2 operands");
  				}
  
  				for (BooleanExpression operand : operands) {
  					if (operand.evaluate()) {
  						return true;
  					}
  				}
  
  				return false;
  			}
  
  			case AND: {
  				if (operands.size() < 2) {
  					throw new IllegalArgumentException(
  							"An AND expression must have at least 2 operands");
  				}
  
  				for (BooleanExpression operand : operands) {
  					if (!operand.evaluate()) {
  						return false;
  					}
  				}
  
  				return true;
  			}
  
  			case NOT: {
  				if (operands.size() != 1) {
  					throw new IllegalArgumentException("A NOT expression must have 1 operand");
  				}
  
  				return !operands.get(0).evaluate();
  			}
  
  			default:
  				throw new IllegalArgumentException("Unknown type: " + type);
  		}
  	}
docs: {@inheritDoc}