anchor.diff:  
   terms
   	: nil
  -	| inner_term ( COMMA! terms | nil )
  +	| term ( COMMA! terms | nil )
   		{ ## = #(#[COMMA,","], ##) }	
   	| STAR^ opt_wildcard
   	;
   	
   opt_wildcard
  -	: inner_term
  +	: term
   	|
   		{ ## = #(#[WILDCARD,"_"]) }	
   	;
  
positive.code: 		('-')?
  		// fraction
  		( ('0'..'9')+ ( '.' ('0'..'9')* { $setType(REAL); } )?
  		| '.' ( ('0'..'9')+ { $setType(REAL); } )?
  		) 
  		// exponent
  		( ('e'|'E') ('-'|'+')? ('0'..'9')+ { $setType(REAL); } )?
  	;
  
negative.code: 	;
  
  alternative
  	: ( predicate )* ( INTO ( production )* )?
  		{ ## = #(#[ALTERNATIVE,"ALTERNATIVE"], ##) }
  	;
  
  predicate
  	: ( SEMPRED ) => SEMPRED
  	| ( ACTION ) => ACTION
  	| term
  	;
  
  production
  	: ( ACTION ) => ACTION
  	| term
  	;
  
  // TODO: support variable assignments
  