anchor.diff:  	: NAME EQUATE NUM ( ARITH_OP NUM )?
   	;
   
  -table_assign: NAME EQUATE table_expr;
  +table_assign: NAME EQUATE (table_expr)+;
   
   table_expr
  -	: (str_expr) => str_expr
  -	| opstr_expr
  -	| exprstr_expr
  -	;
  -	
  -str_expr
  -	: (str_term)*
  -	;
  -
  -opstr_expr
  -	: LCURLY opstr (COMMA opstr)* RCURLY
  -	;
  -
  -opstr
  -	: QUOTE ( bit_op | arith_op | farith_op ) QUOTE
  -	;
  -	
  -str_array
  -	: /* str_array str_expr
  -	| str_array COMMA QUOTE QUOTE
  -	| */ str_expr
  +	: NAME
  +	| LCURLY 
  +		( (str_list) => str_list
  +		| opstr_list
  +		| exprstr_list
  +		) RCURLY
  +	;
  +
  +str_list
  +	: str_term (COMMA str_term)* 
   	;
   
   str_term
  -	: LCURLY str_array RCURLY
  -	| name_expand
  -	;
  -
  -name_expand
  -	: "'" NAME "'"
  +	: NAME
  +	| name_contract
  +	| QUOTE QUOTE
  +	;
  +
  +name_contract
  +	: PRIME NAME PRIME
  +	| NAME LSQUARE (NUM|NAME) RSQUARE
  +	| DOLLAR NAME LSQUARE (NUM|NAME) RSQUARE
   	| QUOTE NAME QUOTE
  -	| DOLLAR NAME
  -	| NAME
  -	;
  -	
  -bin_oper: BIT_OP | ARITH_OP | FARITH_OP;
  -
  -opstr_array: QUOTE bin_oper QUOTE (COMMA QUOTE bin_oper QUOTE)*;
  -
  -exprstr_expr: LCURLY exprstr_array RCURLY;
  -
  -exprstr_array: QUOTE exp QUOTE (COMMA QUOTE exp QUOTE)*;
  +	;
  +	
  +opstr_list
  +	: opstr_term (COMMA opstr_term)*
  +	;
  +
  +opstr_term
  +	: QUOTE bin_oper QUOTE
  +	;
  +
  +bin_oper: bit_op | arith_op | farith_op;
  +
  +exprstr_list: exprstr_term (COMMA exprstr_term)*;
  +
  +exprstr_term: QUOTE exp QUOTE;
   
   instr: instr_name list_parameter rt_list;
   
   instr_name: instr_elem (instr_decor)*;
   
   instr_elem
  -	: n:NAME (LSQUARE (NUM | NAME) RSQUARE)?
  +	: (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
  -	: DOT NAME
  +	: DECOR // DOT (NAME | NUM)
   	| XOR QUOTE NAME QUOTE
   	;
   
  
positive.code: 	| (MINUS) => MINUS { $setType(MINUS); }
  	;
  
  NAME: ('A'..'Z'|'a'..'z')('A'..'Z'|'a'..'z'|'0'..'9')*;
  
  REG_ID:  '%' ('A'..'Z'|'a'..'z')('A'..'Z'|'a'..'z'|'0'..'9')*;
  
  
  COLON: ':';
  EQUATE: ":=";
  
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
  