spreadsheet
typeScript/javascript spreadsheet parser, with formulas.
git clone https://git.vogt.world/spreadsheet.git
Log | Files | README.md
← Commit log
commit
message
[ParserConstants] organizing States by name and logical sequence
author
Ben Vogt <[email protected]>
date
2017-12-22 02:47:04
stats
1 file(s) changed, 622 insertions(+), 588 deletions(-)
files
src/Parser/ParserConstants.ts
   1diff --git a/src/Parser/ParserConstants.ts b/src/Parser/ParserConstants.ts
   2index 41c5123..8ef0f43 100644
   3--- a/src/Parser/ParserConstants.ts
   4+++ b/src/Parser/ParserConstants.ts
   5@@ -351,57 +351,70 @@ const SYMBOL_INDEX_TO_NAME = symbolIndexToName;
   6 
   7 
   8 const enum State {
   9-  START = 0,
  10-  FOLLOW_EXPRESSIONS = 1,
  11-  FOLLOW_EXPRESSION = 2,
  12-  FOLLOW_VARIABLE_SEQUENCE = 3,
  13-  START_NUMBER = 6,
  14-  START_STRING = 7,
  15-  LEFT_PAREN = 8,
  16-  PREFIX_UNARY_MINUS = 9,
  17-  PREFIX_UNARY_PLUS = 10,
  18-  FUNCTION = 11,
  19-  FOLLOWS_CELL = 12,
  20-  ERROR = 13,
  21-  FOLLOW_VARIABLE = 14,
  22-  FOLLOW_NUMBER_UPPER = 15,
  23-  FIXED_CELL = 16,
  24-  FOLLOW_CELL_UPPER = 17,
  25-  FOLLOW_POUND = 18,
  26-  EOF_AND_RETURN_LAST = 19,
  27-  NUMBER_FOLLOWED_BY_AMPERSAND = 20,
  28-  START_EQUALS = 21,
  29-  NUMBER_FOLLOWED_BY_PLUS = 22,
  30-  LESS_THAN = 23,
  31-  GREATER_THAN = 24,
  32-  NUMBER_FOLLOWED_BY_MINUS = 26,
  33-  NUMBER_FOLLOWED_BY_ASTERISK = 27,
  34-  NUMBER_FOLLOWED_BY_SLASH = 28,
  35-  NUMBER_FOLLOWED_BY_CARROT = 29,
  36-  EXPRESSION_FOLLOWING_LEFT_PAREN = 32,
  37-  EXPRESSION_FOLLOWING_PREFIX_UNARY_MINUS = 33,
  38-  EXPRESSION_FOLLOWING_PREFIX_UNARY_PLUS = 34,
  39-  FOLLOW_FUNCTION_THEN_LEFT_PAREN = 35,
  40-  FOLLOW_ERROR_ERROR = 36,
  41-  FOLLOW_POUND_VARIABLE = 42,
  42-  NUMBER_AMPERSAND_EXPRESSION = 43,
  43-  START_EQUALS_EXPRESSION = 44,
  44-  ADD_TWO_NUMBERS = 45,
  45-  LESS_THAN_EQUALS = 46,
  46-  LESSTHAN_GREATERTHAN = 47,
  47-  LESSTHAN_EXPRESSION = 48,
  48-  GREATER_THAN_EQUALS = 49,
  49-  GREATERTHAN_EXPRESSION = 50,
  50-  SUBTRACT_TWO_NUMBERS = 52,
  51-  MULTIPLY_TWO_NUMBERS = 53,
  52-  DIVIDE_TWO_NUMBERS = 54,
  53-  NUMBER_TO_POWER_OF_OTHER = 55,
  54+  // Start
  55+  Start = 0,
  56+  Start_Number = 6,
  57+  Start_String = 7,
  58+  Start_Equals = 21,
  59+  Start_Equals_Expression = 44,
  60+  // Number
  61+  Number_Plus = 22,
  62+  Number_Minus = 26,
  63+  Number_Asterisk = 27,
  64+  Number_Divide = 28,
  65+  Number_Carrot = 29,
  66+  Number_Ampersand = 20,
  67+  Number_Percent = 31,
  68+  // Error
  69+  Error = 13,
  70+  Error_Error = 36,
  71+  // LessThan
  72+  LessThan = 23,
  73+  LessThan_Equals = 46,
  74+  LessThan_GreaterThan = 47,
  75+  LessThan_Expression = 48,
  76+  // GreaterThan
  77+  GreaterThan = 24,
  78+  GreaterThan_Equals = 49,
  79+  GreaterThan_Expression = 50,
  80+  // Operations
  81+  AddTwoNumbers = 45,
  82+  SubtractTwoNumbers = 52,
  83+  MultiplyTwoNumbers = 53,
  84+  DivideTwoNumbers = 54,
  85+  PowerTwoNumbers = 55,
  86+  // Variable
  87+  Variable = 14,
  88+  Variable_SemiColon = 71,
  89+  Variable_Comma = 72,
  90+  // VariableSeq
  91+  VariableSeq = 3,
  92+  VariableSeq_Decimal = 30,
  93+  VariableSeq_Decimal_Variable = 56,
  94+  // Pound
  95+  Pound = 18,
  96+  Pound_Variable = 42,
  97+  // Other
  98+  Expressions = 1,
  99+  Expression = 2,
 100+  LeftParen = 8,
 101+  PrefixUnaryMinus = 9,
 102+  PrefixUnaryPlus = 10,
 103+  Function = 11,
 104+  Cell = 12,
 105+  NumberUpper = 15,
 106+  FixedCell = 16,
 107+  CellUpper = 17,
 108+  EOF_ReturnLast = 19,
 109+  LeftParen_Expression = 32,
 110+  PrefixUnaryMinus_Expression = 33,
 111+  PrefixUnaryPlus_Expression = 34,
 112+  Function_LeftParen = 35,
 113+  Number_Ampersand_Expression = 43,
 114   CLOSE_PAREN_ON_EXPRESSION = 57,
 115-  FUNCTION_LEFTPAREN_EXPRESSION = 60,
 116-  COMPARE_TWO_EXPRESSIONS_WITH_GTE = 69,
 117-  CLOSE_PAREN_ON_FUNCTION = 70,
 118-  VARIABLE_FOLLOWED_BY_SEMI_COLON = 71,
 119-  VARIABLE_FOLLOWED_BY_COMMA = 72
 120+  Function_LeftParen_Expression = 60,
 121+  GTETwoExpressions = 69,
 122+  CLOSE_PAREN_ON_FUNCTION = 70
 123 }
 124 
 125 
 126@@ -412,40 +425,40 @@ const enum State {
 127  */
 128 let table = [];
 129 // All functions in the spreadsheet start with a 0-token.
 130-table[State.START] = ObjectBuilder
 131-  .add(Symbol.ERROR, State.ERROR)
 132-  .add(Symbol.EXPRESSIONS, State.FOLLOW_EXPRESSIONS)
 133-  .add(Symbol.EXPRESSION, State.FOLLOW_EXPRESSION)
 134-  .add(Symbol.VARIABLE_SEQUENCE, State.FOLLOW_VARIABLE_SEQUENCE)
 135-  .add(Symbol.NUMBER, State.START_NUMBER)
 136-  .add(Symbol.STRING, [SHIFT, State.START_STRING])
 137-  .add(Symbol.PLUS, [SHIFT, State.PREFIX_UNARY_PLUS])
 138-  .add(Symbol.LEFT_PAREN, [SHIFT, State.LEFT_PAREN])
 139-  .add(Symbol.MINUS, [SHIFT, State.PREFIX_UNARY_MINUS])
 140-  .add(Symbol.FUNCTION, [SHIFT, State.FUNCTION])
 141-  .add(Symbol.CELL, State.FOLLOWS_CELL)
 142-  .add(Symbol.FIXEDCELL, [SHIFT, State.FIXED_CELL])
 143-  .add(Symbol.CELL_UPPER, [SHIFT, State.FOLLOW_CELL_UPPER])
 144-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_VARIABLE])
 145-  .add(Symbol.NUMBER_UPPER, [SHIFT, State.FOLLOW_NUMBER_UPPER])
 146-  .add(Symbol.POUND, [SHIFT, State.FOLLOW_POUND])
 147-  .build();
 148-table[State.FOLLOW_EXPRESSIONS] = ObjectBuilder
 149+table[State.Start] = ObjectBuilder
 150+  .add(Symbol.ERROR, State.Error)
 151+  .add(Symbol.EXPRESSIONS, State.Expressions)
 152+  .add(Symbol.EXPRESSION, State.Expression)
 153+  .add(Symbol.VARIABLE_SEQUENCE, State.VariableSeq)
 154+  .add(Symbol.NUMBER, State.Start_Number)
 155+  .add(Symbol.STRING, [SHIFT, State.Start_String])
 156+  .add(Symbol.PLUS, [SHIFT, State.PrefixUnaryPlus])
 157+  .add(Symbol.LEFT_PAREN, [SHIFT, State.LeftParen])
 158+  .add(Symbol.MINUS, [SHIFT, State.PrefixUnaryMinus])
 159+  .add(Symbol.FUNCTION, [SHIFT, State.Function])
 160+  .add(Symbol.CELL, State.Cell)
 161+  .add(Symbol.FIXEDCELL, [SHIFT, State.FixedCell])
 162+  .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
 163+  .add(Symbol.VARIABLE, [SHIFT, State.Variable])
 164+  .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
 165+  .add(Symbol.POUND, [SHIFT, State.Pound])
 166+  .build();
 167+table[State.Expressions] = ObjectBuilder
 168   .add(Symbol.END, [ACCEPT])
 169   .build();
 170-table[State.FOLLOW_EXPRESSION] = ObjectBuilder
 171-  .add(Symbol.EOF, [SHIFT, State.EOF_AND_RETURN_LAST])
 172-  .add(Symbol.AMPERSAND, [SHIFT, State.NUMBER_FOLLOWED_BY_AMPERSAND])
 173-  .add(Symbol.EQUALS, [SHIFT, State.START_EQUALS])
 174-  .add(Symbol.PLUS, [SHIFT, State.NUMBER_FOLLOWED_BY_PLUS])
 175-  .add(Symbol.LESS_THAN, [SHIFT, State.LESS_THAN])
 176-  .add(Symbol.GREATER_THAN, [SHIFT, State.GREATER_THAN])
 177-  .add(Symbol.MINUS, [SHIFT, State.NUMBER_FOLLOWED_BY_MINUS])
 178-  .add(Symbol.ASTERISK, [SHIFT, State.NUMBER_FOLLOWED_BY_ASTERISK])
 179-  .add(Symbol.DIVIDE, [SHIFT, State.NUMBER_FOLLOWED_BY_SLASH])
 180-  .add(Symbol.CARROT, [SHIFT, State.NUMBER_FOLLOWED_BY_CARROT])
 181-  .build();
 182-table[State.FOLLOW_VARIABLE_SEQUENCE] = ObjectBuilder
 183+table[State.Expression] = ObjectBuilder
 184+  .add(Symbol.EOF, [SHIFT, State.EOF_ReturnLast])
 185+  .add(Symbol.AMPERSAND, [SHIFT, State.Number_Ampersand])
 186+  .add(Symbol.EQUALS, [SHIFT, State.Start_Equals])
 187+  .add(Symbol.PLUS, [SHIFT, State.Number_Plus])
 188+  .add(Symbol.LESS_THAN, [SHIFT, State.LessThan])
 189+  .add(Symbol.GREATER_THAN, [SHIFT, State.GreaterThan])
 190+  .add(Symbol.MINUS, [SHIFT, State.Number_Minus])
 191+  .add(Symbol.ASTERISK, [SHIFT, State.Number_Asterisk])
 192+  .add(Symbol.DIVIDE, [SHIFT, State.Number_Divide])
 193+  .add(Symbol.CARROT, [SHIFT, State.Number_Carrot])
 194+  .build();
 195+table[State.VariableSeq] = ObjectBuilder
 196   .add(Symbol.EOF, [REDUCE, ReduceActions.CALL_VARIABLE])
 197   .add(Symbol.AMPERSAND, [REDUCE, ReduceActions.CALL_VARIABLE])
 198   .add(Symbol.EQUALS, [REDUCE, ReduceActions.CALL_VARIABLE])
 199@@ -459,9 +472,9 @@ table[State.FOLLOW_VARIABLE_SEQUENCE] = ObjectBuilder
 200   .add(Symbol.CARROT, [REDUCE, ReduceActions.CALL_VARIABLE])
 201   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.CALL_VARIABLE])
 202   .add(Symbol.COMMA, [REDUCE, ReduceActions.CALL_VARIABLE])
 203-  .add(Symbol.DECIMAL, [SHIFT, ReduceActions.CELL_VALUE])
 204+  .add(Symbol.DECIMAL, [SHIFT, State.VariableSeq_Decimal])
 205   .build();
 206-table[State.START_NUMBER] = ObjectBuilder
 207+table[State.Start_Number] = ObjectBuilder
 208   .add(Symbol.EOF, [REDUCE, ReduceActions.AS_NUMBER])
 209   .add(Symbol.AMPERSAND, [REDUCE, ReduceActions.AS_NUMBER])
 210   .add(Symbol.EQUALS, [REDUCE, ReduceActions.AS_NUMBER])
 211@@ -475,9 +488,9 @@ table[State.START_NUMBER] = ObjectBuilder
 212   .add(Symbol.CARROT, [REDUCE, ReduceActions.AS_NUMBER])
 213   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.AS_NUMBER])
 214   .add(Symbol.COMMA, [REDUCE, ReduceActions.AS_NUMBER])
 215-  .add(Symbol.PERCENT, [SHIFT, ReduceActions.CELL_RANGE_VALUE])
 216+  .add(Symbol.PERCENT, [SHIFT, State.Number_Percent])
 217   .build();
 218-table[State.START_STRING] = ObjectBuilder
 219+table[State.Start_String] = ObjectBuilder
 220   .add(Symbol.EOF, [REDUCE, ReduceActions.AS_STRING])
 221   .add(Symbol.AMPERSAND, [REDUCE, ReduceActions.AS_STRING])
 222   .add(Symbol.EQUALS, [REDUCE, ReduceActions.AS_STRING])
 223@@ -492,61 +505,61 @@ table[State.START_STRING] = ObjectBuilder
 224   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.AS_STRING])
 225   .add(Symbol.COMMA, [REDUCE, ReduceActions.AS_STRING])
 226   .build();
 227-table[State.LEFT_PAREN] = ObjectBuilder
 228-  .add(Symbol.ERROR, State.ERROR)
 229-  .add(Symbol.EXPRESSION, State.EXPRESSION_FOLLOWING_LEFT_PAREN)
 230-  .add(Symbol.VARIABLE_SEQUENCE, State.FOLLOW_VARIABLE_SEQUENCE)
 231-  .add(Symbol.NUMBER, State.START_NUMBER)
 232-  .add(Symbol.STRING, [SHIFT, State.START_STRING])
 233-  .add(Symbol.PLUS, [SHIFT, State.PREFIX_UNARY_PLUS])
 234-  .add(Symbol.LEFT_PAREN, [SHIFT, State.LEFT_PAREN])
 235-  .add(Symbol.MINUS, [SHIFT, State.PREFIX_UNARY_MINUS])
 236-  .add(Symbol.FUNCTION, [SHIFT, State.FUNCTION])
 237-  .add(Symbol.CELL, State.FOLLOWS_CELL)
 238-  .add(Symbol.FIXEDCELL, [SHIFT, State.FIXED_CELL])
 239-  .add(Symbol.CELL_UPPER, [SHIFT, State.FOLLOW_CELL_UPPER])
 240-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_VARIABLE])
 241-  .add(Symbol.NUMBER_UPPER, [SHIFT, State.FOLLOW_NUMBER_UPPER])
 242-  .add(Symbol.POUND, [SHIFT, State.FOLLOW_POUND])
 243-  .build();
 244-table[State.PREFIX_UNARY_MINUS] = ObjectBuilder
 245-  .add(Symbol.ERROR, State.ERROR)
 246-  .add(Symbol.EXPRESSION, State.EXPRESSION_FOLLOWING_PREFIX_UNARY_MINUS)
 247-  .add(Symbol.VARIABLE_SEQUENCE, State.FOLLOW_VARIABLE_SEQUENCE)
 248-  .add(Symbol.NUMBER, State.START_NUMBER)
 249-  .add(Symbol.STRING, [SHIFT, State.START_STRING])
 250-  .add(Symbol.PLUS, [SHIFT, State.PREFIX_UNARY_PLUS])
 251-  .add(Symbol.LEFT_PAREN, [SHIFT, State.LEFT_PAREN])
 252-  .add(Symbol.MINUS, [SHIFT, State.PREFIX_UNARY_MINUS])
 253-  .add(Symbol.FUNCTION, [SHIFT, State.FUNCTION])
 254-  .add(Symbol.CELL, State.FOLLOWS_CELL)
 255-  .add(Symbol.FIXEDCELL, [SHIFT, State.FIXED_CELL])
 256-  .add(Symbol.CELL_UPPER, [SHIFT, State.FOLLOW_CELL_UPPER])
 257-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_VARIABLE])
 258-  .add(Symbol.NUMBER_UPPER, [SHIFT, State.FOLLOW_NUMBER_UPPER])
 259-  .add(Symbol.POUND, [SHIFT, State.FOLLOW_POUND])
 260-  .build();
 261-table[State.PREFIX_UNARY_PLUS] = ObjectBuilder
 262-  .add(Symbol.ERROR, State.ERROR)
 263-  .add(Symbol.EXPRESSION, State.EXPRESSION_FOLLOWING_PREFIX_UNARY_PLUS)
 264-  .add(Symbol.VARIABLE_SEQUENCE, State.FOLLOW_VARIABLE_SEQUENCE)
 265-  .add(Symbol.NUMBER, State.START_NUMBER)
 266-  .add(Symbol.STRING, [SHIFT, State.START_STRING])
 267-  .add(Symbol.PLUS, [SHIFT, State.PREFIX_UNARY_PLUS])
 268-  .add(Symbol.LEFT_PAREN, [SHIFT, State.LEFT_PAREN])
 269-  .add(Symbol.MINUS, [SHIFT, State.PREFIX_UNARY_MINUS])
 270-  .add(Symbol.FUNCTION, [SHIFT, State.FUNCTION])
 271-  .add(Symbol.CELL, State.FOLLOWS_CELL)
 272-  .add(Symbol.FIXEDCELL, [SHIFT, State.FIXED_CELL])
 273-  .add(Symbol.CELL_UPPER, [SHIFT, State.FOLLOW_CELL_UPPER])
 274-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_VARIABLE])
 275-  .add(Symbol.NUMBER_UPPER, [SHIFT, State.FOLLOW_NUMBER_UPPER])
 276-  .add(Symbol.POUND, [SHIFT, State.FOLLOW_POUND])
 277-  .build();
 278-table[State.FUNCTION] = ObjectBuilder
 279-  .add(Symbol.LEFT_PAREN, [SHIFT, State.FOLLOW_FUNCTION_THEN_LEFT_PAREN])
 280-  .build();
 281-table[State.FOLLOWS_CELL] = ObjectBuilder
 282+table[State.LeftParen] = ObjectBuilder
 283+  .add(Symbol.ERROR, State.Error)
 284+  .add(Symbol.EXPRESSION, State.LeftParen_Expression)
 285+  .add(Symbol.VARIABLE_SEQUENCE, State.VariableSeq)
 286+  .add(Symbol.NUMBER, State.Start_Number)
 287+  .add(Symbol.STRING, [SHIFT, State.Start_String])
 288+  .add(Symbol.PLUS, [SHIFT, State.PrefixUnaryPlus])
 289+  .add(Symbol.LEFT_PAREN, [SHIFT, State.LeftParen])
 290+  .add(Symbol.MINUS, [SHIFT, State.PrefixUnaryMinus])
 291+  .add(Symbol.FUNCTION, [SHIFT, State.Function])
 292+  .add(Symbol.CELL, State.Cell)
 293+  .add(Symbol.FIXEDCELL, [SHIFT, State.FixedCell])
 294+  .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
 295+  .add(Symbol.VARIABLE, [SHIFT, State.Variable])
 296+  .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
 297+  .add(Symbol.POUND, [SHIFT, State.Pound])
 298+  .build();
 299+table[State.PrefixUnaryMinus] = ObjectBuilder
 300+  .add(Symbol.ERROR, State.Error)
 301+  .add(Symbol.EXPRESSION, State.PrefixUnaryMinus_Expression)
 302+  .add(Symbol.VARIABLE_SEQUENCE, State.VariableSeq)
 303+  .add(Symbol.NUMBER, State.Start_Number)
 304+  .add(Symbol.STRING, [SHIFT, State.Start_String])
 305+  .add(Symbol.PLUS, [SHIFT, State.PrefixUnaryPlus])
 306+  .add(Symbol.LEFT_PAREN, [SHIFT, State.LeftParen])
 307+  .add(Symbol.MINUS, [SHIFT, State.PrefixUnaryMinus])
 308+  .add(Symbol.FUNCTION, [SHIFT, State.Function])
 309+  .add(Symbol.CELL, State.Cell)
 310+  .add(Symbol.FIXEDCELL, [SHIFT, State.FixedCell])
 311+  .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
 312+  .add(Symbol.VARIABLE, [SHIFT, State.Variable])
 313+  .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
 314+  .add(Symbol.POUND, [SHIFT, State.Pound])
 315+  .build();
 316+table[State.PrefixUnaryPlus] = ObjectBuilder
 317+  .add(Symbol.ERROR, State.Error)
 318+  .add(Symbol.EXPRESSION, State.PrefixUnaryPlus_Expression)
 319+  .add(Symbol.VARIABLE_SEQUENCE, State.VariableSeq)
 320+  .add(Symbol.NUMBER, State.Start_Number)
 321+  .add(Symbol.STRING, [SHIFT, State.Start_String])
 322+  .add(Symbol.PLUS, [SHIFT, State.PrefixUnaryPlus])
 323+  .add(Symbol.LEFT_PAREN, [SHIFT, State.LeftParen])
 324+  .add(Symbol.MINUS, [SHIFT, State.PrefixUnaryMinus])
 325+  .add(Symbol.FUNCTION, [SHIFT, State.Function])
 326+  .add(Symbol.CELL, State.Cell)
 327+  .add(Symbol.FIXEDCELL, [SHIFT, State.FixedCell])
 328+  .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
 329+  .add(Symbol.VARIABLE, [SHIFT, State.Variable])
 330+  .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
 331+  .add(Symbol.POUND, [SHIFT, State.Pound])
 332+  .build();
 333+table[State.Function] = ObjectBuilder
 334+  .add(Symbol.LEFT_PAREN, [SHIFT, State.Function_LeftParen])
 335+  .build();
 336+table[State.Cell] = ObjectBuilder
 337   .add(Symbol.EOF, [REDUCE, ReduceActions.CELL_VALUE_AS_EXPRESSION])
 338   .add(Symbol.AMPERSAND, [REDUCE, ReduceActions.CELL_VALUE_AS_EXPRESSION])
 339   .add(Symbol.EQUALS, [REDUCE, ReduceActions.CELL_VALUE_AS_EXPRESSION])
 340@@ -561,8 +574,8 @@ table[State.FOLLOWS_CELL] = ObjectBuilder
 341   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.CELL_VALUE_AS_EXPRESSION])
 342   .add(Symbol.COMMA, [REDUCE, ReduceActions.CELL_VALUE_AS_EXPRESSION])
 343   .build();
 344-table[State.ERROR] = ObjectBuilder
 345-  .add(Symbol.ERROR, State.FOLLOW_ERROR_ERROR)
 346+table[State.Error] = ObjectBuilder
 347+  .add(Symbol.ERROR, State.Error_Error)
 348   .add(Symbol.EOF, [REDUCE, ReduceActions.ERROR_AND_CONTINUE])
 349   .add(Symbol.AMPERSAND, [REDUCE, ReduceActions.ERROR_AND_CONTINUE])
 350   .add(Symbol.EQUALS, [REDUCE, ReduceActions.ERROR_AND_CONTINUE])
 351@@ -576,10 +589,10 @@ table[State.ERROR] = ObjectBuilder
 352   .add(Symbol.CARROT, [REDUCE, ReduceActions.ERROR_AND_CONTINUE])
 353   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.ERROR_AND_CONTINUE])
 354   .add(Symbol.COMMA, [REDUCE, ReduceActions.ERROR_AND_CONTINUE])
 355-  .add(Symbol.VARIABLE, [SHIFT, ReduceActions.ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH])
 356-  .add(Symbol.POUND, [SHIFT, ReduceActions.MULTIPLY])
 357+  .add(Symbol.VARIABLE, [SHIFT, 37])
 358+  .add(Symbol.POUND, [SHIFT, 18])
 359   .build();
 360-table[State.FOLLOW_VARIABLE] = ObjectBuilder
 361+table[State.Variable] = ObjectBuilder
 362   .add(Symbol.EOF, [REDUCE, ReduceActions.WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY])
 363   .add(Symbol.AMPERSAND, [REDUCE, ReduceActions.WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY])
 364   .add(Symbol.EQUALS, [REDUCE, ReduceActions.WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY])
 365@@ -594,9 +607,9 @@ table[State.FOLLOW_VARIABLE] = ObjectBuilder
 366   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY])
 367   .add(Symbol.COMMA, [REDUCE, ReduceActions.WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY])
 368   .add(Symbol.DECIMAL, [REDUCE, ReduceActions.WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY])
 369-  .add(Symbol.POUND, [SHIFT, ReduceActions.REFLEXIVE_REDUCE])
 370+  .add(Symbol.POUND, [SHIFT, 38])
 371   .build();
 372-table[State.FOLLOW_NUMBER_UPPER] = ObjectBuilder
 373+table[State.NumberUpper] = ObjectBuilder
 374   .add(Symbol.EOF, [REDUCE, ReduceActions.REFLEXIVE_REDUCE])
 375   .add(Symbol.AMPERSAND, [REDUCE, ReduceActions.REFLEXIVE_REDUCE])
 376   .add(Symbol.EQUALS, [REDUCE, ReduceActions.REFLEXIVE_REDUCE])
 377@@ -610,11 +623,11 @@ table[State.FOLLOW_NUMBER_UPPER] = ObjectBuilder
 378   .add(Symbol.CARROT, [REDUCE, ReduceActions.REFLEXIVE_REDUCE])
 379   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.REFLEXIVE_REDUCE])
 380   .add(Symbol.COMMA, [REDUCE, ReduceActions.REFLEXIVE_REDUCE])
 381-  .add(Symbol.DECIMAL, [SHIFT, ReduceActions.REDUCE_FLOAT])
 382+  .add(Symbol.DECIMAL, [SHIFT, 39])
 383   .add(Symbol.PERCENT, [REDUCE, ReduceActions.REFLEXIVE_REDUCE])
 384   .add(38, [REDUCE, ReduceActions.REFLEXIVE_REDUCE])
 385   .build();
 386-table[State.FIXED_CELL] = ObjectBuilder
 387+table[State.FixedCell] = ObjectBuilder
 388   .add(Symbol.EOF, [REDUCE, ReduceActions.FIXED_CELL_VAL])
 389   .add(Symbol.AMPERSAND, [REDUCE, ReduceActions.FIXED_CELL_VAL])
 390   .add(Symbol.EQUALS, [REDUCE, ReduceActions.FIXED_CELL_VAL])
 391@@ -626,11 +639,11 @@ table[State.FIXED_CELL] = ObjectBuilder
 392   .add(Symbol.ASTERISK, [REDUCE, ReduceActions.FIXED_CELL_VAL])
 393   .add(Symbol.DIVIDE, [REDUCE, ReduceActions.FIXED_CELL_VAL])
 394   .add(Symbol.CARROT, [REDUCE, ReduceActions.FIXED_CELL_VAL])
 395-  .add(Symbol.COLON, [SHIFT, ReduceActions.REDUCE_PREV_AS_PERCENT])
 396+  .add(Symbol.COLON, [SHIFT, 40])
 397   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.FIXED_CELL_VAL])
 398   .add(Symbol.COMMA, [REDUCE, ReduceActions.FIXED_CELL_VAL])
 399   .build();
 400-table[State.FOLLOW_CELL_UPPER] = ObjectBuilder
 401+table[State.CellUpper] = ObjectBuilder
 402   .add(Symbol.EOF, [REDUCE, ReduceActions.CELL_VALUE])
 403   .add(Symbol.AMPERSAND, [REDUCE, ReduceActions.CELL_VALUE])
 404   .add(Symbol.EQUALS, [REDUCE, ReduceActions.CELL_VALUE])
 405@@ -642,196 +655,196 @@ table[State.FOLLOW_CELL_UPPER] = ObjectBuilder
 406   .add(Symbol.ASTERISK, [REDUCE, ReduceActions.CELL_VALUE])
 407   .add(Symbol.DIVIDE, [REDUCE, ReduceActions.CELL_VALUE])
 408   .add(Symbol.CARROT, [REDUCE, ReduceActions.CELL_VALUE])
 409-  .add(Symbol.COLON, [SHIFT, ReduceActions.REDUCE_LAST_THREE_A])
 410+  .add(Symbol.COLON, [SHIFT, 41])
 411   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.CELL_VALUE])
 412   .add(Symbol.COMMA, [REDUCE, ReduceActions.CELL_VALUE])
 413   .build();
 414-table[State.FOLLOW_POUND] = ObjectBuilder
 415-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_POUND_VARIABLE])
 416+table[State.Pound] = ObjectBuilder
 417+  .add(Symbol.VARIABLE, [SHIFT, State.Pound_Variable])
 418   .add(Symbol.EOF, [REDUCE, ReduceActions.AS_ERROR])
 419   .add(Symbol.RIGHT_PAREN, [REDUCE, ReduceActions.AS_ERROR])
 420   .add(Symbol.COMMA, [REDUCE, ReduceActions.AS_ERROR])
 421   .build();
 422-table[State.EOF_AND_RETURN_LAST] = ObjectBuilder
 423+table[State.EOF_ReturnLast] = ObjectBuilder
 424   .add(Symbol.END, [REDUCE, ReduceActions.RETURN_LAST])
 425   .build();
 426-table[State.NUMBER_FOLLOWED_BY_AMPERSAND] = ObjectBuilder
 427-  .add(Symbol.ERROR, State.ERROR)
 428-  .add(Symbol.EXPRESSION, State.NUMBER_AMPERSAND_EXPRESSION)
 429-  .add(Symbol.VARIABLE_SEQUENCE, State.FOLLOW_VARIABLE_SEQUENCE)
 430-  .add(Symbol.NUMBER, State.START_NUMBER)
 431-  .add(Symbol.STRING, [SHIFT, State.START_STRING])
 432-  .add(Symbol.PLUS, [SHIFT, State.PREFIX_UNARY_PLUS])
 433-  .add(Symbol.LEFT_PAREN, [SHIFT, State.LEFT_PAREN])
 434-  .add(Symbol.MINUS, [SHIFT, State.PREFIX_UNARY_MINUS])
 435-  .add(Symbol.FUNCTION, [SHIFT, State.FUNCTION])
 436-  .add(Symbol.CELL, State.FOLLOWS_CELL)
 437-  .add(Symbol.FIXEDCELL, [SHIFT, State.FIXED_CELL])
 438-  .add(Symbol.CELL_UPPER, [SHIFT, State.FOLLOW_CELL_UPPER])
 439-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_VARIABLE])
 440-  .add(Symbol.NUMBER_UPPER, [SHIFT, State.FOLLOW_NUMBER_UPPER])
 441-  .add(Symbol.POUND, [SHIFT, ReduceActions.MULTIPLY])
 442-  .build();
 443-table[State.START_EQUALS] = ObjectBuilder
 444-  .add(Symbol.ERROR, State.ERROR)
 445-  .add(Symbol.EXPRESSION, State.START_EQUALS_EXPRESSION)
 446-  .add(Symbol.VARIABLE_SEQUENCE, State.FOLLOW_VARIABLE_SEQUENCE)
 447-  .add(Symbol.NUMBER, State.START_NUMBER)
 448-  .add(Symbol.STRING, [SHIFT, State.START_STRING])
 449-  .add(Symbol.PLUS, [SHIFT, State.PREFIX_UNARY_PLUS])
 450-  .add(Symbol.LEFT_PAREN, [SHIFT, State.LEFT_PAREN])
 451-  .add(Symbol.MINUS, [SHIFT, State.PREFIX_UNARY_MINUS])
 452-  .add(Symbol.FUNCTION, [SHIFT, State.FUNCTION])
 453-  .add(Symbol.CELL, State.FOLLOWS_CELL)
 454-  .add(Symbol.FIXEDCELL, [SHIFT, State.FIXED_CELL])
 455-  .add(Symbol.CELL_UPPER, [SHIFT, State.FOLLOW_CELL_UPPER])
 456-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_VARIABLE])
 457-  .add(Symbol.NUMBER_UPPER, [SHIFT, State.FOLLOW_NUMBER_UPPER])
 458-  .add(Symbol.POUND, [SHIFT, State.FOLLOW_POUND])
 459-  .build();
 460-table[State.NUMBER_FOLLOWED_BY_PLUS] = ObjectBuilder
 461-  .add(Symbol.ERROR, State.ERROR)
 462-  .add(Symbol.EXPRESSION, State.ADD_TWO_NUMBERS)
 463-  .add(Symbol.VARIABLE_SEQUENCE, State.FOLLOW_VARIABLE_SEQUENCE)
 464-  .add(Symbol.NUMBER, State.START_NUMBER)
 465-  .add(Symbol.STRING, [SHIFT, State.START_STRING])
 466-  .add(Symbol.PLUS, [SHIFT, State.PREFIX_UNARY_PLUS])
 467-  .add(Symbol.LEFT_PAREN, [SHIFT, State.LEFT_PAREN])
 468-  .add(Symbol.MINUS, [SHIFT, State.PREFIX_UNARY_MINUS])
 469-  .add(Symbol.FUNCTION, [SHIFT, State.FUNCTION])
 470-  .add(Symbol.CELL, State.FOLLOWS_CELL)
 471-  .add(Symbol.FIXEDCELL, [SHIFT, State.FIXED_CELL])
 472-  .add(Symbol.CELL_UPPER, [SHIFT, State.FOLLOW_CELL_UPPER])
 473-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_VARIABLE])
 474-  .add(Symbol.NUMBER_UPPER, [SHIFT, State.FOLLOW_NUMBER_UPPER])
 475-  .add(Symbol.POUND, [SHIFT, State.FOLLOW_POUND])
 476-  .build();
 477-table[State.LESS_THAN] = ObjectBuilder
 478-  .add(Symbol.ERROR, State.ERROR)
 479-  .add(Symbol.EXPRESSION, State.LESSTHAN_EXPRESSION)
 480-  .add(Symbol.VARIABLE_SEQUENCE, State.FOLLOW_VARIABLE_SEQUENCE)
 481-  .add(Symbol.NUMBER, State.START_NUMBER)
 482-  .add(Symbol.STRING, [SHIFT, State.START_STRING])
 483-  .add(Symbol.EQUALS, [SHIFT, State.LESS_THAN_EQUALS])
 484-  .add(Symbol.PLUS, [SHIFT, State.PREFIX_UNARY_PLUS])
 485-  .add(Symbol.LEFT_PAREN, [SHIFT, State.LEFT_PAREN])
 486-  .add(Symbol.GREATER_THAN, [SHIFT, State.LESSTHAN_GREATERTHAN])
 487-  .add(Symbol.MINUS, [SHIFT, State.PREFIX_UNARY_MINUS])
 488-  .add(Symbol.FUNCTION, [SHIFT, State.FUNCTION])
 489-  .add(Symbol.CELL, State.FOLLOWS_CELL)
 490-  .add(Symbol.FIXEDCELL, [SHIFT, State.FIXED_CELL])
 491-  .add(Symbol.CELL_UPPER, [SHIFT, State.FOLLOW_CELL_UPPER])
 492-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_VARIABLE])
 493-  .add(Symbol.NUMBER_UPPER, [SHIFT, State.FOLLOW_NUMBER_UPPER])
 494-  .add(Symbol.POUND, [SHIFT, State.FOLLOW_POUND])
 495-  .build();
 496-table[State.GREATER_THAN] = ObjectBuilder
 497-  .add(Symbol.ERROR, State.ERROR)
 498-  .add(Symbol.EXPRESSION, State.GREATERTHAN_EXPRESSION)
 499-  .add(Symbol.VARIABLE_SEQUENCE, State.FOLLOW_VARIABLE_SEQUENCE)
 500-  .add(Symbol.NUMBER, State.START_NUMBER)
 501-  .add(Symbol.STRING, [SHIFT, State.START_STRING])
 502-  .add(Symbol.EQUALS, [SHIFT, State.GREATER_THAN_EQUALS])
 503-  .add(Symbol.PLUS, [SHIFT, State.PREFIX_UNARY_PLUS])
 504-  .add(Symbol.LEFT_PAREN, [SHIFT, State.LEFT_PAREN])
 505-  .add(Symbol.MINUS, [SHIFT, State.PREFIX_UNARY_MINUS])
 506-  .add(Symbol.FUNCTION, [SHIFT, State.FUNCTION])
 507-  .add(Symbol.CELL, State.FOLLOWS_CELL)
 508-  .add(Symbol.FIXEDCELL, [SHIFT, State.FIXED_CELL])
 509-  .add(Symbol.CELL_UPPER, [SHIFT, State.FOLLOW_CELL_UPPER])
 510-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_VARIABLE])
 511-  .add(Symbol.NUMBER_UPPER, [SHIFT, State.FOLLOW_NUMBER_UPPER])
 512-  .add(Symbol.POUND, [SHIFT, State.FOLLOW_POUND])
 513+table[State.Number_Ampersand] = ObjectBuilder
 514+  .add(Symbol.ERROR, State.Error)
 515+  .add(Symbol.EXPRESSION, State.Number_Ampersand_Expression)
 516+  .add(Symbol.VARIABLE_SEQUENCE, State.VariableSeq)
 517+  .add(Symbol.NUMBER, State.Start_Number)
 518+  .add(Symbol.STRING, [SHIFT, State.Start_String])
 519+  .add(Symbol.PLUS, [SHIFT, State.PrefixUnaryPlus])
 520+  .add(Symbol.LEFT_PAREN, [SHIFT, State.LeftParen])
 521+  .add(Symbol.MINUS, [SHIFT, State.PrefixUnaryMinus])
 522+  .add(Symbol.FUNCTION, [SHIFT, State.Function])
 523+  .add(Symbol.CELL, State.Cell)
 524+  .add(Symbol.FIXEDCELL, [SHIFT, State.FixedCell])
 525+  .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
 526+  .add(Symbol.VARIABLE, [SHIFT, State.Variable])
 527+  .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
 528+  .add(Symbol.POUND, [SHIFT, 18])
 529+  .build();
 530+table[State.Start_Equals] = ObjectBuilder
 531+  .add(Symbol.ERROR, State.Error)
 532+  .add(Symbol.EXPRESSION, State.Start_Equals_Expression)
 533+  .add(Symbol.VARIABLE_SEQUENCE, State.VariableSeq)
 534+  .add(Symbol.NUMBER, State.Start_Number)
 535+  .add(Symbol.STRING, [SHIFT, State.Start_String])
 536+  .add(Symbol.PLUS, [SHIFT, State.PrefixUnaryPlus])
 537+  .add(Symbol.LEFT_PAREN, [SHIFT, State.LeftParen])
 538+  .add(Symbol.MINUS, [SHIFT, State.PrefixUnaryMinus])
 539+  .add(Symbol.FUNCTION, [SHIFT, State.Function])
 540+  .add(Symbol.CELL, State.Cell)
 541+  .add(Symbol.FIXEDCELL, [SHIFT, State.FixedCell])
 542+  .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
 543+  .add(Symbol.VARIABLE, [SHIFT, State.Variable])
 544+  .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
 545+  .add(Symbol.POUND, [SHIFT, State.Pound])
 546+  .build();
 547+table[State.Number_Plus] = ObjectBuilder
 548+  .add(Symbol.ERROR, State.Error)
 549+  .add(Symbol.EXPRESSION, State.AddTwoNumbers)
 550+  .add(Symbol.VARIABLE_SEQUENCE, State.VariableSeq)
 551+  .add(Symbol.NUMBER, State.Start_Number)
 552+  .add(Symbol.STRING, [SHIFT, State.Start_String])
 553+  .add(Symbol.PLUS, [SHIFT, State.PrefixUnaryPlus])
 554+  .add(Symbol.LEFT_PAREN, [SHIFT, State.LeftParen])
 555+  .add(Symbol.MINUS, [SHIFT, State.PrefixUnaryMinus])
 556+  .add(Symbol.FUNCTION, [SHIFT, State.Function])
 557+  .add(Symbol.CELL, State.Cell)
 558+  .add(Symbol.FIXEDCELL, [SHIFT, State.FixedCell])
 559+  .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
 560+  .add(Symbol.VARIABLE, [SHIFT, State.Variable])
 561+  .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
 562+  .add(Symbol.POUND, [SHIFT, State.Pound])
 563+  .build();
 564+table[State.LessThan] = ObjectBuilder
 565+  .add(Symbol.ERROR, State.Error)
 566+  .add(Symbol.EXPRESSION, State.LessThan_Expression)
 567+  .add(Symbol.VARIABLE_SEQUENCE, State.VariableSeq)
 568+  .add(Symbol.NUMBER, State.Start_Number)
 569+  .add(Symbol.STRING, [SHIFT, State.Start_String])
 570+  .add(Symbol.EQUALS, [SHIFT, State.LessThan_Equals])
 571+  .add(Symbol.PLUS, [SHIFT, State.PrefixUnaryPlus])
 572+  .add(Symbol.LEFT_PAREN, [SHIFT, State.LeftParen])
 573+  .add(Symbol.GREATER_THAN, [SHIFT, State.LessThan_GreaterThan])
 574+  .add(Symbol.MINUS, [SHIFT, State.PrefixUnaryMinus])
 575+  .add(Symbol.FUNCTION, [SHIFT, State.Function])
 576+  .add(Symbol.CELL, State.Cell)
 577+  .add(Symbol.FIXEDCELL, [SHIFT, State.FixedCell])
 578+  .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
 579+  .add(Symbol.VARIABLE, [SHIFT, State.Variable])
 580+  .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
 581+  .add(Symbol.POUND, [SHIFT, State.Pound])
 582+  .build();
 583+table[State.GreaterThan] = ObjectBuilder
 584+  .add(Symbol.ERROR, State.Error)
 585+  .add(Symbol.EXPRESSION, State.GreaterThan_Expression)
 586+  .add(Symbol.VARIABLE_SEQUENCE, State.VariableSeq)
 587+  .add(Symbol.NUMBER, State.Start_Number)
 588+  .add(Symbol.STRING, [SHIFT, State.Start_String])
 589+  .add(Symbol.EQUALS, [SHIFT, State.GreaterThan_Equals])
 590+  .add(Symbol.PLUS, [SHIFT, State.PrefixUnaryPlus])
 591+  .add(Symbol.LEFT_PAREN, [SHIFT, State.LeftParen])
 592+  .add(Symbol.MINUS, [SHIFT, State.PrefixUnaryMinus])
 593+  .add(Symbol.FUNCTION, [SHIFT, State.Function])
 594+  .add(Symbol.CELL, State.Cell)
 595+  .add(Symbol.FIXEDCELL, [SHIFT, State.FixedCell])
 596+  .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
 597+  .add(Symbol.VARIABLE, [SHIFT, State.Variable])
 598+  .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
 599+  .add(Symbol.POUND, [SHIFT, State.Pound])
 600   .build();
 601 table[25] = ObjectBuilder
 602-  .add(Symbol.ERROR, State.ERROR)
 603+  .add(Symbol.ERROR, State.Error)
 604   .add(Symbol.EXPRESSION, 51)
 605-  .add(Symbol.VARIABLE_SEQUENCE, State.FOLLOW_VARIABLE_SEQUENCE)
 606-  .add(Symbol.NUMBER, State.START_NUMBER)
 607-  .add(Symbol.STRING, [SHIFT, State.START_STRING])
 608-  .add(Symbol.PLUS, [SHIFT, State.PREFIX_UNARY_PLUS])
 609-  .add(Symbol.LEFT_PAREN, [SHIFT, State.LEFT_PAREN])
 610-  .add(Symbol.MINUS, [SHIFT, State.PREFIX_UNARY_MINUS])
 611-  .add(Symbol.FUNCTION, [SHIFT, State.FUNCTION])
 612-  .add(Symbol.CELL, State.FOLLOWS_CELL)
 613-  .add(Symbol.FIXEDCELL, [SHIFT, State.FIXED_CELL])
 614-  .add(Symbol.CELL_UPPER, [SHIFT, State.FOLLOW_CELL_UPPER])
 615-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_VARIABLE])
 616-  .add(Symbol.NUMBER_UPPER, [SHIFT, State.FOLLOW_NUMBER_UPPER])
 617-  .add(Symbol.POUND, [SHIFT, State.FOLLOW_POUND])
 618-  .build();
 619-table[State.NUMBER_FOLLOWED_BY_MINUS] = ObjectBuilder
 620-  .add(Symbol.ERROR, State.ERROR)
 621-  .add(Symbol.EXPRESSION, State.SUBTRACT_TWO_NUMBERS)
 622-  .add(Symbol.VARIABLE_SEQUENCE, State.FOLLOW_VARIABLE_SEQUENCE)
 623-  .add(Symbol.NUMBER, State.START_NUMBER)
 624-  .add(Symbol.STRING, [SHIFT, State.START_STRING])
 625-  .add(Symbol.PLUS, [SHIFT, State.PREFIX_UNARY_PLUS])
 626-  .add(Symbol.LEFT_PAREN, [SHIFT, State.LEFT_PAREN])
 627-  .add(Symbol.MINUS, [SHIFT, State.PREFIX_UNARY_MINUS])
 628-  .add(Symbol.FUNCTION, [SHIFT, State.FUNCTION])
 629-  .add(Symbol.CELL, State.FOLLOWS_CELL)
 630-  .add(Symbol.FIXEDCELL, [SHIFT, State.FIXED_CELL])
 631-  .add(Symbol.CELL_UPPER, [SHIFT, State.FOLLOW_CELL_UPPER])
 632-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_VARIABLE])
 633-  .add(Symbol.NUMBER_UPPER, [SHIFT, State.FOLLOW_NUMBER_UPPER])
 634-  .add(Symbol.POUND, [SHIFT, State.FOLLOW_POUND])
 635-  .build();
 636-table[State.NUMBER_FOLLOWED_BY_ASTERISK] = ObjectBuilder
 637-  .add(Symbol.ERROR, State.ERROR)
 638-  .add(Symbol.EXPRESSION, State.MULTIPLY_TWO_NUMBERS)
 639-  .add(Symbol.VARIABLE_SEQUENCE, State.FOLLOW_VARIABLE_SEQUENCE)
 640-  .add(Symbol.NUMBER, State.START_NUMBER)
 641-  .add(Symbol.STRING, [SHIFT, State.START_STRING])
 642-  .add(Symbol.PLUS, [SHIFT, State.PREFIX_UNARY_PLUS])
 643-  .add(Symbol.LEFT_PAREN, [SHIFT, State.LEFT_PAREN])
 644-  .add(Symbol.MINUS, [SHIFT, State.PREFIX_UNARY_MINUS])
 645-  .add(Symbol.FUNCTION, [SHIFT, State.FUNCTION])
 646-  .add(Symbol.CELL, State.FOLLOWS_CELL)
 647-  .add(Symbol.FIXEDCELL, [SHIFT, State.FIXED_CELL])
 648-  .add(Symbol.CELL_UPPER, [SHIFT, State.FOLLOW_CELL_UPPER])
 649-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_VARIABLE])
 650-  .add(Symbol.NUMBER_UPPER, [SHIFT, State.FOLLOW_NUMBER_UPPER])
 651-  .add(Symbol.POUND, [SHIFT, State.FOLLOW_POUND])
 652-  .build();
 653-table[State.NUMBER_FOLLOWED_BY_SLASH] = ObjectBuilder
 654-  .add(Symbol.ERROR, State.ERROR)
 655-  .add(Symbol.EXPRESSION, State.DIVIDE_TWO_NUMBERS)
 656-  .add(Symbol.VARIABLE_SEQUENCE, State.FOLLOW_VARIABLE_SEQUENCE)
 657-  .add(Symbol.NUMBER, State.START_NUMBER)
 658-  .add(Symbol.STRING, [SHIFT, State.START_STRING])
 659-  .add(Symbol.PLUS, [SHIFT, State.PREFIX_UNARY_PLUS])
 660-  .add(Symbol.LEFT_PAREN, [SHIFT, State.LEFT_PAREN])
 661-  .add(Symbol.MINUS, [SHIFT, State.PREFIX_UNARY_MINUS])
 662-  .add(Symbol.FUNCTION, [SHIFT, State.FUNCTION])
 663-  .add(Symbol.CELL, State.FOLLOWS_CELL)
 664-  .add(Symbol.FIXEDCELL, [SHIFT, State.FIXED_CELL])
 665-  .add(Symbol.CELL_UPPER, [SHIFT, State.FOLLOW_CELL_UPPER])
 666-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_VARIABLE])
 667-  .add(Symbol.NUMBER_UPPER, [SHIFT, State.FOLLOW_NUMBER_UPPER])
 668-  .add(Symbol.POUND, [SHIFT, State.FOLLOW_POUND])
 669-  .build();
 670-table[State.NUMBER_FOLLOWED_BY_CARROT] = ObjectBuilder
 671-  .add(Symbol.ERROR, State.ERROR)
 672-  .add(Symbol.EXPRESSION, State.NUMBER_TO_POWER_OF_OTHER)
 673-  .add(Symbol.VARIABLE_SEQUENCE, State.FOLLOW_VARIABLE_SEQUENCE)
 674-  .add(Symbol.NUMBER, State.START_NUMBER)
 675-  .add(Symbol.STRING, [SHIFT, State.START_STRING])
 676-  .add(Symbol.PLUS, [SHIFT, State.PREFIX_UNARY_PLUS])
 677-  .add(Symbol.LEFT_PAREN, [SHIFT, State.LEFT_PAREN])
 678-  .add(Symbol.MINUS, [SHIFT, State.PREFIX_UNARY_MINUS])
 679-  .add(Symbol.FUNCTION, [SHIFT, State.FUNCTION])
 680-  .add(Symbol.CELL, State.FOLLOWS_CELL)
 681-  .add(Symbol.FIXEDCELL, [SHIFT, State.FIXED_CELL])
 682-  .add(Symbol.CELL_UPPER, [SHIFT, State.FOLLOW_CELL_UPPER])
 683-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_VARIABLE])
 684-  .add(Symbol.NUMBER_UPPER, [SHIFT, State.FOLLOW_NUMBER_UPPER])
 685-  .add(Symbol.POUND, [SHIFT, State.FOLLOW_POUND])
 686-  .build();
 687-table[30] = ObjectBuilder
 688-  .add(Symbol.VARIABLE, [SHIFT, 56])
 689-  .build();
 690-table[31] = ObjectBuilder
 691+  .add(Symbol.VARIABLE_SEQUENCE, State.VariableSeq)
 692+  .add(Symbol.NUMBER, State.Start_Number)
 693+  .add(Symbol.STRING, [SHIFT, State.Start_String])
 694+  .add(Symbol.PLUS, [SHIFT, State.PrefixUnaryPlus])
 695+  .add(Symbol.LEFT_PAREN, [SHIFT, State.LeftParen])
 696+  .add(Symbol.MINUS, [SHIFT, State.PrefixUnaryMinus])
 697+  .add(Symbol.FUNCTION, [SHIFT, State.Function])
 698+  .add(Symbol.CELL, State.Cell)
 699+  .add(Symbol.FIXEDCELL, [SHIFT, State.FixedCell])
 700+  .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
 701+  .add(Symbol.VARIABLE, [SHIFT, State.Variable])
 702+  .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
 703+  .add(Symbol.POUND, [SHIFT, State.Pound])
 704+  .build();
 705+table[State.Number_Minus] = ObjectBuilder
 706+  .add(Symbol.ERROR, State.Error)
 707+  .add(Symbol.EXPRESSION, State.SubtractTwoNumbers)
 708+  .add(Symbol.VARIABLE_SEQUENCE, State.VariableSeq)
 709+  .add(Symbol.NUMBER, State.Start_Number)
 710+  .add(Symbol.STRING, [SHIFT, State.Start_String])
 711+  .add(Symbol.PLUS, [SHIFT, State.PrefixUnaryPlus])
 712+  .add(Symbol.LEFT_PAREN, [SHIFT, State.LeftParen])
 713+  .add(Symbol.MINUS, [SHIFT, State.PrefixUnaryMinus])
 714+  .add(Symbol.FUNCTION, [SHIFT, State.Function])
 715+  .add(Symbol.CELL, State.Cell)
 716+  .add(Symbol.FIXEDCELL, [SHIFT, State.FixedCell])
 717+  .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
 718+  .add(Symbol.VARIABLE, [SHIFT, State.Variable])
 719+  .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
 720+  .add(Symbol.POUND, [SHIFT, State.Pound])
 721+  .build();
 722+table[State.Number_Asterisk] = ObjectBuilder
 723+  .add(Symbol.ERROR, State.Error)
 724+  .add(Symbol.EXPRESSION, State.MultiplyTwoNumbers)
 725+  .add(Symbol.VARIABLE_SEQUENCE, State.VariableSeq)
 726+  .add(Symbol.NUMBER, State.Start_Number)
 727+  .add(Symbol.STRING, [SHIFT, State.Start_String])
 728+  .add(Symbol.PLUS, [SHIFT, State.PrefixUnaryPlus])
 729+  .add(Symbol.LEFT_PAREN, [SHIFT, State.LeftParen])
 730+  .add(Symbol.MINUS, [SHIFT, State.PrefixUnaryMinus])
 731+  .add(Symbol.FUNCTION, [SHIFT, State.Function])
 732+  .add(Symbol.CELL, State.Cell)
 733+  .add(Symbol.FIXEDCELL, [SHIFT, State.FixedCell])
 734+  .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
 735+  .add(Symbol.VARIABLE, [SHIFT, State.Variable])
 736+  .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
 737+  .add(Symbol.POUND, [SHIFT, State.Pound])
 738+  .build();
 739+table[State.Number_Divide] = ObjectBuilder
 740+  .add(Symbol.ERROR, State.Error)
 741+  .add(Symbol.EXPRESSION, State.DivideTwoNumbers)
 742+  .add(Symbol.VARIABLE_SEQUENCE, State.VariableSeq)
 743+  .add(Symbol.NUMBER, State.Start_Number)
 744+  .add(Symbol.STRING, [SHIFT, State.Start_String])
 745+  .add(Symbol.PLUS, [SHIFT, State.PrefixUnaryPlus])
 746+  .add(Symbol.LEFT_PAREN, [SHIFT, State.LeftParen])
 747+  .add(Symbol.MINUS, [SHIFT, State.PrefixUnaryMinus])
 748+  .add(Symbol.FUNCTION, [SHIFT, State.Function])
 749+  .add(Symbol.CELL, State.Cell)
 750+  .add(Symbol.FIXEDCELL, [SHIFT, State.FixedCell])
 751+  .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
 752+  .add(Symbol.VARIABLE, [SHIFT, State.Variable])
 753+  .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
 754+  .add(Symbol.POUND, [SHIFT, State.Pound])
 755+  .build();
 756+table[State.Number_Carrot] = ObjectBuilder
 757+  .add(Symbol.ERROR, State.Error)
 758+  .add(Symbol.EXPRESSION, State.PowerTwoNumbers)
 759+  .add(Symbol.VARIABLE_SEQUENCE, State.VariableSeq)
 760+  .add(Symbol.NUMBER, State.Start_Number)
 761+  .add(Symbol.STRING, [SHIFT, State.Start_String])
 762+  .add(Symbol.PLUS, [SHIFT, State.PrefixUnaryPlus])
 763+  .add(Symbol.LEFT_PAREN, [SHIFT, State.LeftParen])
 764+  .add(Symbol.MINUS, [SHIFT, State.PrefixUnaryMinus])
 765+  .add(Symbol.FUNCTION, [SHIFT, State.Function])
 766+  .add(Symbol.CELL, State.Cell)
 767+  .add(Symbol.FIXEDCELL, [SHIFT, State.FixedCell])
 768+  .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
 769+  .add(Symbol.VARIABLE, [SHIFT, State.Variable])
 770+  .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
 771+  .add(Symbol.POUND, [SHIFT, State.Pound])
 772+  .build();
 773+table[State.VariableSeq_Decimal] = ObjectBuilder
 774+  .add(Symbol.VARIABLE, [SHIFT, State.VariableSeq_Decimal_Variable])
 775+  .build();
 776+table[State.Number_Percent] = ObjectBuilder
 777   .add(Symbol.EOF, [REDUCE, ReduceActions.REDUCE_PREV_AS_PERCENT])
 778   .add(Symbol.AMPERSAND, [REDUCE, ReduceActions.REDUCE_PREV_AS_PERCENT])
 779   .add(Symbol.EQUALS, [REDUCE, ReduceActions.REDUCE_PREV_AS_PERCENT])
 780@@ -848,69 +861,69 @@ table[31] = ObjectBuilder
 781   .add(Symbol.PERCENT, [REDUCE, ReduceActions.REDUCE_PREV_AS_PERCENT])
 782   .add(38, [REDUCE, ReduceActions.REDUCE_PREV_AS_PERCENT])
 783   .build();
 784-table[State.EXPRESSION_FOLLOWING_LEFT_PAREN] = ObjectBuilder
 785-  .add(Symbol.AMPERSAND, [SHIFT, State.NUMBER_FOLLOWED_BY_AMPERSAND])
 786-  .add(Symbol.EQUALS, [SHIFT, State.START_EQUALS])
 787-  .add(Symbol.PLUS, [SHIFT, State.NUMBER_FOLLOWED_BY_PLUS])
 788+table[State.LeftParen_Expression] = ObjectBuilder
 789+  .add(Symbol.AMPERSAND, [SHIFT, State.Number_Ampersand])
 790+  .add(Symbol.EQUALS, [SHIFT, State.Start_Equals])
 791+  .add(Symbol.PLUS, [SHIFT, State.Number_Plus])
 792   .add(Symbol.RIGHT_PAREN, [SHIFT, State.CLOSE_PAREN_ON_EXPRESSION])
 793-  .add(Symbol.LESS_THAN, [SHIFT, State.LESS_THAN])
 794-  .add(Symbol.GREATER_THAN, [SHIFT, State.GREATER_THAN])
 795-  .add(Symbol.MINUS, [SHIFT, State.NUMBER_FOLLOWED_BY_MINUS])
 796-  .add(Symbol.ASTERISK, [SHIFT, State.NUMBER_FOLLOWED_BY_ASTERISK])
 797-  .add(Symbol.DIVIDE, [SHIFT, State.NUMBER_FOLLOWED_BY_SLASH])
 798-  .add(Symbol.CARROT, [SHIFT, State.NUMBER_FOLLOWED_BY_CARROT])
 799-  .build();
 800-table[State.EXPRESSION_FOLLOWING_PREFIX_UNARY_MINUS] = ObjectBuilder
 801+  .add(Symbol.LESS_THAN, [SHIFT, State.LessThan])
 802+  .add(Symbol.GREATER_THAN, [SHIFT, State.GreaterThan])
 803+  .add(Symbol.MINUS, [SHIFT, State.Number_Minus])
 804+  .add(Symbol.ASTERISK, [SHIFT, State.Number_Asterisk])
 805+  .add(Symbol.DIVIDE, [SHIFT, State.Number_Divide])
 806+  .add(Symbol.CARROT, [SHIFT, State.Number_Carrot])
 807+  .build();
 808+table[State.PrefixUnaryMinus_Expression] = ObjectBuilder
 809   .add(Symbol.EOF, [REDUCE, ReduceActions.INVERT_NUM])
 810-  .add(Symbol.AMPERSAND, [SHIFT, ReduceActions.TO_POWER])
 811+  .add(Symbol.AMPERSAND, [SHIFT, State.Number_Ampersand])
 812   .add(Symbol.EQUALS, [REDUCE, ReduceActions.INVERT_NUM])
 813   .add(Symbol.PLUS, [REDUCE, ReduceActions.INVERT_NUM])
 814   .add(Symbol.RIGHT_PAREN, [REDUCE, ReduceActions.INVERT_NUM])
 815   .add(Symbol.LESS_THAN, [REDUCE, ReduceActions.INVERT_NUM])
 816   .add(Symbol.GREATER_THAN, [REDUCE, ReduceActions.INVERT_NUM])
 817   .add(Symbol.MINUS, [REDUCE, ReduceActions.INVERT_NUM])
 818-  .add(Symbol.ASTERISK, [SHIFT, ReduceActions.ERROR_AND_CONTINUE_WITH_OTHER_ERRORS])
 819-  .add(Symbol.DIVIDE, [SHIFT, ReduceActions.FIXED_CELL_VAL])
 820-  .add(Symbol.CARROT, [SHIFT, ReduceActions.FIXED_CELL_RANGE_VAL])
 821+  .add(Symbol.ASTERISK, [SHIFT, 27])
 822+  .add(Symbol.DIVIDE, [SHIFT, 28])
 823+  .add(Symbol.CARROT, [SHIFT, 29])
 824   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.INVERT_NUM])
 825   .add(Symbol.COMMA, [REDUCE, ReduceActions.INVERT_NUM])
 826   .build();
 827-table[State.EXPRESSION_FOLLOWING_PREFIX_UNARY_PLUS] = ObjectBuilder
 828+table[State.PrefixUnaryPlus_Expression] = ObjectBuilder
 829   .add(Symbol.EOF, [REDUCE, ReduceActions.TO_NUMBER_NAN_AS_ZERO])
 830-  .add(Symbol.AMPERSAND, [SHIFT, State.NUMBER_FOLLOWED_BY_AMPERSAND])
 831+  .add(Symbol.AMPERSAND, [SHIFT, State.Number_Ampersand])
 832   .add(Symbol.EQUALS, [REDUCE, ReduceActions.TO_NUMBER_NAN_AS_ZERO])
 833   .add(Symbol.PLUS, [REDUCE, ReduceActions.TO_NUMBER_NAN_AS_ZERO])
 834   .add(Symbol.RIGHT_PAREN, [REDUCE, ReduceActions.TO_NUMBER_NAN_AS_ZERO])
 835   .add(Symbol.LESS_THAN, [REDUCE, ReduceActions.TO_NUMBER_NAN_AS_ZERO])
 836   .add(Symbol.GREATER_THAN, [REDUCE, ReduceActions.TO_NUMBER_NAN_AS_ZERO])
 837   .add(Symbol.MINUS, [REDUCE, ReduceActions.TO_NUMBER_NAN_AS_ZERO])
 838-  .add(Symbol.ASTERISK, [SHIFT, State.NUMBER_FOLLOWED_BY_ASTERISK])
 839-  .add(Symbol.DIVIDE, [SHIFT, State.NUMBER_FOLLOWED_BY_SLASH])
 840-  .add(Symbol.CARROT, [SHIFT, State.NUMBER_FOLLOWED_BY_CARROT])
 841+  .add(Symbol.ASTERISK, [SHIFT, State.Number_Asterisk])
 842+  .add(Symbol.DIVIDE, [SHIFT, State.Number_Divide])
 843+  .add(Symbol.CARROT, [SHIFT, State.Number_Carrot])
 844   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.TO_NUMBER_NAN_AS_ZERO])
 845   .add(Symbol.COMMA, [REDUCE, ReduceActions.TO_NUMBER_NAN_AS_ZERO])
 846   .build();
 847-table[State.FOLLOW_FUNCTION_THEN_LEFT_PAREN] = ObjectBuilder
 848-  .add(Symbol.ERROR, State.ERROR)
 849-  .add(Symbol.EXPRESSION, State.FUNCTION_LEFTPAREN_EXPRESSION)
 850-  .add(Symbol.VARIABLE_SEQUENCE, State.FOLLOW_VARIABLE_SEQUENCE)
 851-  .add(Symbol.NUMBER, State.START_NUMBER)
 852-  .add(Symbol.STRING, [SHIFT, State.START_STRING])
 853-  .add(Symbol.PLUS, [SHIFT, State.PREFIX_UNARY_PLUS])
 854-  .add(Symbol.LEFT_PAREN, [SHIFT, State.LEFT_PAREN])
 855+table[State.Function_LeftParen] = ObjectBuilder
 856+  .add(Symbol.ERROR, State.Error)
 857+  .add(Symbol.EXPRESSION, State.Function_LeftParen_Expression)
 858+  .add(Symbol.VARIABLE_SEQUENCE, State.VariableSeq)
 859+  .add(Symbol.NUMBER, State.Start_Number)
 860+  .add(Symbol.STRING, [SHIFT, State.Start_String])
 861+  .add(Symbol.PLUS, [SHIFT, State.PrefixUnaryPlus])
 862+  .add(Symbol.LEFT_PAREN, [SHIFT, State.LeftParen])
 863   .add(Symbol.RIGHT_PAREN, [SHIFT, 58])
 864-  .add(Symbol.MINUS, [SHIFT, State.PREFIX_UNARY_MINUS])
 865-  .add(Symbol.FUNCTION, [SHIFT, State.FUNCTION])
 866+  .add(Symbol.MINUS, [SHIFT, State.PrefixUnaryMinus])
 867+  .add(Symbol.FUNCTION, [SHIFT, State.Function])
 868   .add(Symbol.EXP_SEQ, 59)
 869-  .add(Symbol.CELL, State.FOLLOWS_CELL)
 870-  .add(Symbol.FIXEDCELL, [SHIFT, State.FIXED_CELL])
 871-  .add(Symbol.CELL_UPPER, [SHIFT, State.FOLLOW_CELL_UPPER])
 872+  .add(Symbol.CELL, State.Cell)
 873+  .add(Symbol.FIXEDCELL, [SHIFT, State.FixedCell])
 874+  .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
 875   .add(Symbol.ARRAY, [SHIFT, 61])
 876-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_VARIABLE])
 877-  .add(Symbol.NUMBER_UPPER, [SHIFT, State.FOLLOW_NUMBER_UPPER])
 878-  .add(Symbol.POUND, [SHIFT, State.FOLLOW_POUND])
 879+  .add(Symbol.VARIABLE, [SHIFT, State.Variable])
 880+  .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
 881+  .add(Symbol.POUND, [SHIFT, State.Pound])
 882   .build();
 883-table[State.FOLLOW_ERROR_ERROR] = ObjectBuilder
 884+table[State.Error_Error] = ObjectBuilder
 885   .add(Symbol.EOF, [REDUCE, ReduceActions.ERROR_AND_CONTINUE_WITH_OTHER_ERRORS])
 886   .add(Symbol.AMPERSAND, [REDUCE, ReduceActions.ERROR_AND_CONTINUE_WITH_OTHER_ERRORS])
 887   .add(Symbol.EQUALS, [REDUCE, ReduceActions.ERROR_AND_CONTINUE_WITH_OTHER_ERRORS])
 888@@ -940,10 +953,10 @@ table[40] = ObjectBuilder
 889 table[41] = ObjectBuilder
 890   .add(Symbol.CELL_UPPER, [SHIFT, 65])
 891   .build();
 892-table[State.FOLLOW_POUND_VARIABLE] = ObjectBuilder
 893+table[State.Pound_Variable] = ObjectBuilder
 894   .add(Symbol.EXCLAMATION_POINT, [SHIFT, 66])
 895   .build();
 896-table[State.NUMBER_AMPERSAND_EXPRESSION] = ObjectBuilder
 897+table[State.Number_Ampersand_Expression] = ObjectBuilder
 898   .add(Symbol.EOF, [REDUCE, ReduceActions.AMPERSAND])
 899   .add(Symbol.AMPERSAND, [REDUCE, ReduceActions.AMPERSAND])
 900   .add(Symbol.EQUALS, [REDUCE, ReduceActions.AMPERSAND])
 901@@ -958,145 +971,145 @@ table[State.NUMBER_AMPERSAND_EXPRESSION] = ObjectBuilder
 902   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.AMPERSAND])
 903   .add(Symbol.COMMA, [REDUCE, ReduceActions.AMPERSAND])
 904   .build();
 905-table[State.START_EQUALS_EXPRESSION] = ObjectBuilder
 906+table[State.Start_Equals_Expression] = ObjectBuilder
 907   .add(Symbol.EOF, [REDUCE, ReduceActions.EQUALS])
 908-  .add(Symbol.AMPERSAND, [SHIFT, State.NUMBER_FOLLOWED_BY_AMPERSAND])
 909+  .add(Symbol.AMPERSAND, [SHIFT, State.Number_Ampersand])
 910   .add(Symbol.EQUALS, [REDUCE, ReduceActions.EQUALS])
 911-  .add(Symbol.PLUS, [SHIFT, State.NUMBER_FOLLOWED_BY_PLUS])
 912+  .add(Symbol.PLUS, [SHIFT, State.Number_Plus])
 913   .add(Symbol.RIGHT_PAREN, [REDUCE, ReduceActions.EQUALS])
 914-  .add(Symbol.LESS_THAN, [SHIFT, State.LESS_THAN])
 915-  .add(Symbol.GREATER_THAN, [SHIFT, State.GREATER_THAN])
 916-  .add(Symbol.MINUS, [SHIFT, State.NUMBER_FOLLOWED_BY_MINUS])
 917-  .add(Symbol.ASTERISK, [SHIFT, State.NUMBER_FOLLOWED_BY_ASTERISK])
 918-  .add(Symbol.DIVIDE, [SHIFT, State.NUMBER_FOLLOWED_BY_SLASH])
 919-  .add(Symbol.CARROT, [SHIFT, State.NUMBER_FOLLOWED_BY_CARROT])
 920+  .add(Symbol.LESS_THAN, [SHIFT, State.LessThan])
 921+  .add(Symbol.GREATER_THAN, [SHIFT, State.GreaterThan])
 922+  .add(Symbol.MINUS, [SHIFT, State.Number_Minus])
 923+  .add(Symbol.ASTERISK, [SHIFT, State.Number_Asterisk])
 924+  .add(Symbol.DIVIDE, [SHIFT, State.Number_Divide])
 925+  .add(Symbol.CARROT, [SHIFT, State.Number_Carrot])
 926   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.EQUALS])
 927   .add(Symbol.COMMA, [REDUCE, ReduceActions.EQUALS])
 928   .build();
 929-table[State.ADD_TWO_NUMBERS] = ObjectBuilder
 930+table[State.AddTwoNumbers] = ObjectBuilder
 931   .add(Symbol.EOF, [REDUCE, ReduceActions.PLUS])
 932-  .add(Symbol.AMPERSAND, [SHIFT, State.NUMBER_FOLLOWED_BY_AMPERSAND])
 933+  .add(Symbol.AMPERSAND, [SHIFT, State.Number_Ampersand])
 934   .add(Symbol.EQUALS, [REDUCE, ReduceActions.PLUS])
 935   .add(Symbol.PLUS, [REDUCE, ReduceActions.PLUS])
 936   .add(Symbol.RIGHT_PAREN, [REDUCE, ReduceActions.PLUS])
 937   .add(Symbol.LESS_THAN, [REDUCE, ReduceActions.PLUS])
 938   .add(Symbol.GREATER_THAN, [REDUCE, ReduceActions.PLUS])
 939   .add(Symbol.MINUS, [REDUCE, ReduceActions.PLUS])
 940-  .add(Symbol.ASTERISK, [SHIFT, State.NUMBER_FOLLOWED_BY_ASTERISK])
 941-  .add(Symbol.DIVIDE, [SHIFT, State.NUMBER_FOLLOWED_BY_SLASH])
 942-  .add(Symbol.CARROT, [SHIFT, State.NUMBER_FOLLOWED_BY_CARROT])
 943+  .add(Symbol.ASTERISK, [SHIFT, State.Number_Asterisk])
 944+  .add(Symbol.DIVIDE, [SHIFT, State.Number_Divide])
 945+  .add(Symbol.CARROT, [SHIFT, State.Number_Carrot])
 946   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.PLUS])
 947   .add(Symbol.COMMA, [REDUCE, ReduceActions.PLUS])
 948   .build();
 949-table[State.LESS_THAN_EQUALS] = ObjectBuilder
 950-  .add(Symbol.ERROR, State.ERROR)
 951+table[State.LessThan_Equals] = ObjectBuilder
 952+  .add(Symbol.ERROR, State.Error)
 953   .add(Symbol.EXPRESSION, 67)
 954-  .add(Symbol.VARIABLE_SEQUENCE, State.FOLLOW_VARIABLE_SEQUENCE)
 955-  .add(Symbol.NUMBER, State.START_NUMBER)
 956-  .add(Symbol.STRING, [SHIFT, State.START_STRING])
 957-  .add(Symbol.PLUS, [SHIFT, State.PREFIX_UNARY_PLUS])
 958-  .add(Symbol.LEFT_PAREN, [SHIFT, State.LEFT_PAREN])
 959-  .add(Symbol.MINUS, [SHIFT, State.PREFIX_UNARY_MINUS])
 960-  .add(Symbol.FUNCTION, [SHIFT, State.FUNCTION])
 961-  .add(Symbol.CELL, State.FOLLOWS_CELL)
 962-  .add(Symbol.FIXEDCELL, [SHIFT, State.FIXED_CELL])
 963-  .add(Symbol.CELL_UPPER, [SHIFT, State.FOLLOW_CELL_UPPER])
 964-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_VARIABLE])
 965-  .add(Symbol.NUMBER_UPPER, [SHIFT, State.FOLLOW_NUMBER_UPPER])
 966-  .add(Symbol.POUND, [SHIFT, State.FOLLOW_POUND])
 967-  .build();
 968-table[State.LESSTHAN_GREATERTHAN] = ObjectBuilder
 969-  .add(Symbol.ERROR, State.ERROR)
 970+  .add(Symbol.VARIABLE_SEQUENCE, State.VariableSeq)
 971+  .add(Symbol.NUMBER, State.Start_Number)
 972+  .add(Symbol.STRING, [SHIFT, State.Start_String])
 973+  .add(Symbol.PLUS, [SHIFT, State.PrefixUnaryPlus])
 974+  .add(Symbol.LEFT_PAREN, [SHIFT, State.LeftParen])
 975+  .add(Symbol.MINUS, [SHIFT, State.PrefixUnaryMinus])
 976+  .add(Symbol.FUNCTION, [SHIFT, State.Function])
 977+  .add(Symbol.CELL, State.Cell)
 978+  .add(Symbol.FIXEDCELL, [SHIFT, State.FixedCell])
 979+  .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
 980+  .add(Symbol.VARIABLE, [SHIFT, State.Variable])
 981+  .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
 982+  .add(Symbol.POUND, [SHIFT, State.Pound])
 983+  .build();
 984+table[State.LessThan_GreaterThan] = ObjectBuilder
 985+  .add(Symbol.ERROR, State.Error)
 986   .add(Symbol.EXPRESSION, 68)
 987-  .add(Symbol.VARIABLE_SEQUENCE, State.FOLLOW_VARIABLE_SEQUENCE)
 988-  .add(Symbol.NUMBER, State.START_NUMBER)
 989-  .add(Symbol.STRING, [SHIFT, State.START_STRING])
 990-  .add(Symbol.PLUS, [SHIFT, State.PREFIX_UNARY_PLUS])
 991-  .add(Symbol.LEFT_PAREN, [SHIFT, State.LEFT_PAREN])
 992-  .add(Symbol.MINUS, [SHIFT, State.PREFIX_UNARY_MINUS])
 993-  .add(Symbol.FUNCTION, [SHIFT, State.FUNCTION])
 994-  .add(Symbol.CELL, State.FOLLOWS_CELL)
 995-  .add(Symbol.FIXEDCELL, [SHIFT, State.FIXED_CELL])
 996-  .add(Symbol.CELL_UPPER, [SHIFT, State.FOLLOW_CELL_UPPER])
 997-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_VARIABLE])
 998-  .add(Symbol.NUMBER_UPPER, [SHIFT, State.FOLLOW_NUMBER_UPPER])
 999-  .add(Symbol.POUND, [SHIFT, State.FOLLOW_POUND])
