anchor.diff:  blankNode       : BLANK_NODE_LABEL ;
   codeDecl		: '%' iri (CODE | '%') ;
   productionLabel : '$' (iri | blankNode) ;
  -rdfType			: RDF_TYPE ;
   
   // Reserved for future use
   includeSet      : '&' shapeLabel+ ;
  
positive.code: // May 24, 2016 - EGP20150424
  // Aug 11, 2016 - EGP20160708
  // Sep 14, 2016 - Revised to match Eric's latest reshuffle
  
  grammar ShExDoc;
  
  
  shExDoc 		: directive* ((notStartAction | startActions) statement*)? EOF;  // leading CODE
  directive       : baseDecl
  
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
  