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: 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')*;
  
negative.code: 	|	RETURN expr SEMI -> ^(RETURN expr)
  	|	block
  	|	ID 	(	
  			:	LPAREN expr_list RPAREN 		-> ^(INVOKE ID expr_list)
  			|	optional_subscript ASSIGN statement_assignment -> ^(ASSIGN ID statement_assignment optional_subscript?)
  			) SEMI
  	;
  
  optional_subscript
  	:	array_subscripts
  	|	
  