anchor.diff:  query : expression EOF ;
   
   expression
  -  : expression '.' (IDENTIFIER | multiSelectList | multiSelectHash | functionExpression | '*') # chainExpression
  +  : expression '.' (identifier | multiSelectList | multiSelectHash | functionExpression | '*') # chainExpression
     | expression bracketSpecifier # bracketedExpression
     | bracketSpecifier # bracketExpression
     | expression '||' expression # orExpression
  -  | IDENTIFIER # identifierExpression
  +  | identifier # identifierExpression
     | expression '&&' expression # andExpression
     | expression COMPARATOR expression # comparisonExpression
     | '!' expression # notExpression
  
positive.code: 
  LETTER : [a-zA-Z] ;
  
  IDENTIFIER
    : NAME
    | STRING
    ;
  
negative.code: 
  multiSelectHash : '{' keyvalExpr (',' keyvalExpr)* '}' ;
  
  keyvalExpr : identifier ':' expression ;
  
  bracketSpecifier
    : '[' (SIGNED_INT | '*' | SLICE_EXPRESSION) ']'
  