anchor.diff:  blankNode       : BLANK_NODE_LABEL ;
   codeDecl		: '%' iri (CODE | '%') ;
   productionLabel : '$' (iri | blankNode) ;
  -rdfType			: RDF_TYPE ;
   
   // Reserved for future use
   includeSet      : '&' shapeLabel+ ;
  
positive.code: predicate       : iri
  				| rdfType
  				;
  datatype        : iri ;
  cardinality     :  '*'
  				| '+'
  				| '?'
  				| repeatRange
  				;
  shapeLabel      : iri
  				| blankNode
  				;
  
negative.code: 				;
  baseDecl 		: KW_BASE  IRIREF ;
  prefixDecl		: KW_PREFIX PNAME_NS IRIREF ;
  notStartAction  : start | shapeExprDecl ;
  start           : KW_START '=' shapeExpression ;
  startActions	: codeDecl+ ;
  statement 		: directive | notStartAction ;
  shapeExprDecl   : shapeLabel (shapeExpression | KW_EXTERNAL) ;
  shapeExpression : shapeOr ;
  shapeOr  		: shapeAnd (KW_OR shapeAnd)* ;
  shapeAnd		: shapeNot (KW_AND shapeNot)* ;
  shapeNot	    : (KW_NOT | '!')? shapeAtom ;
  inlineShapeExpression : inlineShapeOr ;
  inlineShapeOr   : inlineShapeAnd (KW_OR inlineShapeAnd)* ;
  inlineShapeAnd  : inlineShapeNot (KW_AND inlineShapeNot)* ;
  inlineShapeNot  : (KW_NOT | '!')? inlineShapeAtom ;
  shapeDefinition : (includeSet | extraPropertySet | KW_CLOSED)* '{' someOfShape? '}' annotation* semanticActions ;
  inlineShapeDefinition : (includeSet | extraPropertySet | KW_CLOSED)* '{' someOfShape? '}' ;
  extraPropertySet : KW_EXTRA predicate+ ;
  someOfShape     : groupShape
  				| multiElementSomeOf
  