code: final public Selector BetweenPredicate() throws ParseException {
                                  Selector expr1, expr2, expr3; boolean neg=false;
      expr1 = Expression();
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case NOT:
        jj_consume_token(NOT);
                                     neg = true;
        break;
      default:
        jj_la1[16] = jj_gen;
        ;
      }
      jj_consume_token(BETWEEN);
      expr2 = Expression();
      jj_consume_token(AND);
      expr3 = Expression();
      Selector ans = ParseUtil.convertRange(expr1, expr2, expr3);
      if (neg) {if (true) return new OperatorImpl(Operator.NOT, ans);}
      else {if (true) return ans;}
      throw new Error("Missing return statement in function");
    }
docs: BetweenPredicate ::= Expression ( <NOT> )? <BETWEEN> Expression <AND> Expression