spreadsheet
typeScript/javascript spreadsheet parser, with formulas.
git clone https://git.vogt.world/spreadsheet.git
Log | Files | README.md
← Commit log
commit
message
[Parser] replacing complex table objects with simple objects
author
Ben Vogt <[email protected]>
date
2017-09-17 21:24:46
stats
3 file(s) changed, 1439 insertions(+), 845 deletions(-)
files
src/Parser/Parser.ts
src/Utilities/ObjectFromPairs.ts
tests/Utilities/ObjectFromPairsTest.ts
   1diff --git a/src/Parser/Parser.ts b/src/Parser/Parser.ts
   2index 5cab0fd..c856380 100644
   3--- a/src/Parser/Parser.ts
   4+++ b/src/Parser/Parser.ts
   5@@ -1,8 +1,4 @@
   6 import {
   7-  ObjectFromPairs
   8-} from "../Utilities/ObjectFromPairs";
   9-import {
  10-  PARSE_ERROR,
  11   ParseError
  12 } from "../Errors";
  13 import {
  14@@ -93,56 +89,54 @@ const RULES = [
  15  * Actions to take when processing tokens one by one. We're always either taking the next token, reducing our current
  16  * tokens, or accepting and returning.
  17  */
  18-const enum LexActions {
  19-  SHIFT = 1,
  20-  REDUCE,
  21-  ACCEPT
  22-}
  23+const SHIFT = 1;
  24+const REDUCE = 2;
  25+const ACCEPT = 3;
  26 
  27 const enum ReduceActions {
  28   NO_ACTION = 0,
  29-  RETURN_LAST,
  30-  CALL_VARIABLE,
  31-  TIME_CALL_TRUE,
  32-  TIME_CALL,
  33-  AS_NUMBER,
  34-  AS_STRING,
  35-  AMPERSAND,
  36-  EQUALS,
  37-  PLUS,
  38-  LAST_NUMBER,
  39-  LTE,
  40-  GTE,
  41-  NOT_EQ,
  42-  NOT,
  43-  GT,
  44-  LT,
  45-  MINUS,
  46-  MULTIPLY,
  47-  DIVIDE,
  48-  TO_POWER,
  49-  INVERT_NUM,
  50-  TO_NUMBER_NAN_AS_ZERO,
  51-  CALL_FUNCTION_LAST_BLANK,
  52-  CALL_FUNCTION_LAST_TWO_IN_STACK,
  53-  I25,
  54-  I26,
  55-  I27,
  56-  FIXED_CELL_VAL,
  57-  FIXED_CELL_RANGE_VAL,
  58-  CELL_VALUE,
  59-  CELL_RANGE_VALUE,
  60-  ENSURE_IS_ARRAY,
  61-  ENSURE_YYTEXT_ARRAY,
  62-  REDUCE_INT,
  63-  REDUCE_PERCENT,
  64-  WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY,
  65-  ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH,
  66-  REFLEXIVE_REDUCE,
  67-  REDUCE_FLOAT,
  68-  REDUCE_PREV_AS_PERCENT,
  69-  REDUCE_LAST_THREE_A,
  70-  REDUCE_LAST_THREE_B
  71+  RETURN_LAST = 1,
  72+  CALL_VARIABLE = 2,
  73+  TIME_CALL_TRUE = 3,
  74+  TIME_CALL = 4,
  75+  AS_NUMBER = 5,
  76+  AS_STRING = 6,
  77+  AMPERSAND = 7,
  78+  EQUALS = 8,
  79+  PLUS = 9,
  80+  LAST_NUMBER = 10,
  81+  LTE = 11,
  82+  GTE = 12,
  83+  NOT_EQ = 13,
  84+  NOT = 14,
  85+  GT = 15,
  86+  LT = 16,
  87+  MINUS = 17,
  88+  MULTIPLY = 18,
  89+  DIVIDE = 19,
  90+  TO_POWER = 20,
  91+  INVERT_NUM = 21,
  92+  TO_NUMBER_NAN_AS_ZERO = 22,
  93+  CALL_FUNCTION_LAST_BLANK = 23,
  94+  CALL_FUNCTION_LAST_TWO_IN_STACK = 24,
  95+  I25 = 25,
  96+  I26 = 26,
  97+  I27 = 27,
  98+  FIXED_CELL_VAL = 28,
  99+  FIXED_CELL_RANGE_VAL = 29,
 100+  CELL_VALUE = 30,
 101+  CELL_RANGE_VALUE = 31,
 102+  ENSURE_IS_ARRAY = 32,
 103+  ENSURE_YYTEXT_ARRAY = 33,
 104+  REDUCE_INT = 34,
 105+  REDUCE_PERCENT = 35,
 106+  WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY = 36,
 107+  ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH = 37,
 108+  REFLEXIVE_REDUCE = 38,
 109+  REDUCE_FLOAT = 39,
 110+  REDUCE_PREV_AS_PERCENT = 40,
 111+  REDUCE_LAST_THREE_A = 41,
 112+  REDUCE_LAST_THREE_B = 42
 113 }
 114 
 115 /**
 116@@ -224,833 +218,1191 @@ productions[ReduceActions.REDUCE_LAST_THREE_A] = new ReductionPair(2, 3);
 117 productions[ReduceActions.REDUCE_LAST_THREE_B] = new ReductionPair(2, 4);
 118 const PRODUCTIONS = productions;
 119 
 120-/**
 121- * Extend object obj by keys k, and values v for each k.
 122- * @param k - keys to extend object by.
 123- * @param v - value set for each key k.
 124- * @param obj - object to extend.
 125- * @param l
 126- * @returns {Object}
 127- */
 128-const extendRules = function (k, v, obj?, l?) {
 129-  for (obj = obj || {}, l = k.length; l--; obj[k[l]] = v) {}
 130-  return obj;
 131-};
 132-const $V0 = [LexActions.SHIFT, 4];
 133-const $V1 = [LexActions.SHIFT, 5];
 134-const $V2 = [LexActions.SHIFT, 7];
 135-const $V3 = [LexActions.SHIFT, 10];
 136-const $V4 = [LexActions.SHIFT, 8];
 137-const $V5 = [LexActions.SHIFT, 9];
 138-const $V6 = [LexActions.SHIFT, 11];
 139-const $V7 = [LexActions.SHIFT, 16];
 140-const $V8 = [LexActions.SHIFT, 17];
 141-const $V9 = [LexActions.SHIFT, 14];
 142-const $Va = [LexActions.SHIFT, 15];
 143-const $Vb = [LexActions.SHIFT, 18];
 144-const $Vc = [LexActions.SHIFT, 20];
 145-const $Vd = [LexActions.SHIFT, 21];
 146-const $Ve = [LexActions.SHIFT, 22];
 147-const $Vf = [LexActions.SHIFT, 23];
 148-const $Vg = [LexActions.SHIFT, 24];
 149-const $Vh = [LexActions.SHIFT, 25];
 150-const $Vi = [LexActions.SHIFT, 26];
 151-const $Vj = [LexActions.SHIFT, 27];
 152-const $Vk = [LexActions.SHIFT, 28];
 153-const $Vl = [LexActions.SHIFT, 29];
 154-const $Vm = [
 155-  5,
 156-  11,
 157-  12,
 158-  13,
 159-  15,
 160-  16,
 161-  17,
 162-  18,
 163-  19,
 164-  20,
 165-  21,
 166-  22,
 167-  30,
 168-  31
 169-];
 170-const $Vn = [
 171-  5,
 172-  11,
 173-  12,
 174-  13,
 175-  15,
 176-  16,
 177-  17,
 178-  18,
 179-  19,
 180-  20,
 181-  21,
 182-  22,
 183-  30,
 184-  31,
 185-  33
 186-];
 187-const $Vo = [LexActions.SHIFT, 38];
 188-const $Vp = [
 189-  5,
 190-  11,
 191-  12,
 192-  13,
 193-  15,
 194-  16,
 195-  17,
 196-  18,
 197-  19,
 198-  20,
 199-  21,
 200-  22,
 201-  30,
 202-  31,
 203-  35,
 204-  38
 205-];
 206-const $Vq = [
 207-  5,
 208-  12,
 209-  13,
 210-  15,
 211-  16,
 212-  17,
 213-  18,
 214-  19,
 215-  30,
 216-  31
 217-];
 218-const $Vr = [
 219-  5,
 220-  12,
 221-  15,
 222-  16,
 223-  17,
 224-  18,
 225-  30,
 226-  31
 227-];
 228-const $Vs = [
 229-  5,
 230-  12,
 231-  13,
 232-  15,
 233-  16,
 234-  17,
 235-  18,
 236-  19,
 237-  20,
 238-  21,
 239-  30,
 240-  31
 241-];
 242-const $Vt = [
 243-  15,
 244-  30,
 245-  31
 246-];
 247-const $Vu = [
 248-  5,
 249-  11,
 250-  12,
 251-  13,
 252-  15,
 253-  16,
 254-  17,
 255-  18,
 256-  19,
 257-  20,
 258-  21,
 259-  22,
 260-  30,
 261-  31,
 262-  32,
 263-  36
 264-];
 265+const SYMBOL_NAME_TO_INDEX = {
 266+  "error": 2,
 267+  "expressions": 3,
 268+  "expression": 4,
 269+  "EOF": 5,
 270+  "variableSequence": 6,
 271+  "TIME_AMPM": 7,
 272+  "TIME_24": 8,
 273+  "number": 9,
 274+  "STRING": 10,
 275+  "&": 11,
 276+  "=": 12,
 277+  "+": 13,
 278+  "(": 14,
 279+  ")": 15,
 280+  "<": 16,
 281+  ">": 17,
 282+  "NOT": 18,
 283+  "-": 19,
 284+  "*": 20,
 285+  "/": 21,
 286+  "^": 22,
 287+  "FUNCTION": 23,
 288+  "expseq": 24,
 289+  "cell": 25,
 290+  "FIXEDCELL": 26,
 291+  ":": 27,
 292+  "CELL": 28,
 293+  "ARRAY": 29,
 294+  ";": 30,
 295+  ",": 31,
 296+  "VARIABLE": 32,
 297+  "DECIMAL": 33,
 298+  "NUMBER": 34,
 299+  "%": 35,
 300+  "#": 36,
 301+  "!": 37,
 302+  "$accept": 0,
 303+  "$end": 1
 304+};
 305+const SYMBOL_INDEX_TO_NAME = {
 306+  5: "EOF",
 307+  7: "TIME_AMPM",
 308+  8: "TIME_24",
 309+  10: "STRING",
 310+  11: "&",
 311+  12: "=",
 312+  13: "+",
 313+  14: "(",
 314+  15: ")",
 315+  16: "<",
 316+  17: ">",
 317+  18: "NOT",
 318+  19: "-",
 319+  20: "*",
 320+  21: "/",
 321+  22: "^",
 322+  23: "FUNCTION",
 323+  26: "FIXEDCELL",
 324+  27: ":",
 325+  28: "CELL",
 326+  29: "ARRAY",
 327+  30: ";",
 328+  31: ",",
 329+  32: "VARIABLE",
 330+  33: "DECIMAL",
 331+  34: "NUMBER",
 332+  35: "%",
 333+  36: "#",
 334+  37: "!"
 335+};
 336 
 337 
 338 /**
 339- * Array of to map rules to to LexActions and other rules.
 340+ * Array of to map rules to to LexActions and other rules. A single index in the object (e.g. `{2: 13}`) indicates the
 341+ * rule object to follow for the next token, while an array (e.g. `{23: [1, 11]}`) indicates the action to be taken,
 342+ * and the rule object to follow after the action.
 343  */
 344 let table = [];
 345-table[0] = ObjectFromPairs.of([
 346-  2, 13,
 347-  3, 1,
 348-  4, 2,
 349-  6, 3,
 350-  7, $V0,
 351-  8, $V1,
 352-  9, 6,
 353-  10, $V2,
 354-  13, $V3,
 355-  14, $V4,
 356-  19, $V5,
 357-  23, $V6,
 358-  25, 12,
 359-  26, $V7,
 360-  28, $V8,
 361-  32, $V9,
 362-  34, $Va,
 363-  36, $Vb
 364-]);
 365-table[1] = ObjectFromPairs.of([
 366-  1, [3]
 367-]);
 368-table[2] = ObjectFromPairs.of([
 369-  5, [LexActions.SHIFT, 19],
 370-  11, $Vc,
 371-  12, $Vd,
 372-  13, $Ve,
 373-  16, $Vf,
 374-  17, $Vg,
 375-  18, $Vh,
 376-  19, $Vi,
 377-  20, $Vj,
 378-  21, $Vk,
 379-  22, $Vl
 380-]);
 381-table[3] = extendRules($Vm, [LexActions.REDUCE, 2], ObjectFromPairs.of([33, [LexActions.SHIFT, 30]]));
 382-table[4] = extendRules($Vm, [LexActions.REDUCE, 3]);
 383-table[5] = extendRules($Vm, [LexActions.REDUCE, 4]);
 384-table[6] = extendRules($Vm, [LexActions.REDUCE, 5], ObjectFromPairs.of([35, [LexActions.SHIFT, 31]]));
 385-table[7] = extendRules($Vm, [LexActions.REDUCE, 6]);
 386-table[8] = ObjectFromPairs.of([
 387-  2, 13,
 388-  4, 32,
 389-  6, 3,
 390-  7, $V0,
 391-  8, $V1,
 392-  9, 6,
 393-  10, $V2,
 394-  13, $V3,
 395-  14, $V4,
 396-  19, $V5,
 397-  23, $V6,
 398-  25, 12,
 399-  26, $V7,
 400-  28, $V8,
 401-  32, $V9,
 402-  34, $Va,
 403-  36, $Vb
 404-]);
 405-table[9] = ObjectFromPairs.of([
 406-  2, 13,
 407-  4, 33,
 408-  6, 3,
 409-  7, $V0,
 410-  8, $V1,
 411-  9, 6,
 412-  10, $V2,
 413-  13, $V3,
 414-  14, $V4,
 415-  19, $V5,
 416-  23, $V6,
 417-  25, 12,
 418-  26, $V7,
 419-  28, $V8,
 420-  32, $V9,
 421-  34, $Va,
 422-  36, $Vb
 423-]);
 424-table[10] = ObjectFromPairs.of([
 425-  2, 13,
 426-  4, 34,
 427-  6, 3,
 428-  7, $V0,
 429-  8, $V1,
 430-  9, 6,
 431-  10, $V2,
 432-  13, $V3,
 433-  14, $V4,
 434-  19, $V5,
 435-  23, $V6,
 436-  25, 12,
 437-  26, $V7,
 438-  28, $V8,
 439-  32, $V9,
 440-  34, $Va,
 441-  36, $Vb
 442-]);
 443-table[11] =  ObjectFromPairs.of([
 444-  14, [LexActions.SHIFT, 35]
 445-]);
 446-table[12] = extendRules($Vm, [LexActions.REDUCE, 25]);
 447-table[13] = extendRules($Vm, [LexActions.REDUCE, 26], ObjectFromPairs.of([LexActions.REDUCE, 36, 32, [LexActions.SHIFT, 37], 36, $Vb]));
 448-table[14] = extendRules($Vn, [LexActions.REDUCE, 36], ObjectFromPairs.of([36, $Vo]));
 449-table[15] = extendRules($Vp, [LexActions.REDUCE, 38], ObjectFromPairs.of([33, [LexActions.SHIFT, 39]]));
 450-table[16] = extendRules($Vm, [LexActions.REDUCE, 28], ObjectFromPairs.of([27, [LexActions.SHIFT, 40]]));
 451-table[17] = extendRules($Vm, [LexActions.REDUCE, 30], ObjectFromPairs.of([27, [LexActions.SHIFT, 41]]));
 452-table[18] = ObjectFromPairs.of([32, [LexActions.SHIFT, 42]]);
 453-table[19] = ObjectFromPairs.of([1, [LexActions.ACCEPT, 1]]);
 454-table[20] = ObjectFromPairs.of([
 455-  2, 13,
 456-  4, 43,
 457-  6, 3,
 458-  7, $V0,
 459-  8, $V1,
 460-  9, 6,
 461-  10, $V2,
 462-  13, $V3,
 463-  14, $V4,
 464-  19, $V5,
 465-  23, $V6,
 466-  25, 12,
 467-  26, $V7,
 468-  28, $V8,
 469-  32, $V9,
 470-  34, $Va,
 471-  36, $Vb
 472-]);
 473-table[21] = ObjectFromPairs.of([
 474-  2, 13,
 475-  4, 44,
 476-  6, 3,
 477-  7, $V0,
 478-  8, $V1,
 479-  9, 6,
 480-  10, $V2,
 481-  13, $V3,
 482-  14, $V4,
 483-  19, $V5,
 484-  23, $V6,
 485-  25, 12,
 486-  26, $V7,
 487-  28, $V8,
 488-  32, $V9,
 489-  34, $Va,
 490-  36, $Vb
 491-]);
 492-table[22] = ObjectFromPairs.of([
 493-  2, 13,
 494-  4, 45,
 495-  6, 3,
 496-  7, $V0,
 497-  8, $V1,
 498-  9, 6,
 499-  10, $V2,
 500-  13, $V3,
 501-  14, $V4,
 502-  19, $V5,
 503-  23, $V6,
 504-  25, 12,
 505-  26, $V7,
 506-  28, $V8,
 507-  32, $V9,
 508-  34, $Va,
 509-  36, $Vb
 510-]);
 511-table[23] = ObjectFromPairs.of([
 512-  2, 13,
 513-  4, 48,
 514-  6, 3,
 515-  7, $V0,
 516-  8, $V1,
 517-  9, 6,
 518-  10, $V2,
 519-  12, [1, 46],
 520-  13, $V3,
 521-  14, $V4,
 522-  17, [1, 47],
 523-  19, $V5,
 524-  23, $V6,
 525-  25, 12,
 526-  26, $V7,
 527-  28, $V8,
 528-  32, $V9,
 529-  34, $Va,
 530-  36, $Vb
 531-]);
 532-table[24] = ObjectFromPairs.of([
 533-  2, 13,
 534-  4, 50,
 535-  6, 3,
 536-  7, $V0,
 537-  8, $V1,
 538-  9, 6,
 539-  10, $V2,
 540-  12, [1, 49],
 541-  13, $V3,
 542-  14, $V4,
 543-  19, $V5,
 544-  23, $V6,
 545-  25, 12,
 546-  26, $V7,
 547-  28, $V8,
 548-  32, $V9,
 549-  34, $Va,
 550-  36, $Vb
 551-]);
 552-table[25] = ObjectFromPairs.of([
 553-  2, 13,
 554-  4, 51,
 555-  6, 3,
 556-  7, $V0,
 557-  8, $V1,
 558-  9, 6,
 559-  10, $V2,
 560-  13, $V3,
 561-  14, $V4,
 562-  19, $V5,
 563-  23, $V6,
 564-  25, 12,
 565-  26, $V7,
 566-  28, $V8,
 567-  32, $V9,
 568-  34, $Va,
 569-  36, $Vb
 570-]);
 571-table[26] = ObjectFromPairs.of([
 572-  2, 13,
 573-  4, 52,
 574-  6, 3,
 575-  7, $V0,
 576-  8, $V1,
 577-  9, 6,
 578-  10, $V2,
 579-  13, $V3,
 580-  14, $V4,
 581-  19, $V5,
 582-  23, $V6,
 583-  25, 12,
 584-  26, $V7,
 585-  28, $V8,
 586-  32, $V9,
 587-  34, $Va,
 588-  36, $Vb
 589-]);
 590-table[27] = ObjectFromPairs.of([
 591-  2, 13,
 592-  4, 53,
 593-  6, 3,
 594-  7, $V0,
 595-  8, $V1,
 596-  9, 6,
 597-  10, $V2,
 598-  13, $V3,
 599-  14, $V4,
 600-  19, $V5,
 601-  23, $V6,
 602-  25, 12,
 603-  26, $V7,
 604-  28, $V8,
 605-  32, $V9,
 606-  34, $Va,
 607-  36, $Vb
 608-]);
 609-table[28] = ObjectFromPairs.of([
 610-  2, 13,
 611-  4, 54,
 612-  6, 3,
 613-  7, $V0,
 614-  8, $V1,
 615-  9, 6,
 616-  10, $V2,
 617-  13, $V3,
 618-  14, $V4,
 619-  19, $V5,
 620-  23, $V6,
 621-  25, 12,
 622-  26, $V7,
 623-  28, $V8,
 624-  32, $V9,
 625-  34, $Va,
 626-  36, $Vb
 627-]);
 628-table[29] = ObjectFromPairs.of([
 629-  2, 13,
 630-  4, 55,
 631-  6, 3,
 632-  7, $V0,
 633-  8, $V1,
 634-  9, 6,
 635-  10, $V2,
 636-  13, $V3,
 637-  14, $V4,
 638-  19, $V5,
 639-  23, $V6,
 640-  25, 12,
 641-  26, $V7,
 642-  28, $V8,
 643-  32, $V9,
 644-  34, $Va,
 645-  36, $Vb
 646-]);
 647-table[30] = ObjectFromPairs.of([ [LexActions.SHIFT, 56]]);
 648-table[31] = extendRules($Vp, [LexActions.REDUCE, 40]);
 649-table[32] = ObjectFromPairs.of([
 650-  11, $Vc,
 651-  12, $Vd,
 652-  13, $Ve,
 653-  15, [LexActions.SHIFT, 57],
 654-  16, $Vf,
 655-  17, $Vg,
 656-  18, $Vh,
 657-  19, $Vi,
 658-  20, $Vj,
 659-  21, $Vk,
 660-  22, $Vl
 661-]);
 662-table[33] = extendRules($Vq, [LexActions.REDUCE, 21], ObjectFromPairs.of([
 663-  11, $Vc,
 664-  20, $Vj,
 665-  21, $Vk,
 666-  22, $Vl
 667-]));
 668-table[34] = extendRules($Vq, [LexActions.REDUCE, 22], ObjectFromPairs.of([
 669-  11, $Vc,
 670-  20, $Vj,
 671-  21, $Vk,
 672-  22, $Vl])
 673-);
 674-table[35] = ObjectFromPairs.of([
 675-  2, 13,
 676-  4, 60,
 677-  6, 3,
 678-  7, $V0,
 679-  8, $V1,
 680-  9, 6,
 681-  10, $V2,
 682-  13, $V3,
 683-  14, $V4,
 684-  15, [LexActions.SHIFT, 58],
 685-  19, $V5,
 686-  23, $V6,
 687-  24, 59,
 688-  25, 12,
 689-  26, $V7,
 690-  28, $V8,
 691-  29, [LexActions.SHIFT, 61],
 692-  32, $V9,
 693-  34, $Va,
 694-  36, $Vb
 695-]);
 696-table[36] = extendRules($Vm, [LexActions.REDUCE, 27]);
 697-table[37] = ObjectFromPairs.of([36, $Vo]);
 698-table[38] = ObjectFromPairs.of([32, [LexActions.SHIFT, 62]]);
 699-table[39] = ObjectFromPairs.of([34, [LexActions.SHIFT, 63]]);
 700-table[40] = ObjectFromPairs.of([26, [LexActions.SHIFT, 64]]);
 701-table[41] = ObjectFromPairs.of([28, [LexActions.SHIFT, 65]]);
 702-table[42] = ObjectFromPairs.of([37, [LexActions.SHIFT, 66]]);
 703-table[43] = extendRules($Vm, [LexActions.REDUCE, 7]);
 704-table[44] = extendRules([5, 12, 15, 30, 31], [LexActions.REDUCE, 8], ObjectFromPairs.of([
 705-  11, $Vc,
 706-  13, $Ve,
 707-  16, $Vf,
 708-  17, $Vg,
 709-  18, $Vh,
 710-  19, $Vi,
 711-  20, $Vj,
 712-  21, $Vk,
 713-  22, $Vl
 714-]));
 715-table[45] = extendRules($Vq, [LexActions.REDUCE, 9], ObjectFromPairs.of([
 716-  11, $Vc,
 717-  20, $Vj,
 718-  21, $Vk,
 719-  22, $Vl
 720-]));
 721-table[46] = ObjectFromPairs.of([
 722-  2, 13,
 723-  4, 67,
 724-  6, 3,
 725-  7, $V0,
 726-  8, $V1,
 727-  9, 6,
 728-  10, $V2,
 729-  13, $V3,
 730-  14, $V4,
 731-  19, $V5,
 732-  23, $V6,
 733-  25, 12,
 734-  26, $V7,
 735-  28, $V8,
 736-  32, $V9,
 737-  34, $Va,
 738-  36, $Vb
 739-]);
 740-table[47] = ObjectFromPairs.of([
 741-  2, 13,
 742-  4, 68,
 743-  6, 3,
 744-  7, $V0,
 745-  8, $V1,
 746-  9, 6,
 747-  10, $V2,
 748-  13, $V3,
 749-  14, $V4,
 750-  19, $V5,
 751-  23, $V6,
 752-  25, 12,
 753-  26, $V7,
 754-  28, $V8,
 755-  32, $V9,
 756-  34, $Va,
 757-  36, $Vb
 758-]);
 759-table[48] = extendRules($Vr, [LexActions.REDUCE, 16], ObjectFromPairs.of([
 760-  11, $Vc,
 761-  13, $Ve,
 762-  19, $Vi,
 763-  20, $Vj,
 764-  21, $Vk,
 765-  22, $Vl
 766-]));
 767-table[49] = ObjectFromPairs.of([
 768-  2, 13,
 769-  4, 69,
 770-  6, 3,
 771-  7, $V0,
 772-  8, $V1,
 773-  9, 6,
 774-  10, $V2,
 775-  13, $V3,
 776-  14, $V4,
 777-  19, $V5,
 778-  23, $V6,
 779-  25, 12,
 780-  26, $V7,
 781-  28, $V8,
 782-  32, $V9,
 783-  34, $Va,
 784-  36, $Vb
 785-]);
 786-table[50] = extendRules($Vr, [LexActions.REDUCE, 15], ObjectFromPairs.of([
 787-  11, $Vc,
 788-  13, $Ve,
 789-  19, $Vi,
 790-  20, $Vj,
 791-  21, $Vk,
 792-  22, $Vl
 793-]));
 794-table[51] = extendRules([5, 12, 15, 18, 30, 31], [LexActions.REDUCE, 14], ObjectFromPairs.of([
 795-  11, $Vc,
 796-  13, $Ve,
 797-  16, $Vf,
 798-  17, $Vg,
 799-  19, $Vi,
 800-  20, $Vj,
 801-  21, $Vk,
 802-  22, $Vl
 803-]));
 804-table[52] = extendRules($Vq, [LexActions.REDUCE, 17], ObjectFromPairs.of([
 805-  11, $Vc,
 806-  20, $Vj,
 807-  21, $Vk,
 808-  22, $Vl
 809-]));
 810-table[53] = extendRules($Vs, [LexActions.REDUCE, 18], ObjectFromPairs.of([
 811-  11, $Vc,
 812-  22, $Vl
 813-]));
 814-table[54] = extendRules($Vs, [LexActions.REDUCE, 19], ObjectFromPairs.of([
 815-  11, $Vc,
 816-  22, $Vl
 817-]));
 818-table[55] = extendRules([5, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 30, 31], [LexActions.REDUCE, 20], ObjectFromPairs.of([11, $Vc]));
 819-table[56] = extendRules($Vn, [LexActions.REDUCE, 37]);
 820-table[57] = extendRules($Vm, [LexActions.REDUCE, 10]);
 821-table[58] = extendRules($Vm, [LexActions.REDUCE, 23]);
 822-table[59] = ObjectFromPairs.of([
 823-  15, [LexActions.SHIFT, 70],
 824-  30, [LexActions.SHIFT, 71],
 825-  31, [LexActions.SHIFT, 72]
 826-]);
 827-table[60] = extendRules($Vt, [LexActions.REDUCE, 32], ObjectFromPairs.of([
 828-  11, $Vc,
 829-  12, $Vd,
 830-  13, $Ve,
 831-  16, $Vf,
 832-  17, $Vg,
 833-  18, $Vh,
 834-  19, $Vi,
 835-  20, $Vj,
 836-  21, $Vk,
 837-  22, $Vl
 838-]));
 839-table[61] = extendRules($Vt, [LexActions.REDUCE, 33]);
 840-table[62] = ObjectFromPairs.of([
 841-  37, [LexActions.SHIFT, 73]
 842-]);
 843-table[63] = extendRules($Vp, [LexActions.REDUCE, 39]);
 844-table[64] = extendRules($Vm, [LexActions.REDUCE, 29]);
 845-table[65] = extendRules($Vm, [LexActions.REDUCE, 31]);
 846-table[66] = extendRules($Vu, [LexActions.REDUCE, 41]);
 847-table[67] = extendRules($Vr, [LexActions.REDUCE, 11], ObjectFromPairs.of([
 848-  11, $Vc,
 849-  13, $Ve,
 850-  19, $Vi,
 851-  20, $Vj,
 852-  21, $Vk,
 853-  22, $Vl
 854-]));
 855-table[68] = extendRules($Vr, [LexActions.REDUCE, 13], ObjectFromPairs.of([
 856-  11, $Vc,
 857-  13, $Ve,
 858-  19, $Vi,
 859-  20, $Vj,
 860-  21, $Vk,
 861-  22, $Vl
 862-]));
 863-table[69] = extendRules($Vr, [LexActions.REDUCE, 12], ObjectFromPairs.of([
 864-  11, $Vc,
 865-  13, $Ve,
 866-  19, $Vi,
 867-  20, $Vj,
 868-  21, $Vk,
 869-  22, $Vl
 870-]));
 871-table[70] = extendRules($Vm, [LexActions.REDUCE, 24]);
 872-table[71] = ObjectFromPairs.of([
 873-  2, 13,
 874-  4, 74,
 875-  6, 3,
 876-  7, $V0,
 877-  8, $V1,
 878-  9, 6,
 879-  10, $V2,
 880-  13, $V3,
 881-  14, $V4,
 882-  19, $V5,
 883-  23, $V6,
 884-  25, 12,
 885-  26, $V7,
 886-  28, $V8,
 887-  32, $V9,
 888-  34, $Va,
 889-  36, $Vb,
 890-  12, $Vd
 891-]);
 892-table[72] = ObjectFromPairs.of([
 893-  2, 13,
 894-  4, 75,
 895-  6, 3,
 896-  7, $V0,
 897-  8, $V1,
 898-  9, 6,
 899-  10, $V2,
 900-  13, $V3,
 901-  14, $V4,
 902-  19, $V5,
 903-  23, $V6,
 904-  25, 12,
 905-  26, $V7,
 906-  28, $V8,
 907-  32, $V9,
 908-  34, $Va,
 909-  36, $Vb,
 910-  12, $Vd
 911-  // // NOTE: Ben this is where you are. When the parser captures an entire array, it should be able to reduce the
 912-  // // array, and continue on parsing normally. So we should have [LexActions.REDUCE, X]
 913-  // 29, [LexActions.REDUCE, 1]
 914-]);
 915-table[73] = extendRules($Vu, [LexActions.REDUCE, 42]);
 916-table[74] = extendRules($Vt, [LexActions.REDUCE, 34], ObjectFromPairs.of([
 917-  11, $Vc,
 918-  12, $Vd,
 919-  13, $Ve,
 920-  16, $Vf,
 921-  17, $Vg,
 922-  18, $Vh,
 923-  19, $Vi,
 924-  20, $Vj,
 925-  21, $Vk,
 926-  22, $Vl
 927-]));
 928-table[75] = extendRules($Vt, [LexActions.REDUCE, 35], ObjectFromPairs.of([
 929-  11, $Vc,
 930-  12, $Vd,
 931-  13, $Ve,
 932-  16, $Vf,
 933-  17, $Vg,
 934-  18, $Vh,
 935-  19, $Vi,
 936-  20, $Vj,
 937-  21, $Vk,
 938-  22, $Vl
 939-]));
 940+table[0] = {
 941+  2: 13,
 942+  3: 1,
 943+  4: 2,
 944+  6: 3,
 945+  7: [SHIFT, 4],
 946+  8: [SHIFT, 5],
 947+  9: 6,
 948+  10: [SHIFT, 7],
 949+  13: [SHIFT, 10],
 950+  14: [SHIFT, 8],
 951+  19: [SHIFT, 9],
 952+  23: [SHIFT, 11],
 953+  25: 12,
 954+  26: [SHIFT, 16],
 955+  28: [SHIFT, 17],
 956+  32: [SHIFT, 14],
 957+  34: [SHIFT, 15],
 958+  36: [SHIFT, 18]
 959+};
 960+table[1] = {
 961+  1: [3]
 962+};
 963+table[2] = {
 964+  5: [SHIFT, 19],
 965+  11: [SHIFT, 20],
 966+  12: [SHIFT, 21],
 967+  13: [SHIFT, 22],
 968+  16: [SHIFT, 23],
 969+  17: [SHIFT, 24],
 970+  18: [SHIFT, 25],
 971+  19: [SHIFT, 26],
 972+  20: [SHIFT, 27],
 973+  21: [SHIFT, 28],
 974+  22: [SHIFT, 29]
 975+};
 976+table[3] = {
 977+  5: [REDUCE, 2],
 978+  11: [REDUCE, 2],
 979+  12: [REDUCE, 2],
 980+  13: [REDUCE, 2],
 981+  15: [REDUCE, 2],
 982+  16: [REDUCE, 2],
 983+  17: [REDUCE, 2],
 984+  18: [REDUCE, 2],
 985+  19: [REDUCE, 2],
 986+  20: [REDUCE, 2],
 987+  21: [REDUCE, 2],
 988+  22: [REDUCE, 2],
 989+  30: [REDUCE, 2],
 990+  31: [REDUCE, 2],
 991+  33: [SHIFT, 30]
 992+};
 993+table[4] = {
 994+  5: [REDUCE, 3],
 995+  11: [REDUCE, 3],
 996+  12: [REDUCE, 3],
 997+  13: [REDUCE, 3],
 998+  15: [REDUCE, 3],
 999+  16: [REDUCE, 3],
1000+  17: [REDUCE, 3],
1001+  18: [REDUCE, 3],
1002+  19: [REDUCE, 3],
1003+  20: [REDUCE, 3],
1004+  21: [REDUCE, 3],
1005+  22: [REDUCE, 3],
1006+  30: [REDUCE, 3],
1007+  31: [REDUCE, 3]
1008+};
1009+table[5] = {
1010+  5: [REDUCE, 4],
1011+  11: [REDUCE, 4],
1012+  12: [REDUCE, 4],
1013+  13: [REDUCE, 4],
1014+  15: [REDUCE, 4],
1015+  16: [REDUCE, 4],
1016+  17: [REDUCE, 4],
1017+  18: [REDUCE, 4],
1018+  19: [REDUCE, 4],
1019+  20: [REDUCE, 4],
1020+  21: [REDUCE, 4],
1021+  22: [REDUCE, 4],
1022+  30: [REDUCE, 4],
1023+  31: [REDUCE, 4]
1024+};
1025+table[6] = {
1026+  5: [REDUCE, 5],
1027+  11: [REDUCE, 5],
1028+  12: [REDUCE, 5],
1029+  13: [REDUCE, 5],
1030+  15: [REDUCE, 5],
1031+  16: [REDUCE, 5],
1032+  17: [REDUCE, 5],
1033+  18: [REDUCE, 5],
1034+  19: [REDUCE, 5],
1035+  20: [REDUCE, 5],
1036+  21: [REDUCE, 5],
1037+  22: [REDUCE, 5],
1038+  30: [REDUCE, 5],
1039+  31: [REDUCE, 5],
1040+  35: [SHIFT, 31]
1041+};
1042+table[7] = {
1043+  5: [REDUCE, 6],
1044+  11: [REDUCE, 6],
1045+  12: [REDUCE, 6],
1046+  13: [REDUCE, 6],
1047+  15: [REDUCE, 6],
1048+  16: [REDUCE, 6],
1049+  17: [REDUCE, 6],
1050+  18: [REDUCE, 6],
1051+  19: [REDUCE, 6],
1052+  20: [REDUCE, 6],
1053+  21: [REDUCE, 6],
1054+  22: [REDUCE, 6],
1055+  30: [REDUCE, 6],
1056+  31: [REDUCE, 6]
1057+};
1058+table[8] = {
1059+  2: 13,
1060+  4: 32,
1061+  6: 3,
1062+  7: [SHIFT, 4],
1063+  8: [SHIFT, 5],
1064+  9: 6,
1065+  10: [SHIFT, 7],
1066+  13: [SHIFT, 10],
1067+  14: [SHIFT, 8],
1068+  19: [SHIFT, 9],
1069+  23: [SHIFT, 11],
1070+  25: 12,
1071+  26: [SHIFT, 16],
1072+  28: [SHIFT, 17],
1073+  32: [SHIFT, 14],
1074+  34: [SHIFT, 15],
1075+  36: [SHIFT, 18]
1076+};
1077+table[9] = {
1078+  2: 13,
1079+  4: 33,
1080+  6: 3,
1081+  7: [SHIFT, 4],
1082+  8: [SHIFT, 5],
1083+  9: 6,
1084+  10: [SHIFT, 7],
1085+  13: [SHIFT, 10],
1086+  14: [SHIFT, 8],
1087+  19: [SHIFT, 9],
1088+  23: [SHIFT, 11],
1089+  25: 12,
1090+  26: [SHIFT, 16],
1091+  28: [SHIFT, 17],
1092+  32: [SHIFT, 14],
1093+  34: [SHIFT, 15],
1094+  36: [SHIFT, 18]
1095+};
1096+table[10] = {
1097+  2: 13,
1098+  4: 34,
1099+  6: 3,
1100+  7: [SHIFT, 4],
1101+  8: [SHIFT, 5],
1102+  9: 6,
1103+  10: [SHIFT, 7],
1104+  13: [SHIFT, 10],
1105+  14: [SHIFT, 8],
1106+  19: [SHIFT, 9],
1107+  23: [SHIFT, 11],
1108+  25: 12,
1109+  26: [SHIFT, 16],
1110+  28: [SHIFT, 17],
1111+  32: [SHIFT, 14],
1112+  34: [SHIFT, 15],
1113+  36: [SHIFT, 18]
1114+};
1115+table[11] = {
1116+  14: [SHIFT, 35]
1117+};
1118+table[12] = {
1119+  5: [REDUCE, 25],
1120+  11: [REDUCE, 25],
1121+  12: [REDUCE, 25],
1122+  13: [REDUCE, 25],
1123+  15: [REDUCE, 25],
1124+  16: [REDUCE, 25],
1125+  17: [REDUCE, 25],
1126+  18: [REDUCE, 25],
1127+  19: [REDUCE, 25],
1128+  20: [REDUCE, 25],
1129+  21: [REDUCE, 25],
1130+  22: [REDUCE, 25],
1131+  30: [REDUCE, 25],
1132+  31: [REDUCE, 25]
1133+};
1134+table[13] = {
1135+  2: 36,
1136+  5: [REDUCE, 26],
1137+  11: [REDUCE, 26],
1138+  12: [REDUCE, 26],
1139+  13: [REDUCE, 26],
1140+  15: [REDUCE, 26],
1141+  16: [REDUCE, 26],
1142+  17: [REDUCE, 26],
1143+  18: [REDUCE, 26],
1144+  19: [REDUCE, 26],
1145+  20: [REDUCE, 26],
1146+  21: [REDUCE, 26],
1147+  22: [REDUCE, 26],
1148+  30: [REDUCE, 26],
1149+  31: [REDUCE, 26],
1150+  32: [SHIFT, 37],
1151+  36: [SHIFT, 18]
1152+};
1153+table[14] = {
1154+  5: [REDUCE, 36],
1155+  11: [REDUCE, 36],
1156+  12: [REDUCE, 36],
1157+  13: [REDUCE, 36],
1158+  15: [REDUCE, 36],
1159+  16: [REDUCE, 36],
1160+  17: [REDUCE, 36],
1161+  18: [REDUCE, 36],
1162+  19: [REDUCE, 36],
1163+  20: [REDUCE, 36],
1164+  21: [REDUCE, 36],
1165+  22: [REDUCE, 36],
1166+  30: [REDUCE, 36],
1167+  31: [REDUCE, 36],
1168+  33: [REDUCE, 36],
1169+  36: [SHIFT, 38]
1170+};
1171+table[15] = {
1172+  5: [REDUCE, 38],
1173+  11: [REDUCE, 38],
1174+  12: [REDUCE, 38],
1175+  13: [REDUCE, 38],
1176+  15: [REDUCE, 38],
1177+  16: [REDUCE, 38],
1178+  17: [REDUCE, 38],
1179+  18: [REDUCE, 38],
1180+  19: [REDUCE, 38],
1181+  20: [REDUCE, 38],
1182+  21: [REDUCE, 38],
1183+  22: [REDUCE, 38],
1184+  30: [REDUCE, 38],
1185+  31: [REDUCE, 38],
1186+  33: [SHIFT, 39],
1187+  35: [REDUCE, 38],
1188+  38: [REDUCE, 38]
1189+};
1190+table[16] = {
1191+  5: [REDUCE, 28],
1192+  11: [REDUCE, 28],
1193+  12: [REDUCE, 28],
1194+  13: [REDUCE, 28],
1195+  15: [REDUCE, 28],
1196+  16: [REDUCE, 28],
1197+  17: [REDUCE, 28],
1198+  18: [REDUCE, 28],
1199+  19: [REDUCE, 28],
1200+  20: [REDUCE, 28],
1201+  21: [REDUCE, 28],
1202+  22: [REDUCE, 28],
1203+  27: [SHIFT, 40],
1204+  30: [REDUCE, 28],
1205+  31: [REDUCE, 28]
1206+};
1207+table[17] = {
1208+  5: [REDUCE, 30],
1209+  11: [REDUCE, 30],
1210+  12: [REDUCE, 30],
1211+  13: [REDUCE, 30],
1212+  15: [REDUCE, 30],
1213+  16: [REDUCE, 30],
1214+  17: [REDUCE, 30],
1215+  18: [REDUCE, 30],
1216+  19: [REDUCE, 30],
1217+  20: [REDUCE, 30],
1218+  21: [REDUCE, 30],
1219+  22: [REDUCE, 30],
1220+  27: [SHIFT, 41],
1221+  30: [REDUCE, 30],
1222+  31: [REDUCE, 30]
1223+};
1224+table[18] = {
1225+  32: [SHIFT, 42]
1226+};
1227+table[19] = {
1228+  1: [ACCEPT, 1]
1229+};
1230+table[20] = {
1231+  2: 13,
1232+  4: 43,
1233+  6: 3,
1234+  7: [SHIFT, 4],
1235+  8: [SHIFT, 5],
1236+  9: 6,
1237+  10: [SHIFT, 7],
1238+  13: [SHIFT, 10],
1239+  14: [SHIFT, 8],
1240+  19: [SHIFT, 9],
1241+  23: [SHIFT, 11],
1242+  25: 12,
1243+  26: [SHIFT, 16],
1244+  28: [SHIFT, 17],
1245+  32: [SHIFT, 14],
1246+  34: [SHIFT, 15],
1247+  36: [SHIFT, 18]
1248+};
1249+table[21] = {
1250+  2: 13,
1251+  4: 44,
1252+  6: 3,
1253+  7: [SHIFT, 4],
1254+  8: [SHIFT, 5],
1255+  9: 6,
1256+  10: [SHIFT, 7],
1257+  13: [SHIFT, 10],
1258+  14: [SHIFT, 8],
1259+  19: [SHIFT, 9],
1260+  23: [SHIFT, 11],
1261+  25: 12,
1262+  26: [SHIFT, 16],
1263+  28: [SHIFT, 17],
1264+  32: [SHIFT, 14],
1265+  34: [SHIFT, 15],
1266+  36: [SHIFT, 18]
1267+};
1268+table[22] = {
1269+  2: 13,
1270+  4: 45,
1271+  6: 3,
1272+  7: [SHIFT, 4],
1273+  8: [SHIFT, 5],
1274+  9: 6,
1275+  10: [SHIFT, 7],
1276+  13: [SHIFT, 10],
1277+  14: [SHIFT, 8],
1278+  19: [SHIFT, 9],
1279+  23: [SHIFT, 11],
1280+  25: 12,
1281+  26: [SHIFT, 16],
1282+  28: [SHIFT, 17],
1283+  32: [SHIFT, 14],
1284+  34: [SHIFT, 15],
1285+  36: [SHIFT, 18]
1286+};
1287+table[23] = {
1288+  2: 13,
1289+  4: 48,
1290+  6: 3,
1291+  7: [SHIFT, 4],
1292+  8: [SHIFT, 5],
1293+  9: 6,
1294+  10: [SHIFT, 7],
1295+  12: [SHIFT, 46],
1296+  13: [SHIFT, 10],
1297+  14: [SHIFT, 8],
1298+  17: [SHIFT, 47],
1299+  19: [SHIFT, 9],
1300+  23: [SHIFT, 11],
1301+  25: 12,
1302+  26: [SHIFT, 16],
1303+  28: [SHIFT, 17],
1304+  32: [SHIFT, 14],
1305+  34: [SHIFT, 15],
1306+  36: [SHIFT, 18]
1307+};
1308+table[24] = {
1309+  2: 13,
1310+  4: 50,
1311+  6: 3,
1312+  7: [SHIFT, 4],
1313+  8: [SHIFT, 5],
1314+  9: 6,
1315+  10: [SHIFT, 7],
1316+  12: [SHIFT, 49],
1317+  13: [SHIFT, 10],
1318+  14: [SHIFT, 8],
1319+  19: [SHIFT, 9],
1320+  23: [SHIFT, 11],
1321+  25: 12,
1322+  26: [SHIFT, 16],
1323+  28: [SHIFT, 17],
1324+  32: [SHIFT, 14],
1325+  34: [SHIFT, 15],
1326+  36: [SHIFT, 18]
1327+};
1328+table[25] = {
1329+  2: 13,
1330+  4: 51,
1331+  6: 3,
1332+  7: [SHIFT, 4],
1333+  8: [SHIFT, 5],
1334+  9: 6,
1335+  10: [SHIFT, 7],
1336+  13: [SHIFT, 10],
1337+  14: [SHIFT, 8],
1338+  19: [SHIFT, 9],
1339+  23: [SHIFT, 11],
1340+  25: 12,
1341+  26: [SHIFT, 16],
1342+  28: [SHIFT, 17],
1343+  32: [SHIFT, 14],
1344+  34: [SHIFT, 15],
1345+  36: [SHIFT, 18]
1346+};
1347+table[26] = {
1348+  2: 13,
1349+  4: 52,
1350+  6: 3,
1351+  7: [SHIFT, 4],
1352+  8: [SHIFT, 5],
1353+  9: 6,
1354+  10: [SHIFT, 7],
1355+  13: [SHIFT, 10],
1356+  14: [SHIFT, 8],
1357+  19: [SHIFT, 9],
1358+  23: [SHIFT, 11],
1359+  25: 12,
1360+  26: [SHIFT, 16],
1361+  28: [SHIFT, 17],
1362+  32: [SHIFT, 14],
1363+  34: [SHIFT, 15],
1364+  36: [SHIFT, 18]
1365+};
1366+table[27] = {
1367+  2: 13,
1368+  4: 53,
1369+  6: 3,
1370+  7: [SHIFT, 4],
1371+  8: [SHIFT, 5],
1372+  9: 6,
1373+  10: [SHIFT, 7],
1374+  13: [SHIFT, 10],
1375+  14: [SHIFT, 8],
1376+  19: [SHIFT, 9],
1377+  23: [SHIFT, 11],
1378+  25: 12,
1379+  26: [SHIFT, 16],
1380+  28: [SHIFT, 17],
1381+  32: [SHIFT, 14],
1382+  34: [SHIFT, 15],
1383+  36: [SHIFT, 18]
1384+};
1385+table[28] = {
1386+  2: 13,
1387+  4: 54,
1388+  6: 3,
1389+  7: [SHIFT, 4],
1390+  8: [SHIFT, 5],
1391+  9: 6,
1392+  10: [SHIFT, 7],
1393+  13: [SHIFT, 10],
1394+  14: [SHIFT, 8],
1395+  19: [SHIFT, 9],
1396+  23: [SHIFT, 11],
1397+  25: 12,
1398+  26: [SHIFT, 16],
1399+  28: [SHIFT, 17],
1400+  32: [SHIFT, 14],
1401+  34: [SHIFT, 15],
1402+  36: [SHIFT, 18]
1403+};
1404+table[29] = {
1405+  2: 13,
1406+  4: 55,
1407+  6: 3,
1408+  7: [SHIFT, 4],
1409+  8: [SHIFT, 5],
1410+  9: 6,
1411+  10: [SHIFT, 7],
1412+  13: [SHIFT, 10],
1413+  14: [SHIFT, 8],
1414+  19: [SHIFT, 9],
1415+  23: [SHIFT, 11],
1416+  25: 12,
1417+  26: [SHIFT, 16],
1418+  28: [SHIFT, 17],
1419+  32: [SHIFT, 14],
1420+  34: [SHIFT, 15],
1421+  36: [SHIFT, 18]
1422+};
1423+table[30] = {
1424+  32: [SHIFT, 56]
1425+};
1426+table[31] = {
1427+  5: [REDUCE, 40],
1428+  11: [REDUCE, 40],
1429+  12: [REDUCE, 40],
1430+  13: [REDUCE, 40],
1431+  15: [REDUCE, 40],
1432+  16: [REDUCE, 40],
1433+  17: [REDUCE, 40],
1434+  18: [REDUCE, 40],
1435+  19: [REDUCE, 40],
1436+  20: [REDUCE, 40],
1437+  21: [REDUCE, 40],
1438+  22: [REDUCE, 40],
1439+  30: [REDUCE, 40],
1440+  31: [REDUCE, 40],
1441+  35: [REDUCE, 40],
1442+  38: [REDUCE, 40]
1443+};
1444+table[32] = {
1445+  11: [SHIFT, 20],
1446+  12: [SHIFT, 21],
1447+  13: [SHIFT, 22],
1448+  15: [SHIFT, 57],
1449+  16: [SHIFT, 23],
1450+  17: [SHIFT, 24],
1451+  18: [SHIFT, 25],
1452+  19: [SHIFT, 26],
1453+  20: [SHIFT, 27],
1454+  21: [SHIFT, 28],
1455+  22: [SHIFT, 29]
1456+};
1457+table[33] = {
1458+  5: [REDUCE, 21],
1459+  11: [SHIFT, 20],
1460+  12: [REDUCE, 21],
1461+  13: [REDUCE, 21],
1462+  15: [REDUCE, 21],
1463+  16: [REDUCE, 21],
1464+  17: [REDUCE, 21],
1465+  18: [REDUCE, 21],
1466+  19: [REDUCE, 21],
1467+  20: [SHIFT, 27],
1468+  21: [SHIFT, 28],
1469+  22: [SHIFT, 29],
1470+  30: [REDUCE, 21],
1471+  31: [REDUCE, 21]
1472+};
1473+table[34] = {
1474+  5: [REDUCE, 22],
1475+  11: [SHIFT, 20],
1476+  12: [REDUCE, 22],
1477+  13: [REDUCE, 22],
1478+  15: [REDUCE, 22],
1479+  16: [REDUCE, 22],
1480+  17: [REDUCE, 22],
1481+  18: [REDUCE, 22],
1482+  19: [REDUCE, 22],
1483+  20: [SHIFT, 27],
1484+  21: [SHIFT, 28],
1485+  22: [SHIFT, 29],
1486+  30: [REDUCE, 22],
1487+  31: [REDUCE, 22]
1488+};
1489+table[35] = {
1490+  2: 13,
1491+  4: 60,
1492+  6: 3,
1493+  7: [SHIFT, 4],
1494+  8: [SHIFT, 5],
1495+  9: 6,
1496+  10: [SHIFT, 7],
1497+  13: [SHIFT, 10],
1498+  14: [SHIFT, 8],
1499+  15: [SHIFT, 58],
1500+  19: [SHIFT, 9],
1501+  23: [SHIFT, 11],
1502+  24: 59,
1503+  25: 12,
1504+  26: [SHIFT, 16],
1505+  28: [SHIFT, 17],
1506+  29: [SHIFT, 61],
1507+  32: [SHIFT, 14],
1508+  34: [SHIFT, 15],
1509+  36: [SHIFT, 18]
1510+};
1511+table[36] = {
1512+  5: [REDUCE, 27],
1513+  11: [REDUCE, 27],
1514+  12: [REDUCE, 27],
1515+  13: [REDUCE, 27],
1516+  15: [REDUCE, 27],
1517+  16: [REDUCE, 27],
1518+  17: [REDUCE, 27],
1519+  18: [REDUCE, 27],
1520+  19: [REDUCE, 27],
1521+  20: [REDUCE, 27],
1522+  21: [REDUCE, 27],
1523+  22: [REDUCE, 27],
1524+  30: [REDUCE, 27],
1525+  31: [REDUCE, 27]
1526+};
1527+table[37] = {36: [SHIFT, 38]};
1528+table[38] = {32: [SHIFT, 62]};
1529+table[39] = {34: [SHIFT, 63]};
1530+table[40] = {26: [SHIFT, 64]};
1531+table[41] = {28: [SHIFT, 65]};
1532+table[42] = {37: [SHIFT, 66]};
1533+table[43] = {
1534+  5: [REDUCE, 7],
1535+  11: [REDUCE, 7],
1536+  12: [REDUCE, 7],
1537+  13: [REDUCE, 7],
1538+  15: [REDUCE, 7],
1539+  16: [REDUCE, 7],
1540+  17: [REDUCE, 7],
1541+  18: [REDUCE, 7],
1542+  19: [REDUCE, 7],
1543+  20: [REDUCE, 7],
1544+  21: [REDUCE, 7],
1545+  22: [REDUCE, 7],
1546+  30: [REDUCE, 7],
1547+  31: [REDUCE, 7]
1548+};
1549+table[44] = {
1550+  5: [REDUCE, 8],
1551+  11: [SHIFT, 20],
1552+  12: [REDUCE, 8],
1553+  13: [SHIFT, 22],
1554+  15: [REDUCE, 8],
1555+  16: [SHIFT, 23],
1556+  17: [SHIFT, 24],
1557+  18: [SHIFT, 25],
1558+  19: [SHIFT, 26],
1559+  20: [SHIFT, 27],
1560+  21: [SHIFT, 28],
1561+  22: [SHIFT, 29],
1562+  30: [REDUCE, 8],
1563+  31: [REDUCE, 8]
1564+};
1565+table[45] = {
1566+  5: [REDUCE, 9],
1567+  11: [SHIFT, 20],
1568+  12: [REDUCE, 9],
1569+  13: [REDUCE, 9],
1570+  15: [REDUCE, 9],
1571+  16: [REDUCE, 9],
1572+  17: [REDUCE, 9],
1573+  18: [REDUCE, 9],
1574+  19: [REDUCE, 9],
1575+  20: [SHIFT, 27],
1576+  21: [SHIFT, 28],
1577+  22: [SHIFT, 29],
1578+  30: [REDUCE, 9],
1579+  31: [REDUCE, 9]
1580+};
1581+table[46] = {
1582+  2: 13,
1583+  4: 67,
1584+  6: 3,
1585+  7: [SHIFT, 4],
1586+  8: [SHIFT, 5],
1587+  9: 6,
1588+  10: [SHIFT, 7],
1589+  13: [SHIFT, 10],
1590+  14: [SHIFT, 8],
1591+  19: [SHIFT, 9],
1592+  23: [SHIFT, 11],
1593+  25: 12,
1594+  26: [SHIFT, 16],
1595+  28: [SHIFT, 17],
1596+  32: [SHIFT, 14],
1597+  34: [SHIFT, 15],
1598+  36: [SHIFT, 18]
1599+};
1600+table[47] = {
1601+  2: 13,
1602+  4: 68,
1603+  6: 3,
1604+  7: [SHIFT, 4],
1605+  8: [SHIFT, 5],
1606+  9: 6,
1607+  10: [SHIFT, 7],
1608+  13: [SHIFT, 10],
1609+  14: [SHIFT, 8],
1610+  19: [SHIFT, 9],
1611+  23: [SHIFT, 11],
1612+  25: 12,
1613+  26: [SHIFT, 16],
1614+  28: [SHIFT, 17],
1615+  32: [SHIFT, 14],
1616+  34: [SHIFT, 15],
1617+  36: [SHIFT, 18]
1618+};
1619+table[48] = {
1620+  5: [REDUCE, 16],
1621+  11: [SHIFT, 20],
1622+  12: [REDUCE, 16],
1623+  13: [SHIFT, 22],
1624+  15: [REDUCE, 16],
1625+  16: [REDUCE, 16],
1626+  17: [REDUCE, 16],
1627+  18: [REDUCE, 16],
1628+  19: [SHIFT, 26],
1629+  20: [SHIFT, 27],
1630+  21: [SHIFT, 28],
1631+  22: [SHIFT, 29],
1632+  30: [REDUCE, 16],
1633+  31: [REDUCE, 16]
1634+};
1635+table[49] = {
1636+  2: 13,
1637+  4: 69,
1638+  6: 3,
1639+  7: [SHIFT, 4],
1640+  8: [SHIFT, 5],
1641+  9: 6,
1642+  10: [SHIFT, 7],
1643+  13: [SHIFT, 10],
1644+  14: [SHIFT, 8],
1645+  19: [SHIFT, 9],
1646+  23: [SHIFT, 11],
1647+  25: 12,
1648+  26: [SHIFT, 16],
1649+  28: [SHIFT, 17],
1650+  32: [SHIFT, 14],
1651+  34: [SHIFT, 15],
1652+  36: [SHIFT, 18]
1653+};
1654+table[50] = {
1655+  5: [REDUCE, 15],
1656+  11: [SHIFT, 20],
1657+  12: [REDUCE, 15],
1658+  13: [SHIFT, 22],
1659+  15: [REDUCE, 15],
1660+  16: [REDUCE, 15],
1661+  17: [REDUCE, 15],
1662+  18: [REDUCE, 15],
1663+  19: [SHIFT, 26],
1664+  20: [SHIFT, 27],
1665+  21: [SHIFT, 28],
1666+  22: [SHIFT, 29],
1667+  30: [REDUCE, 15],
1668+  31: [REDUCE, 15]
1669+};
1670+table[51] = {
1671+  5: [REDUCE, 14],
1672+  11: [SHIFT, 20],
1673+  12: [REDUCE, 14],
1674+  13: [SHIFT, 22],
1675+  15: [REDUCE, 14],
1676+  16: [SHIFT, 23],
1677+  17: [SHIFT, 24],
1678+  18: [REDUCE, 14],
1679+  19: [SHIFT, 26],
1680+  20: [SHIFT, 27],
1681+  21: [SHIFT, 28],
1682+  22: [SHIFT, 29],
1683+  30: [REDUCE, 14],
1684+  31: [REDUCE, 14]
1685+};
1686+table[52] = {
1687+  5: [REDUCE, 17],
1688+  11: [SHIFT, 20],
1689+  12: [REDUCE, 17],
1690+  13: [REDUCE, 17],
1691+  15: [REDUCE, 17],
1692+  16: [REDUCE, 17],
1693+  17: [REDUCE, 17],
1694+  18: [REDUCE, 17],
1695+  19: [REDUCE, 17],
1696+  20: [SHIFT, 27],
1697+  21: [SHIFT, 28],
1698+  22: [SHIFT, 29],
1699+  30: [REDUCE, 17],
1700+  31: [REDUCE, 17]
1701+};
1702+table[53] = {
1703+  5: [REDUCE, 18],
1704+  11: [SHIFT, 20],
1705+  12: [REDUCE, 18],
1706+  13: [REDUCE, 18],
1707+  15: [REDUCE, 18],
1708+  16: [REDUCE, 18],
1709+  17: [REDUCE, 18],
1710+  18: [REDUCE, 18],
1711+  19: [REDUCE, 18],
1712+  20: [REDUCE, 18],
1713+  21: [REDUCE, 18],
1714+  22: [SHIFT, 29],
1715+  30: [REDUCE, 18],
1716+  31: [REDUCE, 18]
1717+};
1718+table[54] = {
1719+  5: [REDUCE, 19],
1720+  11: [SHIFT, 20],
1721+  12: [REDUCE, 19],
1722+  13: [REDUCE, 19],
1723+  15: [REDUCE, 19],
1724+  16: [REDUCE, 19],
1725+  17: [REDUCE, 19],
1726+  18: [REDUCE, 19],
1727+  19: [REDUCE, 19],
1728+  20: [REDUCE, 19],
1729+  21: [REDUCE, 19],
1730+  22: [SHIFT, 29],
1731+  30: [REDUCE, 19],
1732+  31: [REDUCE, 19]
1733+};
1734+table[55] = {
1735+  5: [REDUCE, 20],
1736+  11: [SHIFT, 20],
1737+  12: [REDUCE, 20],
1738+  13: [REDUCE, 20],
1739+  15: [REDUCE, 20],
1740+  16: [REDUCE, 20],
1741+  17: [REDUCE, 20],
1742+  18: [REDUCE, 20],
1743+  19: [REDUCE, 20],
1744+  20: [REDUCE, 20],
1745+  21: [REDUCE, 20],
1746+  22: [REDUCE, 20],
1747+  30: [REDUCE, 20],
1748+  31: [REDUCE, 20]
1749+};
1750+table[56] = {
1751+  5: [REDUCE, 37],
1752+  11: [REDUCE, 37],
1753+  12: [REDUCE, 37],
1754+  13: [REDUCE, 37],
1755+  15: [REDUCE, 37],
1756+  16: [REDUCE, 37],
1757+  17: [REDUCE, 37],
1758+  18: [REDUCE, 37],
1759+  19: [REDUCE, 37],
1760+  20: [REDUCE, 37],
1761+  21: [REDUCE, 37],
1762+  22: [REDUCE, 37],
1763+  30: [REDUCE, 37],
1764+  31: [REDUCE, 37],
1765+  33: [REDUCE, 37]
1766+};
1767+table[57] = {
1768+  5: [REDUCE, 10],
1769+  11: [REDUCE, 10],
1770+  12: [REDUCE, 10],
1771+  13: [REDUCE, 10],
1772+  15: [REDUCE, 10],
1773+  16: [REDUCE, 10],
1774+  17: [REDUCE, 10],
1775+  18: [REDUCE, 10],
1776+  19: [REDUCE, 10],
1777+  20: [REDUCE, 10],
1778+  21: [REDUCE, 10],
1779+  22: [REDUCE, 10],
1780+  30: [REDUCE, 10],
1781+  31: [REDUCE, 10]
1782+};
1783+table[58] = {
1784+  5: [REDUCE, 23],
1785+  11: [REDUCE, 23],
1786+  12: [REDUCE, 23],
1787+  13: [REDUCE, 23],
1788+  15: [REDUCE, 23],
1789+  16: [REDUCE, 23],
1790+  17: [REDUCE, 23],
1791+  18: [REDUCE, 23],
1792+  19: [REDUCE, 23],
1793+  20: [REDUCE, 23],
1794+  21: [REDUCE, 23],
1795+  22: [REDUCE, 23],
1796+  30: [REDUCE, 23],
1797+  31: [REDUCE, 23]
1798+};
1799+table[59] = {15: [SHIFT, 70], 30: [SHIFT, 71], 31: [SHIFT, 72]};
1800+table[60] = {
1801+  11: [SHIFT, 20],
1802+  12: [SHIFT, 21],
1803+  13: [SHIFT, 22],
1804+  15: [REDUCE, 32],
1805+  16: [SHIFT, 23],
1806+  17: [SHIFT, 24],
1807+  18: [SHIFT, 25],
1808+  19: [SHIFT, 26],
1809+  20: [SHIFT, 27],
1810+  21: [SHIFT, 28],
1811+  22: [SHIFT, 29],
1812+  30: [REDUCE, 32],
1813+  31: [REDUCE, 32]
1814+};
1815+table[61] = {15: [REDUCE, 33], 30: [REDUCE, 33], 31: [REDUCE, 33]};
1816+table[62] = {37: [SHIFT, 73]};
1817+table[63] = {
1818+  5: [REDUCE, 39],
1819+  11: [REDUCE, 39],
1820+  12: [REDUCE, 39],
1821+  13: [REDUCE, 39],
1822+  15: [REDUCE, 39],
1823+  16: [REDUCE, 39],
1824+  17: [REDUCE, 39],
1825+  18: [REDUCE, 39],
1826+  19: [REDUCE, 39],
1827+  20: [REDUCE, 39],
1828+  21: [REDUCE, 39],
1829+  22: [REDUCE, 39],
1830+  30: [REDUCE, 39],
1831+  31: [REDUCE, 39],
1832+  35: [REDUCE, 39],
1833+  38: [REDUCE, 39]
1834+};
1835+table[64] = {
1836+  5: [REDUCE, 29],
1837+  11: [REDUCE, 29],
1838+  12: [REDUCE, 29],
1839+  13: [REDUCE, 29],
1840+  15: [REDUCE, 29],
1841+  16: [REDUCE, 29],
1842+  17: [REDUCE, 29],
1843+  18: [REDUCE, 29],
1844+  19: [REDUCE, 29],
1845+  20: [REDUCE, 29],
1846+  21: [REDUCE, 29],
1847+  22: [REDUCE, 29],
1848+  30: [REDUCE, 29],
1849+  31: [REDUCE, 29]
1850+};
1851+table[65] = {
1852+  5: [REDUCE, 31],
1853+  11: [REDUCE, 31],
1854+  12: [REDUCE, 31],
1855+  13: [REDUCE, 31],
1856+  15: [REDUCE, 31],
1857+  16: [REDUCE, 31],
1858+  17: [REDUCE, 31],
1859+  18: [REDUCE, 31],
1860+  19: [REDUCE, 31],
1861+  20: [REDUCE, 31],
1862+  21: [REDUCE, 31],
1863+  22: [REDUCE, 31],
1864+  30: [REDUCE, 31],
1865+  31: [REDUCE, 31]
1866+};
1867+table[66] = {
1868+  5: [REDUCE, 41],
1869+  11: [REDUCE, 41],
1870+  12: [REDUCE, 41],
1871+  13: [REDUCE, 41],
1872+  15: [REDUCE, 41],
1873+  16: [REDUCE, 41],
1874+  17: [REDUCE, 41],
1875+  18: [REDUCE, 41],
1876+  19: [REDUCE, 41],
1877+  20: [REDUCE, 41],
1878+  21: [REDUCE, 41],
1879+  22: [REDUCE, 41],
1880+  30: [REDUCE, 41],
1881+  31: [REDUCE, 41],
1882+  32: [REDUCE, 41],
1883+  36: [REDUCE, 41]
1884+};
1885+table[67] = {
1886+  5: [REDUCE, 11],
1887+  11: [SHIFT, 20],
1888+  12: [REDUCE, 11],
1889+  13: [SHIFT, 22],
1890+  15: [REDUCE, 11],
1891+  16: [REDUCE, 11],
1892+  17: [REDUCE, 11],
1893+  18: [REDUCE, 11],
1894+  19: [SHIFT, 26],
1895+  20: [SHIFT, 27],
1896+  21: [SHIFT, 28],
1897+  22: [SHIFT, 29],
1898+  30: [REDUCE, 11],
1899+  31: [REDUCE, 11]
1900+};
1901+table[68] = {
1902+  5: [REDUCE, 13],
1903+  11: [SHIFT, 20],
1904+  12: [REDUCE, 13],
1905+  13: [SHIFT, 22],
1906+  15: [REDUCE, 13],
1907+  16: [REDUCE, 13],
1908+  17: [REDUCE, 13],
1909+  18: [REDUCE, 13],
1910+  19: [SHIFT, 26],
1911+  20: [SHIFT, 27],
1912+  21: [SHIFT, 28],
1913+  22: [SHIFT, 29],
1914+  30: [REDUCE, 13],
1915+  31: [REDUCE, 13]
1916+};
1917+table[69] = {
1918+  5: [REDUCE, 12],
1919+  11: [SHIFT, 20],
1920+  12: [REDUCE, 12],
1921+  13: [SHIFT, 22],
1922+  15: [REDUCE, 12],
1923+  16: [REDUCE, 12],
1924+  17: [REDUCE, 12],
1925+  18: [REDUCE, 12],
1926+  19: [SHIFT, 26],
1927+  20: [SHIFT, 27],
1928+  21: [SHIFT, 28],
1929+  22: [SHIFT, 29],
1930+  30: [REDUCE, 12],
1931+  31: [REDUCE, 12]
1932+};
1933+table[70] = {
1934+  5: [REDUCE, 24],
1935+  11: [REDUCE, 24],
1936+  12: [REDUCE, 24],
1937+  13: [REDUCE, 24],
1938+  15: [REDUCE, 24],
1939+  16: [REDUCE, 24],
1940+  17: [REDUCE, 24],
1941+  18: [REDUCE, 24],
1942+  19: [REDUCE, 24],
1943+  20: [REDUCE, 24],
1944+  21: [REDUCE, 24],
1945+  22: [REDUCE, 24],
1946+  30: [REDUCE, 24],
1947+  31: [REDUCE, 24]
1948+};
1949+table[71] = {
1950+  2: 13,
1951+  4: 74,
1952+  6: 3,
1953+  7: [SHIFT, 4],
1954+  8: [SHIFT, 5],
1955+  9: 6,
1956+  10: [SHIFT, 7],
1957+  12: [SHIFT, 21],
1958+  13: [SHIFT, 10],
1959+  14: [SHIFT, 8],
1960+  19: [SHIFT, 9],
1961+  23: [SHIFT, 11],
1962+  25: 12,
1963+  26: [SHIFT, 16],
1964+  28: [SHIFT, 17],
1965+  32: [SHIFT, 14],
1966+  34: [SHIFT, 15],
1967+  36: [SHIFT, 18]
1968+};
1969+table[72] = {
1970+  2: 13,
1971+  4: 75,
1972+  6: 3,
1973+  7: [SHIFT, 4],
1974+  8: [SHIFT, 5],
1975+  9: 6,
1976+  10: [SHIFT, 7],
1977+  12: [SHIFT, 21],
1978+  13: [SHIFT, 10],
1979+  14: [SHIFT, 8],
1980+  19: [SHIFT, 9],
1981+  23: [SHIFT, 11],
1982+  25: 12,
1983+  26: [SHIFT, 16],
1984+  28: [SHIFT, 17],
1985+  32: [SHIFT, 14],
1986+  34: [SHIFT, 15],
1987+  36: [SHIFT, 18]
1988+};
1989+table[73] = {
1990+  5: [REDUCE, 42],
1991+  11: [REDUCE, 42],
1992+  12: [REDUCE, 42],
1993+  13: [REDUCE, 42],
1994+  15: [REDUCE, 42],
1995+  16: [REDUCE, 42],
1996+  17: [REDUCE, 42],
1997+  18: [REDUCE, 42],
1998+  19: [REDUCE, 42],
1999+  20: [REDUCE, 42],
2000+  21: [REDUCE, 42],
2001+  22: [REDUCE, 42],
2002+  30: [REDUCE, 42],
2003+  31: [REDUCE, 42],
2004+  32: [REDUCE, 42],
2005+  36: [REDUCE, 42]
2006+};
2007+table[74] = {
2008+  11: [SHIFT, 20],
2009+  12: [SHIFT, 21],
2010+  13: [SHIFT, 22],
2011+  15: [REDUCE, 34],
2012+  16: [SHIFT, 23],
2013+  17: [SHIFT, 24],
2014+  18: [SHIFT, 25],
2015+  19: [SHIFT, 26],
2016+  20: [SHIFT, 27],
2017+  21: [SHIFT, 28],
2018+  22: [SHIFT, 29],
2019+  30: [REDUCE, 34],
2020+  31: [REDUCE, 34]
2021+};
2022+table[75] = {
2023+  11: [SHIFT, 20],
2024+  12: [SHIFT, 21],
2025+  13: [SHIFT, 22],
2026+  15: [REDUCE, 35],
2027+  16: [SHIFT, 23],
2028+  17: [SHIFT, 24],
2029+  18: [SHIFT, 25],
2030+  19: [SHIFT, 26],
2031+  20: [SHIFT, 27],
2032+  21: [SHIFT, 28],
2033+  22: [SHIFT, 29],
2034+  30: [REDUCE, 35],
2035+  31: [REDUCE, 35]
2036+};
2037 const ACTION_TABLE = table;
2038 
2039 
2040-
2041 let Parser = (function () {
2042   let parser = {
2043     lexer: undefined,
2044     Parser: undefined,
2045     trace: function trace() {},
2046     yy: {},
2047-    symbols: {
2048-      "error": 2,
2049-      "expressions": 3,
2050-      "expression": 4,
2051-      "EOF": 5,
2052-      "variableSequence": 6,
2053-      "TIME_AMPM": 7,
2054-      "TIME_24": 8,
2055-      "number": 9,
2056-      "STRING": 10,
2057-      "&": 11,
2058-      "=": 12,
2059-      "+": 13,
2060-      "(": 14,
2061-      ")": 15,
2062-      "<": 16,
2063-      ">": 17,
2064-      "NOT": 18,
2065-      "-": 19,
2066-      "*": 20,
2067-      "/": 21,
2068-      "^": 22,
2069-      "FUNCTION": 23,
2070-      "expseq": 24,
2071-      "cell": 25,
2072-      "FIXEDCELL": 26,
2073-      ":": 27,
2074-      "CELL": 28,
2075-      "ARRAY": 29,
2076-      ";": 30,
2077-      ",": 31,
2078-      "VARIABLE": 32,
2079-      "DECIMAL": 33,
2080-      "NUMBER": 34,
2081-      "%": 35,
2082-      "#": 36,
2083-      "!": 37,
2084-      "$accept": 0,
2085-      "$end": 1
2086-    },
2087-    terminals: {
2088-      5: "EOF",
2089-      7: "TIME_AMPM",
2090-      8: "TIME_24",
2091-      10: "STRING",
2092-      11: "&",
2093-      12: "=",
2094-      13: "+",
2095-      14: "(",
2096-      15: ")",
2097-      16: "<",
2098-      17: ">",
2099-      18: "NOT",
2100-      19: "-",
2101-      20: "*",
2102-      21: "/",
2103-      22: "^",
2104-      23: "FUNCTION",
2105-      26: "FIXEDCELL",
2106-      27: ":",
2107-      28: "CELL",
2108-      29: "ARRAY",
2109-      30: ";",
2110-      31: ",",
2111-      32: "VARIABLE",
2112-      33: "DECIMAL",
2113-      34: "NUMBER",
2114-      35: "%",
2115-      36: "#",
2116-      37: "!"
2117-    },
2118     /**
2119      * Maps a ProductionRule to the appropriate number of previous tokens to use in a reduction action.
2120      */
2121@@ -1295,7 +1647,7 @@ let Parser = (function () {
2122       }
2123     },
2124     table: ACTION_TABLE,
2125-    defaultActions: ObjectFromPairs.of([19, [LexActions.REDUCE, 1]]),
2126+    defaultActions: {19: [REDUCE, 1]},
2127     parseError: function parseError(str, hash) {
2128       if (hash.recoverable) {
2129         this.trace(str);
2130@@ -1363,7 +1715,7 @@ let Parser = (function () {
2131         let token = lexer.lex() || EOF;
2132         // if token isn't its numeric value, convert
2133         if (typeof token !== 'number') {
2134-          token = self.symbols[token] || token;
2135+          token = SYMBOL_NAME_TO_INDEX[token] || token;
2136         }
2137         return token;
2138       }
2139@@ -1431,21 +1783,21 @@ let Parser = (function () {
2140             let expectedIndexes = [];
2141             let tableState = table[state];
2142             for (p in table[state]) {
2143-              if (this.terminals[p] && p > TERROR) {
2144-                expected.push(this.terminals[p]);
2145+              if (SYMBOL_INDEX_TO_NAME[p] && p > TERROR) {
2146+                expected.push(SYMBOL_INDEX_TO_NAME[p]);
2147                 expectedIndexes.push(p);
2148               }
2149             }
2150             if (lexer.showPosition) {
2151-              errStr = 'Parse error on line ' + (yylineno + 1) + ":\n" + lexer.showPosition() + "\nExpecting " + expected.join(', ') + ", got '" + (this.terminals[symbol] || symbol) + "'";
2152+              errStr = 'Parse error on line ' + (yylineno + 1) + ":\n" + lexer.showPosition() + "\nExpecting " + expected.join(', ') + ", got '" + (SYMBOL_INDEX_TO_NAME[symbol] || symbol) + "'";
2153             } else {
2154               errStr = 'Parse error on line ' + (yylineno + 1) + ": Unexpected " +
2155                 (symbol == EOF ? "end of input" :
2156-                  ("'" + (this.terminals[symbol] || symbol) + "'"));
2157+                  ("'" + (SYMBOL_INDEX_TO_NAME[symbol] || symbol) + "'"));
2158             }
2159             this.parseError(errStr, {
2160               text: lexer.match,
2161-              token: this.terminals[symbol] || symbol,
2162+              token: SYMBOL_INDEX_TO_NAME[symbol] || symbol,
2163               line: lexer.yylineno,
2164               loc: yyloc,
2165               expected: expected,
2166@@ -1495,7 +1847,7 @@ let Parser = (function () {
2167         //   Reduce: enough tokens have been gathered to reduce input through evaluation.
2168         //   Accept: return.
2169         switch (action[0]) {
2170-          case LexActions.SHIFT: // Shift
2171+          case SHIFT: // Shift
2172             stack.push(symbol);
2173             semanticValueStack.push(lexer.yytext);
2174             locationStack.push(lexer.yylloc);
2175@@ -1521,7 +1873,7 @@ let Parser = (function () {
2176             }
2177             break;
2178 
2179-          case LexActions.REDUCE: // Reduce
2180+          case REDUCE: // Reduce
2181             let currentProduction : ReductionPair = this.productions[action[1]];
2182 
2183             let lengthToReduceStackBy = currentProduction.getLengthToReduceStackBy();
2184@@ -1560,7 +1912,7 @@ let Parser = (function () {
2185             stack.push(newState);
2186             break;
2187 
2188-          case LexActions.ACCEPT:
2189+          case ACCEPT:
2190             // Accept
2191             return true;
2192         }
2193diff --git a/src/Utilities/ObjectFromPairs.ts b/src/Utilities/ObjectFromPairs.ts
2194deleted file mode 100644
2195index 1377913..0000000
2196--- a/src/Utilities/ObjectFromPairs.ts
2197+++ /dev/null
2198@@ -1,38 +0,0 @@
2199-/**
2200- * Static class for building objects using variables as keys. Mostly used in situations where we want to build objects
2201- * with similar key structures inside of arrays.
2202- * ```
2203- * let m = "key";
2204- * let n = "another"
2205- * let x = [
2206- *   ObjectFromPairs.of([
2207- *     m, 1,
2208- *     n, 2
2209- *   ]);
2210- * ]
2211- * ```
2212- * The example above would result in: `{"key": 1, "another": 2}`.
2213- * NOTE: This code does not perform well, and should be used sparingly.
2214- */
2215-class ObjectFromPairs {
2216-  /**
2217-   * Creates an object from pairs.
2218-   * @param values - Even number of values, where odd-indexed values will be used as keys, and even-indexed values will
2219-   * be used as values in the object. If function is given odd number of values the last value will still be used as a
2220-   * key for which the value will be undefined. Use at your own risk.
2221-   * @returns {{}}
2222-   */
2223-  static of(values : Array<any>) {
2224-    let o = {};
2225-    for (let i = 0; i < values.length - 1; i = i + 2) {
2226-      if (i % 2 === 0) {
2227-        o[values[i]] = values[i+1];
2228-      }
2229-    }
2230-    return o;
2231-  }
2232-}
2233-
2234-export {
2235-  ObjectFromPairs
2236-}
2237\ No newline at end of file
2238diff --git a/tests/Utilities/ObjectFromPairsTest.ts b/tests/Utilities/ObjectFromPairsTest.ts
2239deleted file mode 100644
2240index f1cc8d2..0000000
2241--- a/tests/Utilities/ObjectFromPairsTest.ts
2242+++ /dev/null
2243@@ -1,13 +0,0 @@
2244-import {
2245-  assertEquals,
2246-  test
2247-} from "../Utils/Asserts";
2248-import {
2249-  ObjectFromPairs
2250-} from "../../src/Utilities/ObjectFromPairs";
2251-
2252-test("ObjectFromPairs.of", function () {
2253-  assertEquals(ObjectFromPairs.of(["a", 1]), {a:1});
2254-  var key = "key";
2255-  assertEquals(ObjectFromPairs.of([key, 1]), {"key":1});
2256-});