anchor.diff:  NOT_EXISTS;
   FUNCTION;
   PATH;
  +PATH_SEQUENCE;
   PATH_PRIMARY;
   PATH_NEGATED;
   UNARY_NOT;
   UNARY_PLUS;
   UNARY_MINUS;
   UNARY;
  +BLANK_NODE;
   }
   
   @header {
  
positive.code:     ;
  
  selectVariables
      : v=var -> ^(VAR $v) 
      | OPEN_BRACE e=expression AS v=var CLOSE_BRACE -> ^(AS $e $v)
      ;
    
  constructQuery
  
negative.code:     ;
  
  triplesSameSubject
      : varOrTerm propertyListNotEmpty[(CommonTree)$varOrTerm.tree] -> ^(TRIPLE propertyListNotEmpty)
      | triplesNode propertyListNotEmpty[new CommonTree(new CommonToken(BLANK_NODE,"[]"))]? -> ^(TRIPLE triplesNode (/*^(SUBJECT BLANK_NODE)*/ propertyListNotEmpty)?) 
      ;
  
  propertyListNotEmpty[CommonTree subject]
      : verb objectList (SEMICOLON (verb objectList)?)* -> (^(SUBJECT {new CommonTree(subject)}) ^(PREDICATE verb)  objectList)+
      ;
  
  objectList
      : graphNode ( COMMA graphNode )* -> ^(OBJECT graphNode)+
      ;
  
  verb
  