anchor.diff:                  throw new FailedPredicateException(input, "term_expr", "JSONException: " + err.getMessage());
               }
           }
  -        -> { array.length() > 1}? ^(AND_PRED factor_expr+)
  -        -> factor_expr
       ;
   
   factor_expr returns [Object json]
       :   predicate { $json = $predicate.json; }
       |   LPAR search_expr RPAR
           {$json = $search_expr.json;}
  -        -> search_expr
       ;
   
   predicate returns [JSONObject json]
  
positive.code:                 throw new FailedPredicateException(input, "between_predicate", "JSONException: " + err.getMessage());
              }
          }
          -> ^(BETWEEN NOT? $val1 $val2)
      ;
  
  range_predicate returns [JSONObject json]
  
negative.code:         }
      ;
  where returns [Object json]
      :   WHERE search_expr
          {
              $json = $search_expr.json;
          }
  