anchor.diff:  	| (MINUS) => MINUS { $setType(MINUS); }
   	;
   
  -NAME: ('A'..'Z'|'a'..'z')('A'..'Z'|'a'..'z'|'0'..'9')*;
  +NAME: ('A'..'Z'|'a'..'z')('A'..'Z'|'a'..'z'|'0'..'9'|'_')*;
   
   REG_ID:  '%' ('A'..'Z'|'a'..'z')('A'..'Z'|'a'..'z'|'0'..'9')*;
   
  +DECOR
  +	: '.' ('A'..'Z'|'a'..'z')('A'..'Z'|'a'..'z'|'.'|'0'..'9')*
  +	//| '^' '"' ('A'..'Z'|'a'..'z')('A'..'Z'|'a'..'z') '"'
  +	;
   
   COLON: ':';
   EQUATE: ":=";
  
positive.code: 	;
  
  variable
  	: REG_ID
  	| "r" LSQUARE exp RSQUARE
  	| "m" LSQUARE exp RSQUARE
  	| NAME
  	;
  
  value
  
negative.code: 		| (exp) => exp
  		| variable EQUATE exp
  		)*/
  	| "FPUSH"
  	| "FPOP"
  	;
  
  primary_expr
  	: NUM
  	| 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
  //	| conv_func LPAREN NUM COMMA NUM COMMA exp RPAREN
  //	| transcend LPAREN exp RPAREN
  	| NAME LPAREN list_actualparameter RPAREN
  	| NAME LSQUARE NAME RSQUARE
  	;
  
  // bit extraction
  postfix_expr
  	: primary_expr (postfix_suffix)*
  	;
  
  postfix_suffix
  	: (AT) => AT LSQUARE exp COLON exp RSQUARE
  	| (S_E) => S_E
  	| (LCURLY NUM RCURLY) => LCURLY NUM RCURLY
  	;
  
  lookup_expr
  	: postfix_expr (
  		(lookup_op) => lookup_op lookup_expr
  		| )
  	;
  
  lookup_op
  	: NAME LSQUARE! NAME RSQUARE!
  	;
  
  // sign extension
  
  // 
  
  // cast
  
  // not
  unary_expr
  	: (NOT^ | FNEG^ | LNOT^)* lookup_expr
  	;
  	
  // floating point arithmetic
  expr5
  	: unary_expr (farith_op unary_expr)*
  	;
  
  // arithmetic
  