anchor.diff:  	:	alternative (OR alternative)*
   	;
   
  -// An individual alt with an optional rewrite clause for the
  -// elements of the alt.
   alternative
   	:	elements
  -	|			// empty alt
  +	|	// empty alt
   	;
   
   elements
  
positive.code: 	|	FRAGMENT
  	;
  
  // A set of alts, rewritten as a BLOCK for generic processing
  // in tree walkers. Used by the rule 'rule' so that the list of
  // alts for a rule appears as a BLOCK containing the alts and
  // can be processed by the generic BLOCK rule. Note that we
  // use a separate rule so that the BLOCK node has start and stop
  // boundaries set correctly by rule post processing of rewrites.
  ruleBlock
  	:	ruleAltList
  	;
  
negative.code: 	:	labeledLexerElement ebnfSuffix?
  	|	lexerAtom ebnfSuffix?
  	|	lexerBlock ebnfSuffix?
  	|	ACTION QUESTION? // actions only allowed at end of outer alt actually,
                           // but preds can be anywhere
  	;
  
  labeledLexerElement
  	:	id (ASSIGN|PLUS_ASSIGN)
  		(	lexerAtom
  		|	block
  		)
  