anchor.diff:      ;
   
   triplesSameSubjectPath
  -    : varOrTerm propertyListNotEmptyPath -> ^(TRIPLE varOrTerm* propertyListNotEmptyPath*)
  +    : varOrTerm propertyListNotEmptyPath -> ^(TRIPLE ^(SUBJECT varOrTerm*) propertyListNotEmptyPath*)
       | triplesNode propertyListPath -> ^(TRIPLE triplesNode* propertyListPath*)
       ;
     
   propertyListNotEmptyPath
  -    : ( verbPath | verbSimple ) objectList ( SEMICOLON ( ( verbPath | verbSimple ) objectList )? )*
  +    : ( verbPath | verbSimple ) objectList ( SEMICOLON ( ( verbPath | verbSimple ) objectList )? )* -> (^(PREDICATE verbPath? verbSimple?) objectList)+
       ;
   
   propertyListPath
  
positive.code:     ;
  
  objectList
      : graphNode ( COMMA graphNode )* -> ^(OBJECTLIST graphNode+)
      ;
  
  verb
  
negative.code: CONSTRUCTTRIPLES;
  PROPERTYLIST;
  COLLECTION;
  BLANKNODE;
  TRIPLE;
  SUBJECT;
  PREDICATE;
  OBJECT;
  NOTEXISTS;
  }
  
  