anchor.diff:      ;
   
   varOrTerm
  -    : var | graphTerm
  +    : var
  +    | graphTerm
       ;
   
   varOrIRIref
  
positive.code:     ;
  
  triplesSameSubjectPath
      : varOrTerm propertyListNotEmptyPath[(CommonTree) $varOrTerm.tree] -> ^(TRIPLE propertyListNotEmptyPath)
      | (t=triplesNode -> $t) (p=propertyListNotEmpty[(CommonTree) $t.tree]? -> ^(TRIPLE $triplesSameSubjectPath $p?))
      ;
    
  propertyListNotEmptyPath[CommonTree subject]
      : (p=verbPath  objectList[subject, (CommonTree) $p.tree]| v=verbSimple objectList[subject, (CommonTree) $v.tree]) (SEMICOLON (p=verbPath objectList[subject, (CommonTree) $p.tree]  | v=verbSimple  objectList[subject, (CommonTree) $v.tree] )?)* -> objectList+
      ;
      
  verbPath
      : path
      ;
  
negative.code: 	
  triplesNode
      : OPEN_BRACE graphNode+ CLOSE_BRACE -> ^(COLLECTION graphNode+)
      | OPEN_SQUARE_BRACKET propertyListNotEmpty[new CommonTree(new CommonToken(BLANK_NODE,"[]"))] CLOSE_SQUARE_BRACKET -> ^(PROPERTY_LIST propertyListNotEmpty)
      ;
  
  graphNode
  