anchor.diff:  	: QUOTE^ bin_oper QUOTE!
   	;
   
  -bin_oper: bit_op | arith_op | farith_op;
  +bin_oper
  +	: MOD | MUL | DIV | SMUL | SDIV | SMOD | PLUS | MINUS 
  +	| "rlc" | "rrc" | "rl" | "rr" | RSHIFT | LSHIFT | RSHIFTA | OR | ORNOT | AND | ANDNOT | XOR | XORNOT
  +	| MUL_F | MUL_FD | MUL_FQ | MUL_FSD | MUL_FDQ | DIV_F | DIV_FD | DIV_FQ | PLUS_F | PLUS_FD | PLUS_FQ | MINUS_F | MINUS_FD | MINUS_FQ | "pow"
  +	;
   
   exprstr_table
   	: LCURLY^ exprstr_term (COMMA! t:exprstr_term)* RCURLY!
  
positive.code: 	| QUOTE^ NAME QUOTE!
  	;
  
  name_contract
  	: PRIME NAME PRIME
  	| NAME LSQUARE (num|NAME) RSQUARE
  	| DOLLAR NAME LSQUARE (num|NAME) RSQUARE
  	| QUOTE NAME QUOTE
  	;
  
  opstr_table 
  	: LCURLY^ opstr_term (COMMA! t:opstr_term)* RCURLY!
  	;
  
negative.code: 	
  // floating point arithmetic
  fp_expr
  	: unary_expr ((MUL_F^ | MUL_FD^ | MUL_FQ^ | MUL_FSD^ | MUL_FDQ^ | DIV_F^ | DIV_FD^ | DIV_FQ^ | PLUS_F^ | PLUS_FD^ | PLUS_FQ^ | MINUS_F^ | MINUS_FD^ | MINUS_FQ^ | "pow"^) unary_expr)*
  	;
  
  // arithmetic
  arith_expr
  	: fp_expr ((MOD^ | MUL^ | DIV^ | SMUL^ | SDIV^ | SMOD^ | PLUS^ | MINUS^) fp_expr)*
  	;
  
  // bit arithmetic
  bit_expr
  	: arith_expr (("rlc"^ | "rrc"^ | "rl"^ | "rr"^ | RSHIFT^ | LSHIFT^ | RSHIFTA^ | OR^ | ORNOT^ | AND^ | ANDNOT^ | XOR^ | XORNOT^) arith_expr)*
  	;
  
  // conditionals
  cond_expr
  	: bit_expr ((EQ^ | NE^ | LT^ | GT^ | LE^ | GE^ | LTU^ | GTU^ | LEU^ | GEU^) bit_expr)*
  	;
  	
  // logicals
  log_expr
  	: cond_expr (("and"^ | "or"^) cond_expr)*
  	;
  
  exp: log_expr;
  
  
  variable
  	: 
  