anchor.diff:  
   rt
   	: assign_rt
  -	| NAME LPAREN exp_list RPAREN
  -//	| FLAGMACRO LPAREN flag_list RPAREN
  +	| NAME LPAREN^ exp_list RPAREN!
  +//	| FLAGMACRO LPAREN (REG_ID ( COMMA! REG_ID)* )? RPAREN
   	| UNDERSCORE
   	;
   
  -flag_list
  -	: (REG_ID ( COMMA REG_ID)* )?;
  -	
   parameter_list
  -	: (NAME) => NAME (COMMA NAME)*
  -	|
  -	;
  -
  -exp_list: (exp (COMMA exp)* )?;
  +	: (NAME) => NAME (COMMA! t:NAME)*
  +	| { res = [] }
  +	;
  +
  +exp_list: (exp (COMMA! exp)* )?;
   
   assign_rt
  -	: ASSIGNSIZE variable EQUATE exp
  +	: ASSIGNSIZE^ variable EQUATE exp
   /*		( (exp THEN) => exp THEN variable EQUATE exp
   		| (exp) => exp
   		| variable EQUATE exp
   		)*/
  -	| "FPUSH"
  -	| "FPOP"
  +	| "FPUSH"^
  +	| "FPOP"^
   	;
   
   primary_expr
   	: num
  -	| FLOATNUM
  +	| FLOATNUM^
   //	| TEMP
  -	| REG_ID
  -	| "r" LSQUARE exp RSQUARE
  -	| "m" LSQUARE exp RSQUARE
  -	| NAME
  -	| LPAREN exp RPAREN
  -	| LSQUARE exp QUEST exp COLON exp RSQUARE
  -	| "addr" LPAREN exp RPAREN
  +	| REG_ID^
  +	| "r"^ LSQUARE! exp RSQUARE!
  +	| "m"^ LSQUARE! exp RSQUARE!
  +	| NAME^
  +	| LPAREN! exp RPAREN!
  +	| LSQUARE! exp QUEST^ exp COLON! exp RSQUARE!
  +	| "addr" LPAREN^ exp RPAREN!
   //	| conv_func LPAREN num COMMA num COMMA exp RPAREN
   //	| transcend LPAREN exp RPAREN
  -	| NAME LPAREN exp_list RPAREN
  -	| NAME LSQUARE NAME RSQUARE
  +	| NAME LPAREN^ exp_list RPAREN!
  +	| NAME LSQUARE^ NAME RSQUARE!
   	;
   
   // bit extraction
  
positive.code: 	| QUOTE NAME QUOTE
  	;
  
  opstr_table returns [res]
  	: LCURLY! h:opstr_term { res = [#h] } (COMMA t:opstr_term { res.append(#t) })* RCURLY!
  	;
  
  opstr_term
  	: QUOTE! bin_oper QUOTE!
  	;
  
  bin_oper: bit_op | arith_op | farith_op;
  
  exprstr_table returns [res]
  	: LCURLY! h:exprstr_term { res = [#h] } (COMMA t:exprstr_term { res.append(#t) })* RCURLY!
  	;
  
  exprstr_term
  	: QUOTE! exp QUOTE!
  	;
  
  instr: instr_name parameter_list rt_list;
  
  instr_name: instr_elem (instr_decor)*;
  
  instr_elem
  	: (NAME
  	| PRIME NAME PRIME
  	| NAME LSQUARE (num|NAME) RSQUARE
  	| DOLLAR NAME LSQUARE (num|NAME) RSQUARE
  	| QUOTE NAME QUOTE
  	) 
  	( PRIME NAME PRIME
  	| (NAME LSQUARE) => NAME LSQUARE (num|NAME) RSQUARE
  	| DOLLAR NAME LSQUARE (num|NAME) RSQUARE
  	| QUOTE NAME QUOTE
  	)*
  	;
  
  instr_decor
  
negative.code: 	;
  
  postfix_suffix
  	: (AT) => AT^ LSQUARE! exp COLON! exp RSQUARE!
  	| (S_E) => S_E^
  	| (LCURLY num RCURLY) => LCURLY^ num RCURLY!
  	;
  
  lookup_expr
  