anchor.diff:                  throw new FailedPredicateException(input, "not_equal_predicate", "JSONException: " + err.getMessage());
               }                                         
           }
  -        -> ^(NOT_EQUAL column_name value predicate_props?)
       ;
   
   query_predicate returns [JSONObject json]
  
positive.code:                 throw new FailedPredicateException(input, "query_predicate", "JSONException: " + err.getMessage());
              }
          }
          -> ^(QUERY STRING_LITERAL)
      ;
  
  between_predicate returns [JSONObject json]
  
negative.code:                 throw new FailedPredicateException(input, "term_expr", "JSONException: " + err.getMessage());
              }
          }
      ;
  
  factor_expr returns [Object json]
      :   predicate { $json = $predicate.json; }
      |   LPAR search_expr RPAR
          {$json = $search_expr.json;}
      ;
  
  predicate returns [JSONObject json]
  