anchor.diff:  
   options {
   output = AST;
  -//backtrack=true;
  -//k=10;
  +backtrack=true;
  +k=10;
   
   }
   
   tokens {
  -OBJECT;ARRAY;NAME;ENTRY;PRIMITIVE;VALUECHOICE;
  +OBJECT;ARRAY;NAME;ENTRY;PRIMITIVE;VALUECHOICE;VALUESEQ;ENTRYSEQ;TYPEDEF;TYPEREF;
   }
   
   @header {
  
positive.code: 	  -> ^(ARRAY elements?)
  	;
  
  elements	: value (','! value)*
  	;
  	
  members	: entry (','! entry)*
  	;
  	 
  //entry	: StringExpr ':' value 
  //	  -> ^(ENTRY StringExpr value) 
  //
  entry
  	: lval ':'  rval
  	-> ^(ENTRY lval rval)
  	| lval
  	-> ^(ENTRY lval PRIMITIVE)
  	;
  lval
  	: LvalTkn 
  	-> ^(NAME LvalTkn)
  	;
  LvalTkn
  	: ('a'..'z')+
  	;
  
  rval
  	: value
  	;
  
  WS
  
negative.code: 
  program
  	: value
  	| LvalTkn '@' value
  	 -> ^(TYPEDEF LvalTkn value)
  	;
  
  value
  