anchor.diff:      | simpleExpr
       ;
       
  -simpleExpr:
  -    functionCall
  +simpleExpr
  +    : functionCall
       | liter
       | ID
       | simpleExpr collateClause
  
positive.code:     | exprRecursive
      ;
  
  exprRecursive:
      matchNone
      ;
      
  booleanPrimary:
      booleanPrimary IS NOT? (TRUE | FALSE | UNKNOWN |NULL)
        | booleanPrimary SAFE_EQ predicate
       | booleanPrimary comparisonOperator predicate
        | booleanPrimary comparisonOperator (ALL | ANY) subquery
        | predicate
        ;
  
  comparisonOperator:
      EQ_OR_ASSIGN | GTE | GT | LTE | LT | NEQ_SYM | NEQ
      ;
  
  predicate:
      bitExpr NOT? IN subquery
      | bitExpr NOT? IN LEFT_PAREN simpleExpr ( COMMA  simpleExpr)* RIGHT_PAREN
      | bitExpr NOT? BETWEEN simpleExpr AND predicate
      | bitExpr SOUNDS LIKE simpleExpr
  
negative.code:     | bitExpr
      ;
    
  bitExpr
      : bitExpr BIT_INCLUSIVE_OR bitExpr
      | bitExpr BIT_AND bitExpr
      | bitExpr SIGNED_LEFT_SHIFT bitExpr
      | bitExpr SIGNED_RIGHT_SHIFT bitExpr
  