anchor.diff:  numericLength   : KW_TOTALDIGITS
   				| KW_FRACTIONDIGITS
   				;
  -onShapeExpr     : KW_ON (KW_SHAPE KW_EXPRESSION)? inlineShapeExpression ;
  +shapeDefinition : inlineShapeDefinition annotation* semanticActions ;
  +inlineShapeDefinition : qualifier* '{' tripleExpression? '}' ;
  +qualifier       : extension | extraPropertySet | KW_CLOSED ;
  +extraPropertySet : KW_EXTRA predicate+ ;
  +tripleExpression : oneOfTripleExpr ;
  +oneOfTripleExpr : groupTripleExpr
  +				| multiElementOneOf
  +				;
  +multiElementOneOf : groupTripleExpr ( '|' groupTripleExpr )+ ;
  +innerTripleExpr : multiElementGroup
  +				| multiElementOneOf
  +				;
  +groupTripleExpr : singleElementGroup
  +				| multiElementGroup
  +				;
  +singleElementGroup : unaryTripleExpr ';'? ;
  +multiElementGroup : unaryTripleExpr (';' unaryTripleExpr)+ ';'? ;
  +unaryTripleExpr : ('$' tripleExprLabel)? (tripleConstraint | bracketedTripleExpr)
  +				| include
  +				;
  +bracketedTripleExpr : '(' innerTripleExpr ')' cardinality? onShapeExpr? annotation* semanticActions ;
   tripleConstraint : senseFlags? predicate inlineShapeExpression cardinality? onShapeExpr? annotation* semanticActions ;
  -senseFlags      : '!' '^'?
  -				| '^' '!'?		// inverse not
  -				;
  +cardinality     :  '*'         # starCardinality
  +				| '+'          # plusCardinality
  +				| '?'          # optionalCardinality
  +				| repeatRange  # repeatCardinality
  +				;
  +// BNF: REPEAT_RANGE ::= '{' INTEGER (',' (INTEGER | '*')?)? '}'
  +repeatRange     : '{' INTEGER '}'							  # exactRange
  +				| '{' INTEGER ',' (INTEGER | UNBOUNDED)? '}'  # minMaxRange
  +				;
  +senseFlags      : '^ ' ;
   valueSet		: '[' valueSetValue* ']' ;
   valueSetValue   : iriRange
   				| literalRange
  
positive.code:                 | STRING_LITERAL1
  				| STRING_LITERAL2
  				;
  iri             : IRIREF
  				| prefixedName
  				;
  
negative.code: literalExclusion : '-' literal STEM_MARK? ;
  languageRange   : LANGTAG (STEM_MARK languageExclusion*)? ;
  languageExclusion : '-' LANGTAG STEM_MARK? ;
  include			: '&' tripleExprLabel ;
  annotation      : '//' predicate (iri | literal) ;
  				semanticActions	: codeDecl* ;
  codeDecl		: '%' iri (CODE | '%') ;
  literal         : rdfLiteral
  				| numericLiteral
  				| booleanLiteral
  				;
  // BNF: predicate ::= iri | RDF_TYPE
  predicate       : iri
  				| rdfType
  				;
  rdfType			: RDF_TYPE ;
  datatype        : iri ;
  shapeExprLabel  : iri
  				| blankNode
  				;
  