anchor.diff:  	
   triplesNode
       : ^(COLLECTION (g+=graphNode)+) -> triplesNode(graphNode={$g})
  -    | ^(TRIPLES_NODE ^(SUBJECT BLANK_NODE) p=propertyListNotEmpty) -> triplesNode(subject={"[ ]"}, propertyListNotEmpty={$p.st})
  +    | ^(TRIPLES_NODE p=propertyListNotEmpty) -> triplesNode(propertyListNotEmpty={$p.st})
       ;
   
   graphNode 
  
positive.code: 
  triplesSameSubject
      : ^(TRIPLES_SAME_SUBJECT ^(SUBJECT v=varOrTerm) p=propertyListNotEmpty) -> triplesSameSubject(subject={$v.st}, propertyListNotEmpty={$p.st})
      | ^(TRIPLES_SAME_SUBJECT t=triplesNode (^(SUBJECT BLANK_NODE) p=propertyListNotEmpty)?) -> triplesSameSubject(triplesNode={$t.st}, subject={$BLANK_NODE.text}, propertyListNotEmpty={$p.st})
      ;
      
  propertyListNotEmpty
      : (^(PREDICATE v+=verb)  o+=objectList)+ -> propertyListNotEmpty(verb={$v}, objectList={$o})
      ;
  
  objectList
      : (^(OBJECT g+=graphNode))+ -> objectList(graphNode={$g})
      ;
  
negative.code: 
  triplesSameSubjectPath
      : ^(TRIPLES_SAME_SUBJECT ^(SUBJECT v=varOrTerm) p=propertyListNotEmpty) -> triplesSameSubjectPath(subject={$v.st}, propertyListNotEmpty={$p.st})
      | ^(TRIPLES_SAME_SUBJECT t=triplesNode (p=propertyListNotEmpty)?) -> triplesSameSubjectPath(triplesNode={t.st}, propertyListNotEmpty={$p.st})
      ;
      
  path
  