anchor.diff:    ;
   
   matrix :
  -     lsquare optional_row_list rsquare
  +     t_lsquare optional_row_list t_rsquare
     ;
   
   cell_array :
  -     lcurly optional_row_list rcurly
  +     t_lcurly optional_row_list t_rcurly
     ;
   
   optional_row_list :
  
positive.code:   ;
  
  paren_access :
       cell_access (FILLER? lparen FILLER? (arg_list FILLER?)? rparen)?
    ;
  
  cell_access :
       name (FILLER? lcurly FILLER? arg_list FILLER? rcurly)*
    |  {inParens()}? name FILLER? AT FILLER? name
    |  {!inParens()}? name AT name //TODO-AC: fix error message for name AT FILLER name case
    ;
  
negative.code:      IDENTIFIER
    ;
  
  t_lparen : LPAREN { bracketStack.push(LPAREN); };
  t_rparen : RPAREN { bracketStack.pop(); };
  t_lcurly : LCURLY { bracketStack.push(LCURLY); };
  t_rcurly : RCURLY { bracketStack.pop(); };
  t_lsquare : LSQUARE { bracketStack.push(LSQUARE); };
  t_rsquare : RSQUARE { bracketStack.pop(); };
  
  //NB: not distinguishing between identifiers and keywords at this level - everything is an ID
  //NB: not distinguishing between decimal and hex numbers at this level
  