1000-  .build();
1001-table[State.LESSTHAN_EXPRESSION] = ObjectBuilder
1002+  .add(Symbol.VARIABLE_SEQUENCE, State.VariableSeq)
1003+  .add(Symbol.NUMBER, State.Start_Number)
1004+  .add(Symbol.STRING, [SHIFT, State.Start_String])
1005+  .add(Symbol.PLUS, [SHIFT, State.PrefixUnaryPlus])
1006+  .add(Symbol.LEFT_PAREN, [SHIFT, State.LeftParen])
1007+  .add(Symbol.MINUS, [SHIFT, State.PrefixUnaryMinus])
1008+  .add(Symbol.FUNCTION, [SHIFT, State.Function])
1009+  .add(Symbol.CELL, State.Cell)
1010+  .add(Symbol.FIXEDCELL, [SHIFT, State.FixedCell])
1011+  .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
1012+  .add(Symbol.VARIABLE, [SHIFT, State.Variable])
1013+  .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
1014+  .add(Symbol.POUND, [SHIFT, State.Pound])
1015+  .build();
1016+table[State.LessThan_Expression] = ObjectBuilder
1017   .add(Symbol.EOF, [REDUCE, ReduceActions.LT])
1018-  .add(Symbol.AMPERSAND, [SHIFT, State.NUMBER_FOLLOWED_BY_AMPERSAND])
1019+  .add(Symbol.AMPERSAND, [SHIFT, State.Number_Ampersand])
1020   .add(Symbol.EQUALS, [REDUCE, ReduceActions.LT])
1021-  .add(Symbol.PLUS, [SHIFT, State.NUMBER_FOLLOWED_BY_PLUS])
1022+  .add(Symbol.PLUS, [SHIFT, State.Number_Plus])
1023   .add(Symbol.RIGHT_PAREN, [REDUCE, ReduceActions.LT])
1024   .add(Symbol.LESS_THAN, [REDUCE, ReduceActions.LT])
1025   .add(Symbol.GREATER_THAN, [REDUCE, ReduceActions.LT])
1026-  .add(Symbol.MINUS, [SHIFT, State.NUMBER_FOLLOWED_BY_MINUS])
1027-  .add(Symbol.ASTERISK, [SHIFT, State.NUMBER_FOLLOWED_BY_ASTERISK])
1028-  .add(Symbol.DIVIDE, [SHIFT, State.NUMBER_FOLLOWED_BY_SLASH])
1029-  .add(Symbol.CARROT, [SHIFT, State.NUMBER_FOLLOWED_BY_CARROT])
1030+  .add(Symbol.MINUS, [SHIFT, State.Number_Minus])
1031+  .add(Symbol.ASTERISK, [SHIFT, State.Number_Asterisk])
1032+  .add(Symbol.DIVIDE, [SHIFT, State.Number_Divide])
1033+  .add(Symbol.CARROT, [SHIFT, State.Number_Carrot])
1034   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.LT])
1035   .add(Symbol.COMMA, [REDUCE, ReduceActions.LT])
1036   .build();
1037-table[State.GREATER_THAN_EQUALS] = ObjectBuilder
1038-  .add(Symbol.ERROR, State.ERROR)
1039-  .add(Symbol.EXPRESSION, State.COMPARE_TWO_EXPRESSIONS_WITH_GTE)
1040-  .add(Symbol.VARIABLE_SEQUENCE, State.FOLLOW_VARIABLE_SEQUENCE)
1041-  .add(Symbol.NUMBER, State.START_NUMBER)
1042-  .add(Symbol.STRING, [SHIFT, State.START_STRING])
1043-  .add(Symbol.PLUS, [SHIFT, State.PREFIX_UNARY_PLUS])
1044-  .add(Symbol.LEFT_PAREN, [SHIFT, State.LEFT_PAREN])
1045-  .add(Symbol.MINUS, [SHIFT, State.PREFIX_UNARY_MINUS])
1046-  .add(Symbol.FUNCTION, [SHIFT, State.FUNCTION])
1047-  .add(Symbol.CELL, State.FOLLOWS_CELL)
1048-  .add(Symbol.FIXEDCELL, [SHIFT, State.FIXED_CELL])
1049-  .add(Symbol.CELL_UPPER, [SHIFT, State.FOLLOW_CELL_UPPER])
1050-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_VARIABLE])
1051-  .add(Symbol.NUMBER_UPPER, [SHIFT, State.FOLLOW_NUMBER_UPPER])
1052-  .add(Symbol.POUND, [SHIFT, State.FOLLOW_POUND])
1053-  .build();
1054-table[State.GREATERTHAN_EXPRESSION] = ObjectBuilder
1055+table[State.GreaterThan_Equals] = ObjectBuilder
1056+  .add(Symbol.ERROR, State.Error)
1057+  .add(Symbol.EXPRESSION, State.GTETwoExpressions)
1058+  .add(Symbol.VARIABLE_SEQUENCE, State.VariableSeq)
1059+  .add(Symbol.NUMBER, State.Start_Number)
1060+  .add(Symbol.STRING, [SHIFT, State.Start_String])
1061+  .add(Symbol.PLUS, [SHIFT, State.PrefixUnaryPlus])
1062+  .add(Symbol.LEFT_PAREN, [SHIFT, State.LeftParen])
1063+  .add(Symbol.MINUS, [SHIFT, State.PrefixUnaryMinus])
1064+  .add(Symbol.FUNCTION, [SHIFT, State.Function])
1065+  .add(Symbol.CELL, State.Cell)
1066+  .add(Symbol.FIXEDCELL, [SHIFT, State.FixedCell])
1067+  .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
1068+  .add(Symbol.VARIABLE, [SHIFT, State.Variable])
1069+  .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
1070+  .add(Symbol.POUND, [SHIFT, State.Pound])
1071+  .build();
1072+table[State.GreaterThan_Expression] = ObjectBuilder
1073   .add(Symbol.EOF, [REDUCE, ReduceActions.GT])
1074-  .add(Symbol.AMPERSAND, [SHIFT, State.NUMBER_FOLLOWED_BY_AMPERSAND])
1075+  .add(Symbol.AMPERSAND, [SHIFT, State.Number_Ampersand])
1076   .add(Symbol.EQUALS, [REDUCE, ReduceActions.GT])
1077-  .add(Symbol.PLUS, [SHIFT, State.NUMBER_FOLLOWED_BY_PLUS])
1078+  .add(Symbol.PLUS, [SHIFT, State.Number_Plus])
1079   .add(Symbol.RIGHT_PAREN, [REDUCE, ReduceActions.GT])
1080   .add(Symbol.LESS_THAN, [REDUCE, ReduceActions.GT])
1081   .add(Symbol.GREATER_THAN, [REDUCE, ReduceActions.GT])
1082-  .add(Symbol.MINUS, [SHIFT, State.NUMBER_FOLLOWED_BY_MINUS])
1083-  .add(Symbol.ASTERISK, [SHIFT, State.NUMBER_FOLLOWED_BY_ASTERISK])
1084-  .add(Symbol.DIVIDE, [SHIFT, State.NUMBER_FOLLOWED_BY_SLASH])
1085-  .add(Symbol.CARROT, [SHIFT, State.NUMBER_FOLLOWED_BY_CARROT])
1086+  .add(Symbol.MINUS, [SHIFT, State.Number_Minus])
1087+  .add(Symbol.ASTERISK, [SHIFT, State.Number_Asterisk])
1088+  .add(Symbol.DIVIDE, [SHIFT, State.Number_Divide])
1089+  .add(Symbol.CARROT, [SHIFT, State.Number_Carrot])
1090   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.GT])
1091   .add(Symbol.COMMA, [REDUCE, ReduceActions.GT])
1092   .build();
1093 table[51] = ObjectBuilder
1094-  .add(Symbol.AMPERSAND, [SHIFT, State.NUMBER_FOLLOWED_BY_AMPERSAND])
1095+  .add(Symbol.AMPERSAND, [SHIFT, State.Number_Ampersand])
1096   .add(Symbol.PLUS, [SHIFT, 22])
1097   .add(Symbol.LESS_THAN, [SHIFT, 23])
1098   .add(Symbol.GREATER_THAN, [SHIFT, 24])
1099-  .add(Symbol.MINUS, [SHIFT, State.NUMBER_FOLLOWED_BY_MINUS])
1100-  .add(Symbol.ASTERISK, [SHIFT, State.NUMBER_FOLLOWED_BY_ASTERISK])
1101+  .add(Symbol.MINUS, [SHIFT, State.Number_Minus])
1102+  .add(Symbol.ASTERISK, [SHIFT, State.Number_Asterisk])
1103   .add(Symbol.DIVIDE, [SHIFT, 28])
1104   .add(Symbol.CARROT, [SHIFT, 29])
1105   .build();
1106-table[State.SUBTRACT_TWO_NUMBERS] = ObjectBuilder
1107+table[State.SubtractTwoNumbers] = ObjectBuilder
1108   .add(Symbol.EOF, [REDUCE, ReduceActions.MINUS])
1109-  .add(Symbol.AMPERSAND, [SHIFT, State.NUMBER_FOLLOWED_BY_AMPERSAND])
1110+  .add(Symbol.AMPERSAND, [SHIFT, State.Number_Ampersand])
1111   .add(Symbol.EQUALS, [REDUCE, ReduceActions.MINUS])
1112   .add(Symbol.PLUS, [REDUCE, ReduceActions.MINUS])
1113   .add(Symbol.RIGHT_PAREN, [REDUCE, ReduceActions.MINUS])
1114   .add(Symbol.LESS_THAN, [REDUCE, ReduceActions.MINUS])
1115   .add(Symbol.GREATER_THAN, [REDUCE, ReduceActions.MINUS])
1116   .add(Symbol.MINUS, [REDUCE, ReduceActions.MINUS])
1117-  .add(Symbol.ASTERISK, [SHIFT, State.NUMBER_FOLLOWED_BY_ASTERISK])
1118+  .add(Symbol.ASTERISK, [SHIFT, State.Number_Asterisk])
1119   .add(Symbol.DIVIDE, [SHIFT, 28])
1120   .add(Symbol.CARROT, [SHIFT, 29])
1121   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.MINUS])
1122   .add(Symbol.COMMA, [REDUCE, ReduceActions.MINUS])
1123   .build();
1124-table[State.MULTIPLY_TWO_NUMBERS] = ObjectBuilder
1125+table[State.MultiplyTwoNumbers] = ObjectBuilder
1126   .add(Symbol.EOF, [REDUCE, ReduceActions.MULTIPLY])
1127-  .add(Symbol.AMPERSAND, [SHIFT, ReduceActions.TO_POWER])// ??? questionable use of shift. should it be reduce?
1128+  .add(Symbol.AMPERSAND, [SHIFT, 20])
1129   .add(Symbol.EQUALS, [REDUCE, ReduceActions.MULTIPLY])
1130   .add(Symbol.PLUS, [REDUCE, ReduceActions.MULTIPLY])
1131   .add(Symbol.RIGHT_PAREN, [REDUCE, ReduceActions.MULTIPLY])
1132@@ -1105,13 +1118,13 @@ table[State.MULTIPLY_TWO_NUMBERS] = ObjectBuilder
1133   .add(Symbol.MINUS, [REDUCE, ReduceActions.MULTIPLY])
1134   .add(Symbol.ASTERISK, [REDUCE, ReduceActions.MULTIPLY])
1135   .add(Symbol.DIVIDE, [REDUCE, ReduceActions.MULTIPLY])
1136-  .add(Symbol.CARROT, [SHIFT, ReduceActions.FIXED_CELL_RANGE_VAL])
1137+  .add(Symbol.CARROT, [SHIFT, 29])
1138   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.MULTIPLY])
1139   .add(Symbol.COMMA, [REDUCE, ReduceActions.MULTIPLY])
1140   .build();
1141-table[State.DIVIDE_TWO_NUMBERS] = ObjectBuilder
1142+table[State.DivideTwoNumbers] = ObjectBuilder
1143   .add(Symbol.EOF, [REDUCE, ReduceActions.DIVIDE])
1144-  .add(Symbol.AMPERSAND, [SHIFT, ReduceActions.TO_POWER]) // ???same
1145+  .add(Symbol.AMPERSAND, [SHIFT, 20]) // ???same
1146   .add(Symbol.EQUALS, [REDUCE, ReduceActions.DIVIDE])
1147   .add(Symbol.PLUS, [REDUCE, ReduceActions.DIVIDE])
1148   .add(Symbol.RIGHT_PAREN, [REDUCE, ReduceActions.DIVIDE])
1149@@ -1120,13 +1133,13 @@ table[State.DIVIDE_TWO_NUMBERS] = ObjectBuilder
1150   .add(Symbol.MINUS, [REDUCE, ReduceActions.DIVIDE])
1151   .add(Symbol.ASTERISK, [REDUCE, ReduceActions.DIVIDE])
1152   .add(Symbol.DIVIDE, [REDUCE, ReduceActions.DIVIDE])
1153-  .add(Symbol.CARROT, [SHIFT, ReduceActions.FIXED_CELL_RANGE_VAL])
1154+  .add(Symbol.CARROT, [SHIFT, 29])
1155   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.DIVIDE])
1156   .add(Symbol.COMMA, [REDUCE, ReduceActions.DIVIDE])
1157   .build();
1158-table[State.NUMBER_TO_POWER_OF_OTHER] = ObjectBuilder
1159+table[State.PowerTwoNumbers] = ObjectBuilder
1160   .add(Symbol.EOF, [REDUCE, ReduceActions.TO_POWER])
1161-  .add(Symbol.AMPERSAND, [SHIFT, ReduceActions.TO_POWER]) // ???same
1162+  .add(Symbol.AMPERSAND, [SHIFT, 20])
1163   .add(Symbol.EQUALS, [REDUCE, ReduceActions.TO_POWER])
1164   .add(Symbol.PLUS, [REDUCE, ReduceActions.TO_POWER])
1165   .add(Symbol.RIGHT_PAREN, [REDUCE, ReduceActions.TO_POWER])
1166@@ -1139,7 +1152,7 @@ table[State.NUMBER_TO_POWER_OF_OTHER] = ObjectBuilder
1167   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.TO_POWER])
1168   .add(Symbol.COMMA, [REDUCE, ReduceActions.TO_POWER])
1169   .build();
1170-table[56] = ObjectBuilder
1171+table[State.VariableSeq_Decimal_Variable] = ObjectBuilder
1172   .add(Symbol.EOF, [REDUCE, ReduceActions.ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH])
1173   .add(Symbol.AMPERSAND, [REDUCE, ReduceActions.ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH])
1174   .add(Symbol.EQUALS, [REDUCE, ReduceActions.ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH])
1175@@ -1187,20 +1200,20 @@ table[58] = ObjectBuilder
1176   .build();
1177 table[59] = ObjectBuilder
1178   .add(Symbol.RIGHT_PAREN, [SHIFT, State.CLOSE_PAREN_ON_FUNCTION])
1179-  .add(Symbol.SEMI_COLON, [SHIFT, State.VARIABLE_FOLLOWED_BY_SEMI_COLON])
1180-  .add(Symbol.COMMA, [SHIFT, State.VARIABLE_FOLLOWED_BY_COMMA])
1181+  .add(Symbol.SEMI_COLON, [SHIFT, State.Variable_SemiColon])
1182+  .add(Symbol.COMMA, [SHIFT, State.Variable_Comma])
1183   .build();
1184-table[State.FUNCTION_LEFTPAREN_EXPRESSION] = ObjectBuilder
1185-  .add(Symbol.AMPERSAND, [SHIFT, State.NUMBER_FOLLOWED_BY_AMPERSAND])
1186-  .add(Symbol.EQUALS, [SHIFT, State.START_EQUALS])
1187-  .add(Symbol.PLUS, [SHIFT, State.NUMBER_FOLLOWED_BY_PLUS])
1188+table[State.Function_LeftParen_Expression] = ObjectBuilder
1189+  .add(Symbol.AMPERSAND, [SHIFT, State.Number_Ampersand])
1190+  .add(Symbol.EQUALS, [SHIFT, State.Start_Equals])
1191+  .add(Symbol.PLUS, [SHIFT, State.Number_Plus])
1192   .add(Symbol.RIGHT_PAREN, [REDUCE, ReduceActions.ENSURE_IS_ARRAY])
1193-  .add(Symbol.LESS_THAN, [SHIFT, State.LESS_THAN])
1194-  .add(Symbol.GREATER_THAN, [SHIFT, State.GREATER_THAN])
1195-  .add(Symbol.MINUS, [SHIFT, State.NUMBER_FOLLOWED_BY_MINUS])
1196-  .add(Symbol.ASTERISK, [SHIFT, State.NUMBER_FOLLOWED_BY_ASTERISK])
1197-  .add(Symbol.DIVIDE, [SHIFT, State.NUMBER_FOLLOWED_BY_SLASH])
1198-  .add(Symbol.CARROT, [SHIFT, State.NUMBER_FOLLOWED_BY_CARROT])
1199+  .add(Symbol.LESS_THAN, [SHIFT, State.LessThan])
1200+  .add(Symbol.GREATER_THAN, [SHIFT, State.GreaterThan])
1201+  .add(Symbol.MINUS, [SHIFT, State.Number_Minus])
1202+  .add(Symbol.ASTERISK, [SHIFT, State.Number_Asterisk])
1203+  .add(Symbol.DIVIDE, [SHIFT, State.Number_Divide])
1204+  .add(Symbol.CARROT, [SHIFT, State.Number_Carrot])
1205   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.ENSURE_IS_ARRAY])
1206   .add(Symbol.COMMA, [REDUCE, ReduceActions.ENSURE_IS_ARRAY])
1207   .build();
1208@@ -1274,44 +1287,44 @@ table[66] = ObjectBuilder
1209   .add(Symbol.POUND, [REDUCE, ReduceActions.REDUCE_LAST_THREE_A]).build();
1210 table[67] = ObjectBuilder
1211   .add(Symbol.EOF, [REDUCE, ReduceActions.LTE])
1212-  .add(Symbol.AMPERSAND, [SHIFT, State.NUMBER_FOLLOWED_BY_AMPERSAND])
1213+  .add(Symbol.AMPERSAND, [SHIFT, State.Number_Ampersand])
1214   .add(Symbol.EQUALS, [REDUCE, ReduceActions.LTE])
1215-  .add(Symbol.PLUS, [SHIFT, State.NUMBER_FOLLOWED_BY_PLUS])
1216+  .add(Symbol.PLUS, [SHIFT, State.Number_Plus])
1217   .add(Symbol.RIGHT_PAREN, [REDUCE, ReduceActions.LTE])
1218   .add(Symbol.LESS_THAN, [REDUCE, ReduceActions.LTE])
1219   .add(Symbol.GREATER_THAN, [REDUCE, ReduceActions.LTE])
1220-  .add(Symbol.MINUS, [SHIFT, State.NUMBER_FOLLOWED_BY_MINUS])
1221-  .add(Symbol.ASTERISK, [SHIFT, State.NUMBER_FOLLOWED_BY_ASTERISK])
1222-  .add(Symbol.DIVIDE, [SHIFT, State.NUMBER_FOLLOWED_BY_SLASH])
1223-  .add(Symbol.CARROT, [SHIFT, State.NUMBER_FOLLOWED_BY_CARROT])
1224+  .add(Symbol.MINUS, [SHIFT, State.Number_Minus])
1225+  .add(Symbol.ASTERISK, [SHIFT, State.Number_Asterisk])
1226+  .add(Symbol.DIVIDE, [SHIFT, State.Number_Divide])
1227+  .add(Symbol.CARROT, [SHIFT, State.Number_Carrot])
1228   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.LTE])
1229   .add(Symbol.COMMA, [REDUCE, ReduceActions.LTE]).build();
1230 table[68] = ObjectBuilder
1231   .add(Symbol.EOF, [REDUCE, ReduceActions.NOT_EQ])
1232-  .add(Symbol.AMPERSAND, [SHIFT, State.NUMBER_FOLLOWED_BY_AMPERSAND])
1233+  .add(Symbol.AMPERSAND, [SHIFT, State.Number_Ampersand])
1234   .add(Symbol.EQUALS, [REDUCE, ReduceActions.NOT_EQ])
1235-  .add(Symbol.PLUS, [SHIFT, State.NUMBER_FOLLOWED_BY_PLUS])
1236+  .add(Symbol.PLUS, [SHIFT, State.Number_Plus])
1237   .add(Symbol.RIGHT_PAREN, [REDUCE, ReduceActions.NOT_EQ])
1238   .add(Symbol.LESS_THAN, [REDUCE, ReduceActions.NOT_EQ])
1239   .add(Symbol.GREATER_THAN, [REDUCE, ReduceActions.NOT_EQ])
1240-  .add(Symbol.MINUS, [SHIFT, State.NUMBER_FOLLOWED_BY_MINUS])
1241-  .add(Symbol.ASTERISK, [SHIFT, State.NUMBER_FOLLOWED_BY_ASTERISK])
1242-  .add(Symbol.DIVIDE, [SHIFT, State.NUMBER_FOLLOWED_BY_SLASH])
1243-  .add(Symbol.CARROT, [SHIFT, State.NUMBER_FOLLOWED_BY_CARROT])
1244+  .add(Symbol.MINUS, [SHIFT, State.Number_Minus])
1245+  .add(Symbol.ASTERISK, [SHIFT, State.Number_Asterisk])
1246+  .add(Symbol.DIVIDE, [SHIFT, State.Number_Divide])
1247+  .add(Symbol.CARROT, [SHIFT, State.Number_Carrot])
1248   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.NOT_EQ])
1249   .add(Symbol.COMMA, [REDUCE, ReduceActions.NOT_EQ]).build();
1250-table[State.COMPARE_TWO_EXPRESSIONS_WITH_GTE] = ObjectBuilder
1251+table[State.GTETwoExpressions] = ObjectBuilder
1252   .add(Symbol.EOF, [REDUCE, ReduceActions.GTE])
1253-  .add(Symbol.AMPERSAND, [SHIFT, State.NUMBER_FOLLOWED_BY_AMPERSAND])
1254+  .add(Symbol.AMPERSAND, [SHIFT, State.Number_Ampersand])
1255   .add(Symbol.EQUALS, [REDUCE, ReduceActions.GTE])
1256-  .add(Symbol.PLUS, [SHIFT, State.NUMBER_FOLLOWED_BY_PLUS])
1257+  .add(Symbol.PLUS, [SHIFT, State.Number_Plus])
1258   .add(Symbol.RIGHT_PAREN, [REDUCE, ReduceActions.GTE])
1259   .add(Symbol.LESS_THAN, [REDUCE, ReduceActions.GTE])
1260   .add(Symbol.GREATER_THAN, [REDUCE, ReduceActions.GTE])
1261-  .add(Symbol.MINUS, [SHIFT, State.NUMBER_FOLLOWED_BY_MINUS])
1262-  .add(Symbol.ASTERISK, [SHIFT, State.NUMBER_FOLLOWED_BY_ASTERISK])
1263-  .add(Symbol.DIVIDE, [SHIFT, State.NUMBER_FOLLOWED_BY_SLASH])
1264-  .add(Symbol.CARROT, [SHIFT, State.NUMBER_FOLLOWED_BY_CARROT])
1265+  .add(Symbol.MINUS, [SHIFT, State.Number_Minus])
1266+  .add(Symbol.ASTERISK, [SHIFT, State.Number_Asterisk])
1267+  .add(Symbol.DIVIDE, [SHIFT, State.Number_Divide])
1268+  .add(Symbol.CARROT, [SHIFT, State.Number_Carrot])
1269   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.GTE])
1270   .add(Symbol.COMMA, [REDUCE, ReduceActions.GTE])
1271   .build();
1272@@ -1330,42 +1343,42 @@ table[State.CLOSE_PAREN_ON_FUNCTION] = ObjectBuilder
1273   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.CALL_FUNCTION_LAST_TWO_IN_STACK])
1274   .add(Symbol.COMMA, [REDUCE, ReduceActions.CALL_FUNCTION_LAST_TWO_IN_STACK])
1275   .build();
1276-table[State.VARIABLE_FOLLOWED_BY_SEMI_COLON] = ObjectBuilder
1277-  .add(Symbol.ERROR, State.ERROR)
1278+table[State.Variable_SemiColon] = ObjectBuilder
1279+  .add(Symbol.ERROR, State.Error)
1280   .add(Symbol.EXPRESSION, 74)
1281-  .add(Symbol.VARIABLE_SEQUENCE, State.FOLLOW_VARIABLE_SEQUENCE)
1282-  .add(Symbol.NUMBER, State.START_NUMBER)
1283-  .add(Symbol.STRING, [SHIFT, State.START_STRING])
1284-  .add(Symbol.EQUALS, [SHIFT, State.START_EQUALS])
1285-  .add(Symbol.PLUS, [SHIFT, State.PREFIX_UNARY_PLUS])
1286-  .add(Symbol.LEFT_PAREN, [SHIFT, State.LEFT_PAREN])
1287-  .add(Symbol.MINUS, [SHIFT, State.PREFIX_UNARY_MINUS])
1288-  .add(Symbol.FUNCTION, [SHIFT, State.FUNCTION])
1289-  .add(Symbol.CELL, State.FOLLOWS_CELL)
1290-  .add(Symbol.FIXEDCELL, [SHIFT, State.FIXED_CELL])
1291-  .add(Symbol.CELL_UPPER, [SHIFT, State.FOLLOW_CELL_UPPER])
1292-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_VARIABLE])
1293-  .add(Symbol.NUMBER_UPPER, [SHIFT, State.FOLLOW_NUMBER_UPPER])
1294-  .add(Symbol.POUND, [SHIFT, State.FOLLOW_POUND])
1295-  .build();
1296-table[State.VARIABLE_FOLLOWED_BY_COMMA] = ObjectBuilder
1297-  .add(Symbol.ERROR, State.ERROR)
1298+  .add(Symbol.VARIABLE_SEQUENCE, State.VariableSeq)
1299+  .add(Symbol.NUMBER, State.Start_Number)
1300+  .add(Symbol.STRING, [SHIFT, State.Start_String])
1301+  .add(Symbol.EQUALS, [SHIFT, State.Start_Equals])
1302+  .add(Symbol.PLUS, [SHIFT, State.PrefixUnaryPlus])
1303+  .add(Symbol.LEFT_PAREN, [SHIFT, State.LeftParen])
1304+  .add(Symbol.MINUS, [SHIFT, State.PrefixUnaryMinus])
1305+  .add(Symbol.FUNCTION, [SHIFT, State.Function])
1306+  .add(Symbol.CELL, State.Cell)
1307+  .add(Symbol.FIXEDCELL, [SHIFT, State.FixedCell])
1308+  .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
1309+  .add(Symbol.VARIABLE, [SHIFT, State.Variable])
1310+  .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
1311+  .add(Symbol.POUND, [SHIFT, State.Pound])
1312+  .build();
1313+table[State.Variable_Comma] = ObjectBuilder
1314+  .add(Symbol.ERROR, State.Error)
1315   .add(Symbol.EXPRESSION, 75)
1316-  .add(Symbol.VARIABLE_SEQUENCE, State.FOLLOW_VARIABLE_SEQUENCE)
1317-  .add(Symbol.NUMBER, State.START_NUMBER)
1318-  .add(Symbol.STRING, [SHIFT, State.START_STRING])
1319-  .add(Symbol.EQUALS, [SHIFT, State.START_EQUALS])
1320-  .add(Symbol.PLUS, [SHIFT, State.PREFIX_UNARY_PLUS])
1321-  .add(Symbol.LEFT_PAREN, [SHIFT, State.LEFT_PAREN])
1322-  .add(Symbol.MINUS, [SHIFT, State.PREFIX_UNARY_MINUS])
1323-  .add(Symbol.FUNCTION, [SHIFT, State.FUNCTION])
1324-  .add(Symbol.CELL, State.FOLLOWS_CELL)
1325-  .add(Symbol.FIXEDCELL, [SHIFT, State.FIXED_CELL])
1326-  .add(Symbol.CELL_UPPER, [SHIFT, State.FOLLOW_CELL_UPPER])
1327-  .add(Symbol.VARIABLE, [SHIFT, State.FOLLOW_VARIABLE])
1328-  .add(Symbol.NUMBER_UPPER, [SHIFT, State.FOLLOW_NUMBER_UPPER])
1329+  .add(Symbol.VARIABLE_SEQUENCE, State.VariableSeq)
1330+  .add(Symbol.NUMBER, State.Start_Number)
1331+  .add(Symbol.STRING, [SHIFT, State.Start_String])
1332+  .add(Symbol.EQUALS, [SHIFT, State.Start_Equals])
1333+  .add(Symbol.PLUS, [SHIFT, State.PrefixUnaryPlus])
1334+  .add(Symbol.LEFT_PAREN, [SHIFT, State.LeftParen])
1335+  .add(Symbol.MINUS, [SHIFT, State.PrefixUnaryMinus])
1336+  .add(Symbol.FUNCTION, [SHIFT, State.Function])
1337+  .add(Symbol.CELL, State.Cell)
1338+  .add(Symbol.FIXEDCELL, [SHIFT, State.FixedCell])
1339+  .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
1340+  .add(Symbol.VARIABLE, [SHIFT, State.Variable])
1341+  .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
1342   .add(Symbol.ARRAY, [SHIFT, 61])
1343-  .add(Symbol.POUND, [SHIFT, State.FOLLOW_POUND])
1344+  .add(Symbol.POUND, [SHIFT, State.Pound])
1345   .build();
1346 table[73] = ObjectBuilder
1347   .add(Symbol.EOF, [REDUCE, ReduceActions.REDUCE_LAST_THREE_B])
1348@@ -1385,29 +1398,29 @@ table[73] = ObjectBuilder
1349   .add(Symbol.POUND, [REDUCE, ReduceActions.REDUCE_LAST_THREE_B])
1350   .build();
1351 table[74] = ObjectBuilder
1352-  .add(Symbol.AMPERSAND, [SHIFT, State.NUMBER_FOLLOWED_BY_AMPERSAND])
1353-  .add(Symbol.EQUALS, [SHIFT, State.START_EQUALS])
1354-  .add(Symbol.PLUS, [SHIFT, State.NUMBER_FOLLOWED_BY_PLUS])
1355+  .add(Symbol.AMPERSAND, [SHIFT, State.Number_Ampersand])
1356+  .add(Symbol.EQUALS, [SHIFT, State.Start_Equals])
1357+  .add(Symbol.PLUS, [SHIFT, State.Number_Plus])
1358   .add(Symbol.RIGHT_PAREN, [REDUCE, ReduceActions.REDUCE_INT])
1359-  .add(Symbol.LESS_THAN, [SHIFT, State.LESS_THAN])
1360-  .add(Symbol.GREATER_THAN, [SHIFT, State.GREATER_THAN])
1361-  .add(Symbol.MINUS, [SHIFT, State.NUMBER_FOLLOWED_BY_MINUS])
1362-  .add(Symbol.ASTERISK, [SHIFT, State.NUMBER_FOLLOWED_BY_ASTERISK])
1363-  .add(Symbol.DIVIDE, [SHIFT, State.NUMBER_FOLLOWED_BY_SLASH])
1364-  .add(Symbol.CARROT, [SHIFT, State.NUMBER_FOLLOWED_BY_CARROT])
1365+  .add(Symbol.LESS_THAN, [SHIFT, State.LessThan])
1366+  .add(Symbol.GREATER_THAN, [SHIFT, State.GreaterThan])
1367+  .add(Symbol.MINUS, [SHIFT, State.Number_Minus])
1368+  .add(Symbol.ASTERISK, [SHIFT, State.Number_Asterisk])
1369+  .add(Symbol.DIVIDE, [SHIFT, State.Number_Divide])
1370+  .add(Symbol.CARROT, [SHIFT, State.Number_Carrot])
1371   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.REDUCE_INT])
1372   .add(Symbol.COMMA, [REDUCE, ReduceActions.REDUCE_INT]).build();
1373 table[75] = ObjectBuilder
1374-  .add(Symbol.AMPERSAND, [SHIFT, State.NUMBER_FOLLOWED_BY_AMPERSAND])
1375-  .add(Symbol.EQUALS, [SHIFT, State.START_EQUALS])
1376-  .add(Symbol.PLUS, [SHIFT, State.NUMBER_FOLLOWED_BY_PLUS])
1377+  .add(Symbol.AMPERSAND, [SHIFT, State.Number_Ampersand])
1378+  .add(Symbol.EQUALS, [SHIFT, State.Start_Equals])
1379+  .add(Symbol.PLUS, [SHIFT, State.Number_Plus])
1380   .add(Symbol.RIGHT_PAREN, [REDUCE, ReduceActions.REDUCE_PERCENT])
1381-  .add(Symbol.LESS_THAN, [SHIFT, State.LESS_THAN])
1382-  .add(Symbol.GREATER_THAN, [SHIFT, State.GREATER_THAN])
1383-  .add(Symbol.MINUS, [SHIFT, State.NUMBER_FOLLOWED_BY_MINUS])
1384-  .add(Symbol.ASTERISK, [SHIFT, State.NUMBER_FOLLOWED_BY_ASTERISK])
1385-  .add(Symbol.DIVIDE, [SHIFT, State.NUMBER_FOLLOWED_BY_SLASH])
1386-  .add(Symbol.CARROT, [SHIFT, State.NUMBER_FOLLOWED_BY_CARROT])
1387+  .add(Symbol.LESS_THAN, [SHIFT, State.LessThan])
1388+  .add(Symbol.GREATER_THAN, [SHIFT, State.GreaterThan])
1389+  .add(Symbol.MINUS, [SHIFT, State.Number_Minus])
1390+  .add(Symbol.ASTERISK, [SHIFT, State.Number_Asterisk])
1391+  .add(Symbol.DIVIDE, [SHIFT, State.Number_Divide])
1392+  .add(Symbol.CARROT, [SHIFT, State.Number_Carrot])
1393   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.REDUCE_PERCENT])
1394   .add(Symbol.COMMA, [REDUCE, ReduceActions.REDUCE_PERCENT]).build();
1395 const ACTION_TABLE = table;