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:      IDENTIFIER
    ;
  
  lparen : LPAREN { bracketStack.push(LPAREN); };
  rparen : RPAREN { bracketStack.pop(); };
  lcurly : LCURLY { bracketStack.push(LCURLY); };
  rcurly : RCURLY { bracketStack.pop(); };
  lsquare : LSQUARE { bracketStack.push(LSQUARE); };
  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
  
negative.code: 
  primary_expr :
       literal
    |  t_lparen FILLER? expr FILLER? t_rparen
    |  matrix
    |  cell_array
    |  access
  