anchor.diff:  	:	COMMA expr expr_list_tail
   	|	
   	;
  +
  +expr
  +	:	expr_head expr_tail
  +	;
  +
  +expr_tail
  +	:	binary_operator expr
  +	|
  +	;
  +
  +expr_head
  +	:	expr_head_base
  +	|	(ID	optional_subscript)	-> ^(REFERENCE ID optional_subscript?)
  +	;
  +
  +expr_head_base
  +	:	constant
  +	|	(LPAREN expr RPAREN)	-> expr
  +	;
  +
  +/////////////////////////////////////////////////////////////////////
  +// Statements
  +/////////////////////////////////////////////////////////////////////
   
   stat_seq
   	:	stat stat_tail -> ^(STATEMENTS stat stat_tail?)
  
positive.code: 	|	
  	;
  
  expr
  	:	(constant | value | LPAREN! expr RPAREN!) (options{greedy=true;}:binary_operator^ expr)*
  	;
  
  expr_list
  	:	expr expr_list_tail -> ^(EXPRS expr expr_list_tail) 
  
negative.code: OR 			: '|';
  ASSIGN		: ':=';
  
  ID			: ('a'..'z' |'A'..'Z') ('a'..'z'| 'A'..'Z' | '0'..'9' | '_')*;
  COMMENT		: '/*' .* '*/' {skip();} ;
  WS			: (' ' | '\t' | '\r'| '\n') {skip();};
  INTLIT		: ('0'..'9') ('0'..'9')*;
  