anchor.diff:  				;
   blankNode       : BLANK_NODE_LABEL ;
   // BNF: codeDecl ::= '%' iri? CODE
  -codeDecl		: '%' (productionName | iri? CODE?) ;
  -productionName  : UCASE_LABEL ;
  +codeDecl		: '%' (productionName '%' | iri? CODE) ;
  +productionName  : PRODUCTION_LABEL ;
   startActions	: codeDecl+ ;
   semanticActions	: codeDecl* ;
   rdfType			: RDF_TYPE ;
  
positive.code: INTEGER               : [+-]? [0-9]+ ;
  DECIMAL               : [+-]? [0-9]* '.' [0-9]+ ;
  DOUBLE                : [+-]? ([0-9]+ '.' [0-9]* EXPONENT | '.'? [0-9]+ EXPONENT) ;
  UCASE_LABEL           : [A-Z_][A-Z0-9_]* ;
  fragment EXPONENT     : [eE] [+-]? [0-9]+ ;
  
  STRING_LITERAL1       : '\'' (~[\u0027\u005C\u000A\u000D] | ECHAR | UCHAR)* '\'' ; /* #x27=' #x5C=\ #xA=new line #xD=carriage return */
  
negative.code: statement		: directive | notStartAction ;
  notStartAction  : start
  			    | shape
  			    | valueExprDefinition
  			    ;
  directive       : baseDecl
  				| prefixDecl
  				;
  valueExprDefinition : valueExprLabel ('=' valueClassExpr semanticActions | KW_EXTERNAL) ;
  valueClassExpr  : valueClass valueClassJuncts? ;
  valueClassJuncts : (KW_OR valueClass)+
  				|  (KW_AND valueClass)+
  				;
  valueExprLabel  : '$' (iri | blankNode) ;
  baseDecl 		: KW_BASE  IRIREF ;
  prefixDecl		: KW_PREFIX PNAME_NS IRIREF ;
  start           : KW_START '=' ( shapeLabel |
  