anchor.diff:  
   num: NUM;
   
  -constant_def!
  -	: name:NAME EQUATE! value=constant_expr
  -		{ self.constants[name.getText()] = value }
  -	;
  -
  -constant returns [res]
  -	: n:NUM { res = int(n.getText()) }
  -	;
  -
  -constant_expr returns [res]
  -	: x=constant { res = x }
  -	| x=constant PLUS y=constant { res = x + y }
  -	| x=constant MINUS y=constant { res = x - y }
  -	;
  -
  -operands_decl
  +constant_def
  +	: NAME EQUATE! v:constant_expr
  +		{ ## = #(#[CONSTANT,"CONSTANT"], ##) }
  +	;
  +
  +constant_expr
  +	: NUM ((PLUS^|MINUS^) NUM)*
  +	;
  +
  +operands_decl!
   	: "OPERAND" operand_decl ( COMMA operand_decl )*
   	;
   
   operand_decl
   	: NAME EQUATE LCURLY parameter_list RCURLY
  -	| NAME parameter_list func_parameter ASSIGNSIZE exp
  -	;
  -	
  -func_parameter
  -	: LSQUARE parameter_list RSQUARE
  -	|
  +	| NAME parameter_list (LSQUARE parameter_list RSQUARE)? ASSIGNSIZE exp
   	;
   
   definition
  
positive.code: 	;
  
  postfix_suffix
  	: (AT) => AT LSQUARE exp COLON exp RSQUARE
  	| (S_E) => S_E
  	| (LCURLY num RCURLY) => LCURLY num RCURLY
  	;
  
  lookup_expr
  
negative.code: 	: REG_ID THEN exp
  	;
  
  registers_decl!
  	: ("INTEGER"^| "FLOAT"^) register_decl (COMMA register_decl)*
  	;
  
  register_decl!
  	: REG_ID INDEX num
  	| REG_ID LSQUARE num RSQUARE INDEX num 
  		( "COVERS" REG_ID TO REG_ID
  