anchor.diff:      :   '.'
       ;
   
  -EQUALS
  +EQUAL
       :   '='
  +    ;
  +
  +NOT_EQUAL
  +    :   '!='
  +    ;
  +
  +LESS
  +    :   '<'
  +    ;
  +
  +LESS_OR_EQUAL
  +    :   '<='
  +    ;
  +
  +GREATER
  +    :   '>'
  +    ;
  +
  +GREATER_OR_EQUAL
  +    :   '>='
       ;
   
   QUOTES
  
positive.code: 
  import java.util.*;
  import queries.*;
  import expressions.*;
  }
  
  @members {
  
negative.code:     |   FALSE {
          $result = BooleanLiteral.FalseBooleanLiteral.getInstance();
      }
      ;
  
  comparisonExpression returns [ComparisonExpression result]
      :   equalExpression {
          $result = $equalExpression.result;
      }
      |   notEqualExpression {
          $result = $notEqualExpression.result;
      }
      |   lessExpression {
          $result = $lessExpression.result;
      }
      |   lessOrEqualExpression {
          $result = $lessOrEqualExpression.result;
      }
      |   greaterExpression {
          $result = $greaterExpression.result;
      }
      |   greaterOrEqualExpression {
          $result = $greaterOrEqualExpression.result;
      }
      ;
  
  equalExpression returns [EqualExpression result]
  @init {
      SecondLevelId id = null;
      Object value = null;
  }
      :   ( secondLevelId EQUAL value {
          id = $secondLevelId.result;
          value = $value.result;
      }
      |   value EQUAL secondLevelId {
          id = $secondLevelId.result;
          value = $value.result;
      } ) {
          if (value instanceof Integer) {
              $result = new EqualExpression<Integer>(id, (Integer) value);
          } else if (value instanceof Double) {
              $result = new EqualExpression<Double>(id, (Double) value);
          } else {
              $result = new EqualExpression<String>(id, (String) value);
          }
      }
      ;
  
  notEqualExpression returns [NotEqualExpression result]
  @init {
      SecondLevelId id = null;
      Object value = null;
  }
      :   ( secondLevelId NOT_EQUAL value {
          id = $secondLevelId.result;
          value = $value.result;
      }
      |   value NOT_EQUAL secondLevelId {
          id = $secondLevelId.result;
          value = $value.result;
      } ) {
          if (value instanceof Integer) {
              $result = new NotEqualExpression<Integer>(id, (Integer) value);
          } else if (value instanceof Double) {
              $result = new NotEqualExpression<Double>(id, (Double) value);
          } else {
              $result = new NotEqualExpression<String>(id, (String) value);
          }
      }
      ;
  
  lessExpression returns [LessExpression result]
  @init {
      SecondLevelId id = null;
      Object value = null;
  }
      :   ( secondLevelId LESS value {
          id = $secondLevelId.result;
          value = $value.result;
      }
      |   value GREATER secondLevelId {
          id = $secondLevelId.result;
          value = $value.result;
      } ) {
          if (value instanceof Integer) {
              $result = new LessExpression<Integer>(id, (Integer) value);
          } else if (value instanceof Double) {
              $result = new LessExpression<Double>(id, (Double) value);
          } else {
              $result = new LessExpression<String>(id, (String) value);
          }
      }
      ;
  
  lessOrEqualExpression returns [LessOrEqualExpression result]
  @init {
      SecondLevelId id = null;
      Object value = null;
  }
      :   ( secondLevelId LESS_OR_EQUAL value {
          id = $secondLevelId.result;
          value = $value.result;
      }
      |   value GREATER_OR_EQUAL secondLevelId {
          id = $secondLevelId.result;
          value = $value.result;
      } ) {
          if (value instanceof Integer) {
              $result = new LessOrEqualExpression<Integer>(id, (Integer) value);
          } else if (value instanceof Double) {
              $result = new LessOrEqualExpression<Double>(id, (Double) value);
          } else {
              $result = new LessOrEqualExpression<String>(id, (String) value);
          }
      }
      ;
  
  greaterExpression returns [GreaterExpression result]
  @init {
      SecondLevelId id = null;
      Object value = null;
  }
      :   ( secondLevelId GREATER value {
          id = $secondLevelId.result;
          value = $value.result;
      }
      |   value LESS secondLevelId {
          id = $secondLevelId.result;
          value = $value.result;
      } ) {
          if (value instanceof Integer) {
              $result = new GreaterExpression<Integer>(id, (Integer) value);
          } else if (value instanceof Double) {
              $result = new GreaterExpression<Double>(id, (Double) value);
          } else {
              $result = new GreaterExpression<String>(id, (String) value);
          }
      }
      ;
  
  greaterOrEqualExpression returns [GreaterOrEqualExpression result]
  @init {
      SecondLevelId id = null;
      Object value = null;
  }
      :   ( secondLevelId GREATER_OR_EQUAL value {
          id = $secondLevelId.result;
          value = $value.result;
      }
      |   value LESS_OR_EQUAL secondLevelId {
          id = $secondLevelId.result;
          value = $value.result;
      } ) {
            if (value instanceof Integer) {
                $result = new GreaterOrEqualExpression<Integer>(id, (Integer) value);
            } else if (value instanceof Double) {
                $result = new GreaterOrEqualExpression<Double>(id, (Double) value);
            } else {
                $result = new GreaterOrEqualExpression<String>(id, (String) value);
            }
        }
      ;
  
  OR
  