anchor.diff:      ;
   
   bindingsClause
  -    : (BINDINGS (v+=var)* OPEN_CURLY_BRACE ( b+=bindingValueList )* CLOSE_CURLY_BRACE)? -> ^(BINDINGS $v* $b*)?
  +    : (BINDINGS var* OPEN_CURLY_BRACE bindingValueList* CLOSE_CURLY_BRACE)? -> ^(BINDINGS var* bindingValueList*)?
       ;
       
   bindingValueList
  -    : OPEN_BRACE (b+=bindingValue)* CLOSE_BRACE	-> ^(BINDINGVALUE $b*)
  +    : OPEN_BRACE bindingValue* CLOSE_BRACE -> ^(BINDINGVALUE bindingValue*)
       ;
       	
   bindingValue
  
positive.code: // $<Parser
  
  query
      : prologue ( selectQuery | constructQuery | describeQuery | askQuery ) bindingsClause EOF -> ^(QUERY prologue selectQuery* constructQuery* describeQuery* askQuery*)
      | update ( SEMICOLON update)* EOF -> ^(UPDATE update+)
      ;
  
  
negative.code:     ;
  
  triplesSameSubject
      : varOrTerm! propertyListNotEmpty[(CommonTree) $varOrTerm.tree]
      | triplesNode propertyListNotEmpty[(CommonTree) $triplesNode.tree]?
      ;
  
  