anchor.diff:  OR 			: '|';
   ASSIGN		: ':=';
   
  -ID			: ('a'..'z' |'A'..'Z') ('a'..'z'| 'A'..'Z' | '0'..'9')*;
  +ID			: ('a'..'z' |'A'..'Z') ('a'..'z'| 'A'..'Z' | '0'..'9' | '_')*;
   COMMENT		: '/*' .* '*/' {skip();} ;
   WS			: (' ' | '\t' | '\r'| '\n') {skip();};
   INTLIT		: ('0'..'9') ('0'..'9')*;
  
positive.code: 	;
  
  statement_assignment
  	:	expr
  	|	IF LPAREN expr_list RPAREN -> expr_list
  	;
  
  if_stmt
  
negative.code: 	:	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?)
  