anchor.diff:  	| NAME LSQUARE^ NAME RSQUARE!
   	;
   
  -// bit extraction
  +// bit extraction, sign extension, cast
   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!
  -	;
  -
  +	: primary_expr 
  +		( (AT) => AT^ LSQUARE! exp COLON! exp RSQUARE!
  +		| (S_E) => S_E^
  +		| (LCURLY num RCURLY) => LCURLY^ num RCURLY!
  +		)*
  +	;
  +
  +// operator lookup
   lookup_expr
  -	: postfix_expr (
  -		(lookup_op) => lookup_op lookup_expr
  -		| )
  -	;
  -
  -lookup_op
  -	: NAME LSQUARE^ NAME RSQUARE!
  -	;
  -
  -// sign extension
  -
  -// 
  -
  -// cast
  +	: postfix_expr 
  +		( (NAME LSQUARE NAME RSQUARE) => NAME LSQUARE! NAME RSQUARE^ lookup_expr
  +		|
  +		)
  +	;
   
   // not
   unary_expr
  
positive.code: 
  rtl_subst
  	: #(RTL (rtl_subst)*)
  	| n:NAME 
          {
              s = n.getText()
              if s in self.locals[-1]:
                  ## = self.astFactory.dupTree(self.locals[-1][s])
              if s in self.constants:
                  ## = self.astFactory.dupTree(self.constants[s])
          }
      | #(LSQUARE t:NAME i:rtl_subst)
          {
              if #i.getType() == NUM:
                  ## = self.astFactory.dup(self.tables[t.getText()][int(#i.getText())])
          }
      | #(LPAREN f:NAME { args = [] } (a:rtl_subst { args.append(a) } )* )
          {
              if f.getText() in self.functions:
                  params, rtl = self.functions[f.getText()]
  
negative.code: 	;
  
  instr_name
  	: instr_name_head instr_name_tail (instr_name_decor)*
  		{ ## = #(#[INSTR_NAME,"INSTR_NAME"], ##) }
  	;
  
  