anchor.diff:      ;
   
   triplesSameSubjectPath
  -    : varOrTerm propertyListNotEmptyPath[(CommonTree) $varOrTerm.tree] -> ^(TRIPLE /*^(SUBJECT varOrTerm)*/ propertyListNotEmptyPath)
  -    | triplesNode propertyListPath -> ^(TRIPLE triplesNode* propertyListPath*)
  +    : varOrTerm propertyListNotEmptyPath[(CommonTree) $varOrTerm.tree] -> ^(TRIPLE propertyListNotEmptyPath)
  +    | triplesNode propertyListNotEmpty[(CommonTree) $triplesNode.tree]? -> ^(TRIPLE triplesNode* propertyListNotEmpty*)
       ;
     
   propertyListNotEmptyPath[CommonTree subject]
  -    : ( verbPath | verbSimple ) objectList ( SEMICOLON ( ( verbPath | verbSimple ) objectList )? )* -> (^(SUBJECT {$subject}) ^(PREDICATE verbPath? verbSimple?) objectList)+
  -    ;
  -
  -propertyListPath
  -    : propertyListNotEmpty?
  +    : (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
  
positive.code:     ;
  
  triplesSameSubject
      : varOrTerm propertyListNotEmpty 
      | triplesNode propertyListNotEmpty?
      ;
  
  propertyListNotEmpty
      : verb objectList ( SEMICOLON ( verb objectList )? )* -> ^(PROPERTYLIST (verb objectList)+)
      ;
  
  objectList
      : graphNode ( COMMA graphNode )* -> ^(OBJECT graphNode+)
      ;
  
  verb
  
negative.code: 	
  triplesNode
      : OPEN_BRACE graphNode+ CLOSE_BRACE -> ^(COLLECTION graphNode+)
      | v=OPEN_SQUARE_BRACKET propertyListNotEmpty[(CommonTree) $v.tree] CLOSE_SQUARE_BRACKET -> propertyListNotEmpty
      ;
  
  graphNode
  