anchor.diff:      ;
   
   triplesSameSubject
  -    : varOrTerm propertyListNotEmpty[(CommonTree) $varOrTerm.tree] -> propertyListNotEmpty
  -    | triplesNode propertyListNotEmpty[(CommonTree) $triplesNode.tree]?
  +    : v=varOrTerm propertyListNotEmpty[(CommonTree) $varOrTerm.tree] -> ^(TRIPLE /*$v*/ propertyListNotEmpty)
  +    | (t=triplesNode -> $t) (p=propertyListNotEmpty[(CommonTree) $triplesNode.tree]? -> ^(TRIPLE $triplesSameSubject $p?))
       ;
   
   propertyListNotEmpty[CommonTree subject]
  
positive.code: 	
  triplesNode
      : OPEN_BRACE graphNode+ CLOSE_BRACE -> ^(COLLECTION graphNode+)
      | v=OPEN_SQUARE_BRACKET propertyListNotEmpty[(CommonTree) $v.tree] CLOSE_SQUARE_BRACKET -> propertyListNotEmpty
      ;
  
  graphNode
  
negative.code: 
  triplesSameSubjectPath
      : varOrTerm propertyListNotEmptyPath[(CommonTree) $varOrTerm.tree] -> ^(TRIPLE propertyListNotEmptyPath)
      | (t=triplesNode -> $t) (p=propertyListNotEmpty[(CommonTree) $triplesNode.tree]? -> ^(TRIPLE $triplesSameSubjectPath $p?))
      ;
    
  propertyListNotEmptyPath[CommonTree subject]
  