anchor.diff:    ;
   
   matrix :
  -     t_lsquare optional_row_list t_rsquare
  +     t_LSQUARE optional_row_list t_RSQUARE
     ;
   
   cell_array :
  -     t_lcurly optional_row_list t_rcurly
  +     t_LCURLY optional_row_list t_RCURLY
     ;
   
   optional_row_list :
  
positive.code: 
  primary_expr :
       literal
    |  t_lparen FILLER? expr FILLER? t_rparen
    |  matrix
    |  cell_array
    |  access
  
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
  