spreadsheet
typeScript/javascript spreadsheet parser, with formulas.
git clone https://git.vogt.world/spreadsheet.git
Log | Files | README.md
← Commit log
commit
message
[all] checking in progress
author
Ben Vogt <[email protected]>
date
2018-02-09 23:48:19
stats
18 file(s) changed, 1687 insertions(+), 1688 deletions(-)
files
.gitignore
dist/Cell.js
dist/Errors.js
dist/Formulas/Math.js
dist/Parser/DataStore.js
dist/Parser/Parser.js
dist/Parser/ParserConstants.js
dist/Sheet.js
dist/Utilities/ArgsChecker.js
dist/Utilities/CriteriaFunctionFactory.js
dist/Utilities/DateRegExBuilder.js
dist/Utilities/Filter.js
dist/Utilities/MoreUtils.js
dist/Utilities/ObjectBuilder.js
dist/Utilities/Serializer.js
dist/Utilities/TypeConverter.js
src/Parser/Parser.ts
src/Parser/ParserConstants.ts
   1diff --git a/.gitignore b/.gitignore
   2index 04c7580..b0cc3a1 100644
   3--- a/.gitignore
   4+++ b/.gitignore
   5@@ -9,5 +9,6 @@
   6 node_modules/
   7 build/
   8 npm-debug.log
   9+package-lock.json
  10 output/
  11 test_output
  12diff --git a/dist/Cell.js b/dist/Cell.js
  13index c88c5b9..ee91a8b 100644
  14--- a/dist/Cell.js
  15+++ b/dist/Cell.js
  16@@ -15,7 +15,7 @@ exports.CELL_ID_ERROR = CELL_ID_ERROR;
  17 /**
  18  * Represents a cell id error, and is thrown when a cells id does not conform to A1 notation.
  19  */
  20-var CellIdError = (function (_super) {
  21+var CellIdError = /** @class */ (function (_super) {
  22     __extends(CellIdError, _super);
  23     function CellIdError(msg) {
  24         var _this = _super.call(this) || this;
  25@@ -30,7 +30,7 @@ exports.CellIdError = CellIdError;
  26  * Cell represents a cell in the spreadsheet. It contains a nullable rawFormulaText, and a value, which is not nullable unless
  27  * the parsing of the rawFormulaText results in an error.
  28  */
  29-var Cell = (function () {
  30+var Cell = /** @class */ (function () {
  31     /**
  32      * Creates an empty cell with an id.
  33      * @param id key of the cell in A1-format.
  34diff --git a/dist/Errors.js b/dist/Errors.js
  35index b6bc269..5635e43 100644
  36--- a/dist/Errors.js
  37+++ b/dist/Errors.js
  38@@ -26,7 +26,7 @@ var NA_ERROR = "#N/A";
  39 exports.NA_ERROR = NA_ERROR;
  40 var PARSE_ERROR = "#ERROR";
  41 exports.PARSE_ERROR = PARSE_ERROR;
  42-var NullError = (function (_super) {
  43+var NullError = /** @class */ (function (_super) {
  44     __extends(NullError, _super);
  45     function NullError(message) {
  46         var _this = _super.call(this, message) || this;
  47@@ -36,7 +36,7 @@ var NullError = (function (_super) {
  48     return NullError;
  49 }(Error));
  50 exports.NullError = NullError;
  51-var DivZeroError = (function (_super) {
  52+var DivZeroError = /** @class */ (function (_super) {
  53     __extends(DivZeroError, _super);
  54     function DivZeroError(message) {
  55         var _this = _super.call(this, message) || this;
  56@@ -46,7 +46,7 @@ var DivZeroError = (function (_super) {
  57     return DivZeroError;
  58 }(Error));
  59 exports.DivZeroError = DivZeroError;
  60-var ValueError = (function (_super) {
  61+var ValueError = /** @class */ (function (_super) {
  62     __extends(ValueError, _super);
  63     function ValueError(message) {
  64         var _this = _super.call(this, message) || this;
  65@@ -56,7 +56,7 @@ var ValueError = (function (_super) {
  66     return ValueError;
  67 }(Error));
  68 exports.ValueError = ValueError;
  69-var RefError = (function (_super) {
  70+var RefError = /** @class */ (function (_super) {
  71     __extends(RefError, _super);
  72     function RefError(message) {
  73         var _this = _super.call(this, message) || this;
  74@@ -66,7 +66,7 @@ var RefError = (function (_super) {
  75     return RefError;
  76 }(Error));
  77 exports.RefError = RefError;
  78-var NameError = (function (_super) {
  79+var NameError = /** @class */ (function (_super) {
  80     __extends(NameError, _super);
  81     function NameError(message) {
  82         var _this = _super.call(this, message) || this;
  83@@ -76,7 +76,7 @@ var NameError = (function (_super) {
  84     return NameError;
  85 }(Error));
  86 exports.NameError = NameError;
  87-var NumError = (function (_super) {
  88+var NumError = /** @class */ (function (_super) {
  89     __extends(NumError, _super);
  90     function NumError(message) {
  91         var _this = _super.call(this, message) || this;
  92@@ -86,7 +86,7 @@ var NumError = (function (_super) {
  93     return NumError;
  94 }(Error));
  95 exports.NumError = NumError;
  96-var NAError = (function (_super) {
  97+var NAError = /** @class */ (function (_super) {
  98     __extends(NAError, _super);
  99     function NAError(message) {
 100         var _this = _super.call(this, message) || this;
 101@@ -96,7 +96,7 @@ var NAError = (function (_super) {
 102     return NAError;
 103 }(Error));
 104 exports.NAError = NAError;
 105-var ParseError = (function (_super) {
 106+var ParseError = /** @class */ (function (_super) {
 107     __extends(ParseError, _super);
 108     function ParseError(message) {
 109         var _this = _super.call(this, message) || this;
 110diff --git a/dist/Formulas/Math.js b/dist/Formulas/Math.js
 111index 5a348a2..e082514 100644
 112--- a/dist/Formulas/Math.js
 113+++ b/dist/Formulas/Math.js
 114@@ -816,7 +816,7 @@ exports.SUMSQ = SUMSQ;
 115 var MULTIPLY = function (factor1, factor2) {
 116     ArgsChecker_1.ArgsChecker.checkLength(arguments, 2, "MULTIPLY");
 117     var x = TypeConverter_1.TypeConverter.firstValueAsNumber(factor1);
 118-    var y = TypeConverter_1.TypeConverter.firstValueAsNumber(factor1);
 119+    var y = TypeConverter_1.TypeConverter.firstValueAsNumber(factor2);
 120     return x * y;
 121 };
 122 exports.MULTIPLY = MULTIPLY;
 123@@ -935,7 +935,14 @@ var DIVIDE = function (dividend, divisor) {
 124     if (y < 0) {
 125         throw new Errors_1.DivZeroError("Function DIVIDE parameter 2 cannot be zero.");
 126     }
 127-    return x / y;
 128+    var result = x / y;
 129+    if (result == Infinity) {
 130+        throw new Errors_1.DivZeroError("Evaluation caused divide by zero error.");
 131+    }
 132+    else if (isNaN(result)) {
 133+        throw new Errors_1.DivZeroError("Evaluation caused divide by zero error.");
 134+    }
 135+    return result;
 136 };
 137 exports.DIVIDE = DIVIDE;
 138 /**
 139diff --git a/dist/Parser/DataStore.js b/dist/Parser/DataStore.js
 140new file mode 100644
 141index 0000000..8aae0a4
 142--- /dev/null
 143+++ b/dist/Parser/DataStore.js
 144@@ -0,0 +1,74 @@
 145+"use strict";
 146+exports.__esModule = true;
 147+/**
 148+ * Holds cell values, and allows for the updating and manipulation of those cells.
 149+ */
 150+var Cell_1 = require("../Cell");
 151+/**
 152+ * Cell DataStore that stores cells in memory.
 153+ */
 154+var DataStore = /** @class */ (function () {
 155+    function DataStore() {
 156+        /**
 157+         * Holds cells inside an object for quick access.
 158+         */
 159+        this.data = {};
 160+    }
 161+    DataStore.prototype.getCell = function (key) {
 162+        if (key in this.data) {
 163+            return this.data[key];
 164+        }
 165+        return new Cell_1.Cell(key);
 166+    };
 167+    DataStore.prototype.addCell = function (cell) {
 168+        var cellId = cell.getId();
 169+        if (!(cellId in this.data)) {
 170+            this.data[cellId] = cell;
 171+        }
 172+        else {
 173+            this.getCell(cellId).updateDependencies(cell.getDependencies());
 174+            this.getCell(cellId).setValue(cell.getValue());
 175+            this.getCell(cellId).setError(cell.getError());
 176+        }
 177+        return this.getCell(cellId);
 178+    };
 179+    DataStore.prototype.getDependencies = function (id) {
 180+        var getDependencies = function (id) {
 181+            var filtered = [];
 182+            for (var key in this.data) {
 183+                var cell = this.data[key];
 184+                if (cell.dependencies) {
 185+                    if (cell.dependencies.indexOf(id) > -1) {
 186+                        filtered.push(cell);
 187+                    }
 188+                }
 189+            }
 190+            var deps = [];
 191+            filtered.forEach(function (cell) {
 192+                if (deps.indexOf(cell.id) === -1) {
 193+                    deps.push(cell.id);
 194+                }
 195+            });
 196+            return deps;
 197+        }.bind(this);
 198+        var allDependencies = [];
 199+        var getTotalDependencies = function (id) {
 200+            var deps = getDependencies(id);
 201+            if (deps.length) {
 202+                deps.forEach(function (refId) {
 203+                    if (allDependencies.indexOf(refId) === -1) {
 204+                        allDependencies.push(refId);
 205+                        var cell = this.getCell(refId);
 206+                        if (cell.getDependencies().length) {
 207+                            getTotalDependencies(refId);
 208+                        }
 209+                    }
 210+                }.bind(this));
 211+            }
 212+        }.bind(this);
 213+        getTotalDependencies(id);
 214+        return allDependencies;
 215+    };
 216+    return DataStore;
 217+}());
 218+exports.DataStore = DataStore;
 219diff --git a/dist/Parser/Parser.js b/dist/Parser/Parser.js
 220index 9dce17b..288f5f2 100644
 221--- a/dist/Parser/Parser.js
 222+++ b/dist/Parser/Parser.js
 223@@ -3,6 +3,9 @@ exports.__esModule = true;
 224 var Errors_1 = require("../Errors");
 225 var Formulas_1 = require("../Formulas");
 226 var ParserConstants_1 = require("./ParserConstants");
 227+var MoreUtils_1 = require("../Utilities/MoreUtils");
 228+var TypeConverter_1 = require("../Utilities/TypeConverter");
 229+var Math_1 = require("../Formulas/Math");
 230 var Parser = (function () {
 231     var parser = {
 232         lexer: undefined,
 233@@ -29,94 +32,85 @@ var Parser = (function () {
 234                     case 1 /* RETURN_LAST */:
 235                         return virtualStack[vsl - 1];
 236                     case 2 /* CALL_VARIABLE */:
 237-                        this.$ = sharedStateYY.handler.helper.callVariable.call(this, virtualStack[vsl]);
 238-                        break;
 239-                    case 3 /* TIME_CALL_TRUE */:
 240-                        this.$ = sharedStateYY.handler.time.call(sharedStateYY.obj, virtualStack[vsl], true);
 241-                        break;
 242-                    case 4 /* TIME_CALL */:
 243-                        this.$ = sharedStateYY.handler.time.call(sharedStateYY.obj, virtualStack[vsl]);
 244+                        this.$ = sharedStateYY.handler.callVariable.call(this, virtualStack[vsl]);
 245                         break;
 246                     case 5 /* AS_NUMBER */:
 247-                        this.$ = sharedStateYY.handler.helper.number(virtualStack[vsl]);
 248+                        this.$ = TypeConverter_1.TypeConverter.valueToNumber(virtualStack[vsl]);
 249                         break;
 250                     case 6 /* AS_STRING */:
 251-                        this.$ = sharedStateYY.handler.helper.string(virtualStack[vsl]);
 252+                        this.$ = MoreUtils_1.string(virtualStack[vsl]);
 253                         break;
 254                     case 7 /* AMPERSAND */:
 255-                        this.$ = sharedStateYY.handler.helper.specialMatch('&', virtualStack[vsl - 2], virtualStack[vsl]);
 256+                        this.$ = TypeConverter_1.TypeConverter.valueToString(virtualStack[vsl - 2]) + TypeConverter_1.TypeConverter.valueToString(virtualStack[vsl]);
 257                         break;
 258                     case 8 /* EQUALS */:
 259-                        this.$ = sharedStateYY.handler.helper.logicMatch('=', virtualStack[vsl - 2], virtualStack[vsl]);
 260+                        this.$ = Math_1.EQ(virtualStack[vsl - 2], virtualStack[vsl]);
 261                         break;
 262                     case 9 /* PLUS */:
 263-                        this.$ = sharedStateYY.handler.helper.mathMatch('+', virtualStack[vsl - 2], virtualStack[vsl]);
 264+                        this.$ = Math_1.SUM(virtualStack[vsl - 2], virtualStack[vsl]);
 265                         break;
 266                     case 10 /* LAST_NUMBER */:
 267-                        this.$ = sharedStateYY.handler.helper.number(virtualStack[vsl - 1]);
 268+                        this.$ = TypeConverter_1.TypeConverter.valueToNumber(virtualStack[vsl - 1]);
 269                         break;
 270                     case 11 /* LTE */:
 271-                        this.$ = sharedStateYY.handler.helper.logicMatch('<=', virtualStack[vsl - 3], virtualStack[vsl]);
 272+                        this.$ = Math_1.LTE(virtualStack[vsl - 3], virtualStack[vsl]);
 273                         break;
 274                     case 12 /* GTE */:
 275-                        this.$ = sharedStateYY.handler.helper.logicMatch('>=', virtualStack[vsl - 3], virtualStack[vsl]);
 276+                        this.$ = Math_1.GTE(virtualStack[vsl - 3], virtualStack[vsl]);
 277                         break;
 278                     case 13 /* NOT_EQ */:
 279-                        this.$ = sharedStateYY.handler.helper.logicMatch('<>', virtualStack[vsl - 3], virtualStack[vsl]);
 280-                        break;
 281-                    case 14 /* NOT */:
 282-                        this.$ = sharedStateYY.handler.helper.logicMatch('NOT', virtualStack[vsl - 2], virtualStack[vsl]);
 283+                        this.$ = !Math_1.EQ(virtualStack[vsl - 3], virtualStack[vsl]);
 284                         break;
 285                     case 15 /* GT */:
 286-                        this.$ = sharedStateYY.handler.helper.logicMatch('>', virtualStack[vsl - 2], virtualStack[vsl]);
 287+                        this.$ = Math_1.GT(virtualStack[vsl - 2], virtualStack[vsl]);
 288                         break;
 289                     case 16 /* LT */:
 290-                        this.$ = sharedStateYY.handler.helper.logicMatch('<', virtualStack[vsl - 2], virtualStack[vsl]);
 291+                        this.$ = Math_1.LT(virtualStack[vsl - 2], virtualStack[vsl]);
 292                         break;
 293                     case 17 /* MINUS */:
 294-                        this.$ = sharedStateYY.handler.helper.mathMatch('-', virtualStack[vsl - 2], virtualStack[vsl]);
 295+                        this.$ = Math_1.MINUS(virtualStack[vsl - 2], virtualStack[vsl]);
 296                         break;
 297                     case 18 /* MULTIPLY */:
 298-                        this.$ = sharedStateYY.handler.helper.mathMatch('*', virtualStack[vsl - 2], virtualStack[vsl]);
 299+                        this.$ = Math_1.MULTIPLY(virtualStack[vsl - 2], virtualStack[vsl]);
 300                         break;
 301                     case 19 /* DIVIDE */:
 302-                        this.$ = sharedStateYY.handler.helper.mathMatch('/', virtualStack[vsl - 2], virtualStack[vsl]);
 303+                        this.$ = Math_1.DIVIDE(virtualStack[vsl - 2], virtualStack[vsl]);
 304                         break;
 305                     case 20 /* TO_POWER */:
 306-                        this.$ = sharedStateYY.handler.helper.mathMatch('^', virtualStack[vsl - 2], virtualStack[vsl]);
 307+                        this.$ = Math_1.POWER(virtualStack[vsl - 2], virtualStack[vsl]);
 308                         break;
 309                     case 21 /* INVERT_NUM */:
 310-                        this.$ = sharedStateYY.handler.helper.numberInverted(virtualStack[vsl]);
 311+                        this.$ = TypeConverter_1.TypeConverter.valueToInvertedNumber(virtualStack[vsl]);
 312                         if (isNaN(this.$)) {
 313                             this.$ = 0;
 314                         }
 315                         break;
 316                     case 22 /* TO_NUMBER_NAN_AS_ZERO */:
 317-                        this.$ = sharedStateYY.handler.helper.number(virtualStack[vsl]);
 318+                        this.$ = TypeConverter_1.TypeConverter.valueToNumber(virtualStack[vsl]);
 319                         if (isNaN(this.$)) {
 320                             this.$ = 0;
 321                         }
 322                         break;
 323                     case 23 /* CALL_FUNCTION_LAST_BLANK */:
 324-                        this.$ = sharedStateYY.handler.helper.callFunction.call(this, virtualStack[vsl - 2], '');
 325+                        this.$ = sharedStateYY.handler.callFunction.call(this, virtualStack[vsl - 2], '');
 326                         break;
 327                     case 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */:
 328-                        this.$ = sharedStateYY.handler.helper.callFunction.call(this, virtualStack[vsl - 3], virtualStack[vsl - 1]);
 329+                        this.$ = sharedStateYY.handler.callFunction.call(this, virtualStack[vsl - 3], virtualStack[vsl - 1]);
 330                         break;
 331                     case 28 /* FIXED_CELL_VAL */:
 332-                        this.$ = sharedStateYY.handler.helper.fixedCellValue.call(sharedStateYY.obj, virtualStack[vsl]);
 333+                        this.$ = sharedStateYY.handler.fixedCellValue(sharedStateYY.originCellId, virtualStack[vsl]);
 334                         break;
 335                     case 29 /* FIXED_CELL_RANGE_VAL */:
 336-                        this.$ = sharedStateYY.handler.helper.fixedCellRangeValue.call(sharedStateYY.obj, virtualStack[vsl - 2], virtualStack[vsl]);
 337+                        this.$ = sharedStateYY.handler.fixedCellRangeValue(sharedStateYY.originCellId, virtualStack[vsl - 2], virtualStack[vsl]);
 338                         break;
 339                     case 30 /* CELL_VALUE */:
 340-                        this.$ = sharedStateYY.handler.helper.cellValue.call(sharedStateYY.obj, virtualStack[vsl]);
 341+                        this.$ = sharedStateYY.handler.cellValue(sharedStateYY.originCellId, virtualStack[vsl]);
 342                         break;
 343                     case 31 /* CELL_RANGE_VALUE */:
 344-                        this.$ = sharedStateYY.handler.helper.cellRangeValue.call(sharedStateYY.obj, virtualStack[vsl - 2], virtualStack[vsl]);
 345+                        this.$ = sharedStateYY.handler.cellRangeValue(sharedStateYY.originCellId, virtualStack[vsl - 2], virtualStack[vsl]);
 346                         break;
 347                     case 32 /* ENSURE_IS_ARRAY */:
 348-                        if (sharedStateYY.handler.utils.isArray(virtualStack[vsl])) {
 349+                        if (MoreUtils_1.isArray(virtualStack[vsl])) {
 350                             this.$ = virtualStack[vsl];
 351                         }
 352                         else {
 353@@ -139,14 +133,14 @@ var Parser = (function () {
 354                         this.$ = [virtualStack[vsl]];
 355                         break;
 356                     case 37 /* ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH */:
 357-                        this.$ = (sharedStateYY.handler.utils.isArray(virtualStack[vsl - 2]) ? virtualStack[vsl - 2] : [virtualStack[vsl - 2]]);
 358+                        this.$ = (MoreUtils_1.isArray(virtualStack[vsl - 2]) ? virtualStack[vsl - 2] : [virtualStack[vsl - 2]]);
 359                         this.$.push(virtualStack[vsl]);
 360                         break;
 361                     case 38 /* REFLEXIVE_REDUCE */:
 362                         this.$ = virtualStack[vsl];
 363                         break;
 364                     case 39 /* REDUCE_FLOAT */:
 365-                        this.$ = parseFloat(virtualStack[vsl - 2] + '.' + virtualStack[vsl]);
 366+                        this.$ = TypeConverter_1.TypeConverter.valueToNumber(virtualStack[vsl - 2] + '.' + virtualStack[vsl]);
 367                         break;
 368                     case 40 /* REDUCE_PREV_AS_PERCENT */:
 369                         this.$ = virtualStack[vsl - 1] * 0.01;
 370@@ -167,8 +161,6 @@ var Parser = (function () {
 371                         case 1 /* RETURN_LAST */:
 372                             return virtualStack[vsl - 1];
 373                         case 2 /* CALL_VARIABLE */:
 374-                        case 3 /* TIME_CALL_TRUE */:
 375-                        case 4 /* TIME_CALL */:
 376                         case 5 /* AS_NUMBER */:
 377                         case 6 /* AS_STRING */:
 378                         case 7 /* AMPERSAND */:
 379@@ -178,7 +170,6 @@ var Parser = (function () {
 380                         case 11 /* LTE */:
 381                         case 12 /* GTE */:
 382                         case 13 /* NOT_EQ */:
 383-                        case 14 /* NOT */:
 384                         case 15 /* GT */:
 385                         case 16 /* LT */:
 386                         case 17 /* MINUS */:
 387@@ -206,7 +197,7 @@ var Parser = (function () {
 388                             }
 389                             break;
 390                         case 32 /* ENSURE_IS_ARRAY */:
 391-                            if (sharedStateYY.handler.utils.isArray(virtualStack[vsl])) {
 392+                            if (MoreUtils_1.isArray(virtualStack[vsl])) {
 393                                 this.$ = virtualStack[vsl];
 394                             }
 395                             else {
 396@@ -229,7 +220,7 @@ var Parser = (function () {
 397                             this.$ = [virtualStack[vsl]];
 398                             break;
 399                         case 37 /* ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH */:
 400-                            this.$ = (sharedStateYY.handler.utils.isArray(virtualStack[vsl - 2]) ? virtualStack[vsl - 2] : [virtualStack[vsl - 2]]);
 401+                            this.$ = (MoreUtils_1.isArray(virtualStack[vsl - 2]) ? virtualStack[vsl - 2] : [virtualStack[vsl - 2]]);
 402                             this.$.push(virtualStack[vsl]);
 403                             break;
 404                         case 38 /* REFLEXIVE_REDUCE */:
 405@@ -252,7 +243,7 @@ var Parser = (function () {
 406                 }
 407             }
 408         },
 409-        defaultActions: { 19: [ParserConstants_1.REDUCE, 1] },
 410+        defaultActions: { 19: [ParserConstants_1.REDUCE, 1 /* RETURN_LAST */] },
 411         parseError: function parseError(str, hash) {
 412             if (hash.recoverable) {
 413                 this.trace(str);
 414@@ -328,6 +319,16 @@ var Parser = (function () {
 415                     // read action for current state and first input
 416                     action = ParserConstants_1.ACTION_TABLE[state] && ParserConstants_1.ACTION_TABLE[state][symbol];
 417                 }
 418+                // console.log({
 419+                //   text: lexer.match,
 420+                //   token: SYMBOL_INDEX_TO_NAME[symbol] || symbol,
 421+                //   tokenIndex: symbol,
 422+                //   line: lexer.yylineno,
 423+                //   loc: yyloc,
 424+                //   state: state,
 425+                //   stack: stack,
 426+                //   semanticValueStack: semanticValueStack
 427+                // });
 428                 // handle parse error
 429                 if (typeof action === 'undefined' || !action.length || !action[0]) {
 430                     var error_rule_depth = void 0;
 431@@ -339,6 +340,9 @@ var Parser = (function () {
 432                         var depth = 0;
 433                         // try to recover from error
 434                         for (;;) {
 435+                            if (MoreUtils_1.isUndefined(state)) {
 436+                                return false;
 437+                            }
 438                             // check for error recovery rule in this state
 439                             if ((TERROR.toString()) in ParserConstants_1.ACTION_TABLE[state]) {
 440                                 return depth;
 441@@ -422,7 +426,7 @@ var Parser = (function () {
 442                 //   Reduce: enough tokens have been gathered to reduce input through evaluation.
 443                 //   Accept: return.
 444                 switch (action[0]) {
 445-                    case ParserConstants_1.SHIFT:
 446+                    case ParserConstants_1.SHIFT:// Shift
 447                         stack.push(symbol);
 448                         semanticValueStack.push(lexer.yytext);
 449                         locationStack.push(lexer.yylloc);
 450@@ -448,7 +452,7 @@ var Parser = (function () {
 451                             preErrorSymbol = null;
 452                         }
 453                         break;
 454-                    case ParserConstants_1.REDUCE:
 455+                    case ParserConstants_1.REDUCE:// Reduce
 456                         // console.log("REDUCE", "literal", lexer.yytext, "   symbol", symbol, "   symbol name", SYMBOL_INDEX_TO_NAME[symbol], "   action", action,
 457                         //     "   stack", stack, "   semanticValueStack", semanticValueStack);
 458                         var currentProduction = ParserConstants_1.PRODUCTIONS[action[1]];
 459@@ -477,7 +481,7 @@ var Parser = (function () {
 460                             locationStack = locationStack.slice(0, -1 * lengthToReduceStackBy);
 461                         }
 462                         // push non-terminal (reduce)
 463-                        stack.push(currentProduction.getReplacementTokenIndex());
 464+                        stack.push(currentProduction.getReplacementSymbol());
 465                         semanticValueStack.push(yyval.$);
 466                         locationStack.push(yyval._$);
 467                         newState = ParserConstants_1.ACTION_TABLE[stack[stack.length - 2]][stack[stack.length - 1]];
 468@@ -504,6 +508,13 @@ var Parser = (function () {
 469             // resets the lexer, sets new input
 470             setInput: function (input, yy) {
 471                 this.yy = yy || this.yy || {};
 472+                this.yy.parseError = function (str, hash) {
 473+                    throw new Errors_1.ParseError(JSON.stringify({
 474+                        name: 'Parser error',
 475+                        message: str,
 476+                        prop: hash
 477+                    }));
 478+                };
 479                 this._input = input;
 480                 this._more = this._backtrack = this.done = false;
 481                 this.yylineno = this.yyleng = 0;
 482@@ -578,24 +589,6 @@ var Parser = (function () {
 483                 this._more = true;
 484                 return this;
 485             },
 486-            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
 487-            reject: function () {
 488-                if (this.options.backtrack_lexer) {
 489-                    this._backtrack = true;
 490-                }
 491-                else {
 492-                    return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), {
 493-                        text: "",
 494-                        token: null,
 495-                        line: this.yylineno
 496-                    });
 497-                }
 498-                return this;
 499-            },
 500-            // retain first n characters of the match
 501-            less: function (n) {
 502-                this.unput(this.match.slice(n));
 503-            },
 504             // displays already matched input, i.e. for error messages
 505             pastInput: function () {
 506                 var past = this.matched.substr(0, this.matched.length - this.match.length);
 507@@ -616,7 +609,7 @@ var Parser = (function () {
 508                 return pre + this.upcomingInput() + "\n" + c + "^";
 509             },
 510             // test the lexed token: return FALSE when not a match, otherwise return token
 511-            test_match: function (match, indexed_rule) {
 512+            testMatch: function (match, indexed_rule) {
 513                 var token, lines, backup;
 514                 if (this.options.backtrack_lexer) {
 515                     // save context
 516@@ -667,7 +660,7 @@ var Parser = (function () {
 517                 this._backtrack = false;
 518                 this._input = this._input.slice(match[0].length);
 519                 this.matched += match[0];
 520-                token = this.mapActionToActionIndex(indexed_rule);
 521+                token = this.mapRuleIndexToSymbolEnumeration(indexed_rule);
 522                 if (this.done && this._input) {
 523                     this.done = false;
 524                 }
 525@@ -703,7 +696,7 @@ var Parser = (function () {
 526                         match = tempMatch;
 527                         index = i;
 528                         if (this.options.backtrack_lexer) {
 529-                            token = this.test_match(tempMatch, rules[i]);
 530+                            token = this.testMatch(tempMatch, rules[i]);
 531                             if (token !== false) {
 532                                 return token;
 533                             }
 534@@ -723,7 +716,7 @@ var Parser = (function () {
 535                     }
 536                 }
 537                 if (match) {
 538-                    token = this.test_match(match, rules[index]);
 539+                    token = this.testMatch(match, rules[index]);
 540                     if (token !== false) {
 541                         return token;
 542                     }
 543@@ -761,126 +754,117 @@ var Parser = (function () {
 544                 }
 545             },
 546             options: {},
 547-            mapActionToActionIndex: function (ruleIndex) {
 548+            mapRuleIndexToSymbolEnumeration: function (ruleIndex) {
 549                 switch (ruleIndex) {
 550-                    case 0:
 551+                    case 0 /* WHITE_SPACE */:
 552                         // skip whitespace
 553                         break;
 554-                    case 1:
 555-                        return 10 /* LAST_NUMBER */;
 556-                    case 2:
 557-                        return 10 /* LAST_NUMBER */;
 558-                    case 3:
 559-                        return 23 /* CALL_FUNCTION_LAST_BLANK */;
 560-                    case 4:
 561-                        return 7 /* AMPERSAND */;
 562-                    case 5:
 563-                        return 8 /* EQUALS */;
 564-                    case 6:
 565-                        return 26 /* I26 */;
 566-                    case 7:
 567-                        return 28 /* FIXED_CELL_VAL */;
 568-                    case 8:
 569-                        return 23 /* CALL_FUNCTION_LAST_BLANK */;
 570-                    case 9:
 571-                        return 32 /* ENSURE_IS_ARRAY */;
 572-                    case 10:
 573-                        return 32 /* ENSURE_IS_ARRAY */;
 574-                    case 11:
 575-                        return 34 /* REDUCE_INT */;
 576-                    case 12:
 577-                        return 29 /* FIXED_CELL_RANGE_VAL */;
 578-                    case 13:
 579+                    case 1 /* DOUBLE_QUOTES */:
 580+                        return ParserConstants_1.Symbol.STRING;
 581+                    case 2 /* SINGLE_QUOTES */:
 582+                        return ParserConstants_1.Symbol.STRING;
 583+                    case 3 /* FORMULA_NAME */:
 584+                        return ParserConstants_1.Symbol.FUNCTION;
 585+                    case 6 /* $_A1_CELL */:
 586+                        return ParserConstants_1.Symbol.FIXEDCELL;
 587+                    case 7 /* A1_CELL */:
 588+                        return ParserConstants_1.Symbol.CELL_UPPER;
 589+                    case 8 /* FORMULA_NAME_SIMPLE */:
 590+                        return ParserConstants_1.Symbol.FUNCTION;
 591+                    case 9 /* VARIABLE */:
 592+                        return ParserConstants_1.Symbol.VARIABLE;
 593+                    case 10 /* SIMPLE_VARIABLE */:
 594+                        return ParserConstants_1.Symbol.VARIABLE;
 595+                    case 11 /* INTEGER */:
 596+                        return ParserConstants_1.Symbol.NUMBER_UPPER;
 597+                    case 12 /* OPEN_AND_CLOSE_OF_ARRAY */:
 598+                        return ParserConstants_1.Symbol.ARRAY;
 599+                    case 13 /* DOLLAR_SIGN */:
 600                         // skip whitespace??
 601                         break;
 602-                    case 14:
 603-                        return 11 /* LTE */;
 604-                    case 15:
 605+                    case 14 /* AMPERSAND_SIGN */:
 606+                        return ParserConstants_1.Symbol.AMPERSAND;
 607+                    case 15 /* SINGLE_WHITESPACE */:
 608                         return ' ';
 609-                    case 16:
 610-                        return 33 /* ENSURE_YYTEXT_ARRAY */;
 611-                    case 17:
 612-                        return 27 /* I27 */;
 613-                    case 18:
 614-                        return 30 /* CELL_VALUE */;
 615-                    case 19:
 616-                        return 31 /* CELL_RANGE_VALUE */;
 617-                    case 20:
 618-                        return 20 /* TO_POWER */;
 619-                    case 21:
 620-                        return 21 /* INVERT_NUM */;
 621-                    case 22:
 622-                        return 19 /* DIVIDE */;
 623-                    case 23:
 624-                        return 13 /* NOT_EQ */;
 625-                    case 24:
 626-                        return 22 /* TO_NUMBER_NAN_AS_ZERO */;
 627-                    case 25:
 628-                        return 14 /* NOT */;
 629-                    case 26:
 630-                        return 15 /* GT */;
 631-                    case 27:
 632-                        return 17 /* MINUS */;
 633-                    case 28:
 634-                        return 16 /* LT */;
 635-                    case 29:
 636-                        return 18 /* MULTIPLY */;
 637-                    case 30:
 638+                    case 16 /* PERIOD */:
 639+                        return ParserConstants_1.Symbol.DECIMAL;
 640+                    case 17 /* COLON */:
 641+                        return ParserConstants_1.Symbol.COLON;
 642+                    case 18 /* SEMI_COLON */:
 643+                        return ParserConstants_1.Symbol.SEMI_COLON;
 644+                    case 19 /* COMMA */:
 645+                        return ParserConstants_1.Symbol.COMMA;
 646+                    case 20 /* ASTERISK */:
 647+                        return ParserConstants_1.Symbol.ASTERISK;
 648+                    case 21 /* FORWARD_SLASH */:
 649+                        return ParserConstants_1.Symbol.DIVIDE;
 650+                    case 22 /* MINUS_SIGN */:
 651+                        return ParserConstants_1.Symbol.MINUS;
 652+                    case 23 /* PLUS_SIGN */:
 653+                        return ParserConstants_1.Symbol.PLUS;
 654+                    case 24 /* CARET_SIGN */:
 655+                        return ParserConstants_1.Symbol.CARROT;
 656+                    case 25 /* OPEN_PAREN */:
 657+                        return ParserConstants_1.Symbol.LEFT_PAREN;
 658+                    case 26 /* CLOSE_PAREN */:
 659+                        return ParserConstants_1.Symbol.RIGHT_PAREN;
 660+                    case 27 /* GREATER_THAN_SIGN */:
 661+                        return ParserConstants_1.Symbol.GREATER_THAN;
 662+                    case 28 /* LESS_THAN_SIGN */:
 663+                        return ParserConstants_1.Symbol.LESS_THAN;
 664+                    case 30 /* OPEN_DOUBLE_QUOTE */:
 665                         return '"';
 666-                    case 31:
 667+                    case 31 /* OPEN_SINGLE_QUITE */:
 668                         return "'";
 669-                    case 32:
 670+                    case 32 /* EXCLAMATION_POINT_RULE */:
 671                         return "!";
 672-                    case 33:
 673-                        return 12 /* GTE */;
 674-                    case 34:
 675-                        return 35 /* REDUCE_PERCENT */;
 676-                    case 35:
 677-                        return 36 /* WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY */;
 678-                    case 36:
 679-                        return 5 /* AS_NUMBER */;
 680+                    case 33 /* EQUALS_SIGN */:
 681+                        return ParserConstants_1.Symbol.EQUALS;
 682+                    case 34 /* PERCENT_SIGN */:
 683+                        return ParserConstants_1.Symbol.PERCENT;
 684+                    case 35 /* FULL_ERROR */:
 685+                        return ParserConstants_1.Symbol.FULL_ERROR;
 686+                    case 36 /* END_OF_STRING */:
 687+                        return ParserConstants_1.Symbol.EOF;
 688                 }
 689             },
 690             conditions: {
 691                 INITIAL: {
 692                     rules: [
 693-                        0,
 694-                        1,
 695-                        2,
 696-                        3,
 697-                        4,
 698-                        5,
 699-                        6,
 700-                        7,
 701-                        8,
 702-                        9,
 703-                        10,
 704-                        11,
 705-                        12,
 706-                        13,
 707-                        14,
 708-                        15,
 709-                        16,
 710-                        17,
 711-                        18,
 712-                        19,
 713-                        20,
 714-                        21,
 715-                        22,
 716-                        23,
 717-                        24,
 718-                        25,
 719-                        26,
 720-                        27,
 721-                        28,
 722-                        29,
 723-                        30,
 724-                        31,
 725-                        32,
 726-                        33,
 727-                        34,
 728-                        35,
 729-                        36,
 730+                        0 /* WHITE_SPACE */,
 731+                        1 /* DOUBLE_QUOTES */,
 732+                        2 /* SINGLE_QUOTES */,
 733+                        3 /* FORMULA_NAME */,
 734+                        6 /* $_A1_CELL */,
 735+                        7 /* A1_CELL */,
 736+                        8 /* FORMULA_NAME_SIMPLE */,
 737+                        9 /* VARIABLE */,
 738+                        10 /* SIMPLE_VARIABLE */,
 739+                        11 /* INTEGER */,
 740+                        12 /* OPEN_AND_CLOSE_OF_ARRAY */,
 741+                        13 /* DOLLAR_SIGN */,
 742+                        14 /* AMPERSAND_SIGN */,
 743+                        15 /* SINGLE_WHITESPACE */,
 744+                        16 /* PERIOD */,
 745+                        17 /* COLON */,
 746+                        18 /* SEMI_COLON */,
 747+                        19 /* COMMA */,
 748+                        20 /* ASTERISK */,
 749+                        21 /* FORWARD_SLASH */,
 750+                        22 /* MINUS_SIGN */,
 751+                        23 /* PLUS_SIGN */,
 752+                        24 /* CARET_SIGN */,
 753+                        25 /* OPEN_PAREN */,
 754+                        26 /* CLOSE_PAREN */,
 755+                        27 /* GREATER_THAN_SIGN */,
 756+                        28 /* LESS_THAN_SIGN */,
 757+                        30 /* OPEN_DOUBLE_QUOTE */,
 758+                        31 /* OPEN_SINGLE_QUITE */,
 759+                        32 /* EXCLAMATION_POINT_RULE */,
 760+                        33 /* EQUALS_SIGN */,
 761+                        34 /* PERCENT_SIGN */,
 762+                        35 /* FULL_ERROR */,
 763+                        36 /* END_OF_STRING */,
 764                         37
 765                     ],
 766                     "inclusive": true
 767@@ -895,4 +879,24 @@ var Parser = (function () {
 768     parser.Parser = Parser;
 769     return new Parser;
 770 })();
 771-exports.Parser = Parser;
 772+/**
 773+ * Creates a new FormulaParser, which parses formulas, and does minimal error handling.
 774+ *
 775+ * @param handler should be a Sheet, since the parser needs access to fixedCellValue, cellValue, cellRangeValue, and
 776+ * fixedCellRangeValue
 777+ * @returns formula parser instance for use with parser.js
 778+ * @constructor
 779+ */
 780+var FormulaParser = function (handler) {
 781+    var formulaLexer = function () { };
 782+    formulaLexer.prototype = Parser.lexer;
 783+    var formulaParser = function () {
 784+        this.lexer = new formulaLexer();
 785+        this.yy = {};
 786+    };
 787+    formulaParser.prototype = Parser;
 788+    var newParser = new formulaParser;
 789+    newParser.yy.handler = handler;
 790+    return newParser;
 791+};
 792+exports.FormulaParser = FormulaParser;
 793diff --git a/dist/Parser/ParserConstants.js b/dist/Parser/ParserConstants.js
 794index cc324d9..43453d8 100644
 795--- a/dist/Parser/ParserConstants.js
 796+++ b/dist/Parser/ParserConstants.js
 797@@ -1,86 +1,79 @@
 798 "use strict";
 799 exports.__esModule = true;
 800+var ObjectBuilder_1 = require("../Utilities/ObjectBuilder");
 801 // Rules represent the Regular Expressions that will be used in sequence to match a given input to the Parser.
 802-var WHITE_SPACE_RULE = /^(?:\s+)/; // rule 0
 803-var DOUBLE_QUOTES_RULE = /^(?:"(\\["]|[^"])*")/; // rule 1
 804-var SINGLE_QUOTES_RULE = /^(?:'(\\[']|[^'])*')/; // rule 2
 805-var FORMULA_NAME_RULE = /^(?:[A-Za-z.]{1,}[A-Za-z_0-9]+(?=[(]))/; // Changed from /^(?:[A-Za-z]{1,}[A-Za-z_0-9]+(?=[(]))/ // rule 3
 806-var DATE_RULE = /^(?:([0]?[1-9]|1[0-2])[:][0-5][0-9]([:][0-5][0-9])?[ ]?(AM|am|aM|Am|PM|pm|pM|Pm))/; // rule 4
 807-var TIME_RULE = /^(?:([0]?[0-9]|1[0-9]|2[0-3])[:][0-5][0-9]([:][0-5][0-9])?)/; // rule 5
 808-var $_A1_CELL_RULE = /^(?:\$[A-Za-z]+\$[0-9]+)/; // rule 6
 809-var A1_CELL_RULE = /^(?:[A-Za-z]+[0-9]+)/; // rules 7
 810-var FORMULA_NAME_SIMPLE_RULE = /^(?:[A-Za-z.]+(?=[(]))/; // rule 8
 811-var VARIABLE_RULE = /^(?:[A-Za-z]{1,}[A-Za-z_0-9]+)/; // rule 9
 812-var SIMPLE_VARIABLE_RILE = /^(?:[A-Za-z_]+)/; //rule 10
 813-var INTEGER_RULE = /^(?:[0-9]+(?:(?:[eE])(?:[\+-])?[0-9]+)?)/; // Changed from /^(?:[0-9]+)/ // rule 11
 814-var OPEN_AND_CLOSE_OF_ARRAY_RULE = /^(?:\[(.*)?\])/; // rule 12
 815-var DOLLAR_SIGN_RULE = /^(?:\$)/; // rule 13
 816-var AMPERSAND_SIGN_RULE = /^(?:&)/; //rule 14
 817-var SINGLE_WHITESPACE_RULE = /^(?: )/; // rule 15
 818-var PERIOD_RULE = /^(?:[.])/; // rule 16
 819-var COLON_RULE = /^(?::)/; //rule 17
 820-var SEMI_COLON_RULE = /^(?:;)/; // rule 18
 821-var COMMA_RULE = /^(?:,)/; // rule 19
 822-var ASTERISK_RULE = /^(?:\*)/; //rule 20
 823-var FORWARD_SLASH_RULE = /^(?:\/)/; // rule 21
 824-var MINUS_SIGN_RULE = /^(?:-)/; // rule 22
 825-var PLUS_SIGN_RULE = /^(?:\+)/; // rule 23
 826-var CARET_SIGN_RULE = /^(?:\^)/; //rule 24
 827-var OPEN_PAREN_RULE = /^(?:\()/; // rule 25
 828-var CLOSE_PAREN_RULE = /^(?:\))/; // rule 26
 829-var GREATER_THAN_SIGN_RULE = /^(?:>)/; // rule 27
 830-var LESS_THAN_SIGN_RULE = /^(?:<)/; // rule 28
 831-var NOT_RULE = /^(?:NOT\b)/; // rule 29
 832-var OPEN_DOUBLE_QUOTE = /^(?:")/; // rule 30
 833-var OPEN_SINGLE_QUITE = /^(?:')/; // rule 31
 834-var EXCLAMATION_POINT_RULE = /^(?:!)/; // rule 32
 835-var EQUALS_SIGN_RULE = /^(?:=)/; // rule 33
 836-var PERCENT_SIGN_RULE = /^(?:%)/; // rule 34
 837-// TODO: POUND_SIGN_RULE Modified from /^(?:[#])/, which matches pound sign exclusively. Now specific to errors.
 838-// TODO: Should be renamed.
 839-var POUND_SIGN_RULE = /^(?:#N\/A|#NUM\!|#NULL\!|#DIV\/0\!|#VALUE\!|#REF\!|#ERROR)/; // rule 35
 840-var END_OF_STRING_RULE = /^(?:$)/; // rule 36
 841+var WHITE_SPACE_RULE = /^(?:\s+)/;
 842+var DOUBLE_QUOTES_RULE = /^(?:"(\\["]|[^"])*")/;
 843+var SINGLE_QUOTES_RULE = /^(?:'(\\[']|[^'])*')/;
 844+var FORMULA_NAME_RULE = /^(?:[A-Za-z.]{1,}[A-Za-z_0-9]+(?=[(]))/;
 845+var $_A1_CELL_RULE = /^(?:\$[A-Za-z]+\$[0-9]+)/;
 846+var A1_CELL_RULE = /^(?:[A-Za-z]+[0-9]+)/;
 847+var FORMULA_NAME_SIMPLE_RULE = /^(?:[A-Za-z.]+(?=[(]))/;
 848+var VARIABLE_RULE = /^(?:[A-Za-z]{1,}[A-Za-z_0-9]+)/;
 849+var SIMPLE_VARIABLE_RILE = /^(?:[A-Za-z_]+)/;
 850+var INTEGER_RULE = /^(?:[0-9]+(?:(?:[eE])(?:[\+-])?[0-9]+)?)/;
 851+var OPEN_AND_CLOSE_OF_ARRAY_RULE = /^(?:\[([^\]]*)?\])/;
 852+var DOLLAR_SIGN_RULE = /^(?:\$)/;
 853+var AMPERSAND_SIGN_RULE = /^(?:&)/;
 854+var SINGLE_WHITESPACE_RULE = /^(?: )/;
 855+var PERIOD_RULE = /^(?:[.])/;
 856+var COLON_RULE = /^(?::)/;
 857+var SEMI_COLON_RULE = /^(?:;)/;
 858+var COMMA_RULE = /^(?:,)/;
 859+var ASTERISK_RULE = /^(?:\*)/;
 860+var FORWARD_SLASH_RULE = /^(?:\/)/;
 861+var MINUS_SIGN_RULE = /^(?:-)/;
 862+var PLUS_SIGN_RULE = /^(?:\+)/;
 863+var CARET_SIGN_RULE = /^(?:\^)/;
 864+var OPEN_PAREN_RULE = /^(?:\()/;
 865+var CLOSE_PAREN_RULE = /^(?:\))/;
 866+var GREATER_THAN_SIGN_RULE = /^(?:>)/;
 867+var LESS_THAN_SIGN_RULE = /^(?:<)/;
 868+var OPEN_DOUBLE_QUOTE = /^(?:")/;
 869+var OPEN_SINGLE_QUITE = /^(?:')/;
 870+var EXCLAMATION_POINT_RULE = /^(?:!)/;
 871+var EQUALS_SIGN_RULE = /^(?:=)/;
 872+var PERCENT_SIGN_RULE = /^(?:%)/;
 873+var FULL_ERROR_RULE = /^(?:#N\/A|#NUM\!|#NULL\!|#DIV\/0\!|#VALUE\!|#REF\!|#ERROR)/;
 874+var END_OF_STRING_RULE = /^(?:$)/;
 875+;
 876 // Sequential rules to use when parsing a given input.
 877-var RULES = [
 878-    WHITE_SPACE_RULE,
 879-    DOUBLE_QUOTES_RULE,
 880-    SINGLE_QUOTES_RULE,
 881-    FORMULA_NAME_RULE,
 882-    DATE_RULE,
 883-    TIME_RULE,
 884-    $_A1_CELL_RULE,
 885-    A1_CELL_RULE,
 886-    FORMULA_NAME_SIMPLE_RULE,
 887-    VARIABLE_RULE,
 888-    SIMPLE_VARIABLE_RILE,
 889-    INTEGER_RULE,
 890-    OPEN_AND_CLOSE_OF_ARRAY_RULE,
 891-    DOLLAR_SIGN_RULE,
 892-    AMPERSAND_SIGN_RULE,
 893-    SINGLE_WHITESPACE_RULE,
 894-    PERIOD_RULE,
 895-    COLON_RULE,
 896-    SEMI_COLON_RULE,
 897-    COMMA_RULE,
 898-    ASTERISK_RULE,
 899-    FORWARD_SLASH_RULE,
 900-    MINUS_SIGN_RULE,
 901-    PLUS_SIGN_RULE,
 902-    CARET_SIGN_RULE,
 903-    OPEN_PAREN_RULE,
 904-    CLOSE_PAREN_RULE,
 905-    GREATER_THAN_SIGN_RULE,
 906-    LESS_THAN_SIGN_RULE,
 907-    NOT_RULE,
 908-    OPEN_DOUBLE_QUOTE,
 909-    OPEN_SINGLE_QUITE,
 910-    EXCLAMATION_POINT_RULE,
 911-    EQUALS_SIGN_RULE,
 912-    PERCENT_SIGN_RULE,
 913-    POUND_SIGN_RULE,
 914-    END_OF_STRING_RULE
 915-];
 916+var RULES = [];
 917 exports.RULES = RULES;
 918+RULES[0 /* WHITE_SPACE */] = WHITE_SPACE_RULE;
 919+RULES[1 /* DOUBLE_QUOTES */] = DOUBLE_QUOTES_RULE;
 920+RULES[2 /* SINGLE_QUOTES */] = SINGLE_QUOTES_RULE;
 921+RULES[3 /* FORMULA_NAME */] = FORMULA_NAME_RULE;
 922+RULES[6 /* $_A1_CELL */] = $_A1_CELL_RULE;
 923+RULES[7 /* A1_CELL */] = A1_CELL_RULE;
 924+RULES[8 /* FORMULA_NAME_SIMPLE */] = FORMULA_NAME_SIMPLE_RULE;
 925+RULES[9 /* VARIABLE */] = VARIABLE_RULE;
 926+RULES[10 /* SIMPLE_VARIABLE */] = SIMPLE_VARIABLE_RILE;
 927+RULES[11 /* INTEGER */] = INTEGER_RULE;
 928+RULES[12 /* OPEN_AND_CLOSE_OF_ARRAY */] = OPEN_AND_CLOSE_OF_ARRAY_RULE;
 929+RULES[13 /* DOLLAR_SIGN */] = DOLLAR_SIGN_RULE;
 930+RULES[14 /* AMPERSAND_SIGN */] = AMPERSAND_SIGN_RULE;
 931+RULES[15 /* SINGLE_WHITESPACE */] = SINGLE_WHITESPACE_RULE;
 932+RULES[16 /* PERIOD */] = PERIOD_RULE;
 933+RULES[17 /* COLON */] = COLON_RULE;
 934+RULES[18 /* SEMI_COLON */] = SEMI_COLON_RULE;
 935+RULES[19 /* COMMA */] = COMMA_RULE;
 936+RULES[20 /* ASTERISK */] = ASTERISK_RULE;
 937+RULES[21 /* FORWARD_SLASH */] = FORWARD_SLASH_RULE;
 938+RULES[22 /* MINUS_SIGN */] = MINUS_SIGN_RULE;
 939+RULES[23 /* PLUS_SIGN */] = PLUS_SIGN_RULE;
 940+RULES[24 /* CARET_SIGN */] = CARET_SIGN_RULE;
 941+RULES[25 /* OPEN_PAREN */] = OPEN_PAREN_RULE;
 942+RULES[26 /* CLOSE_PAREN */] = CLOSE_PAREN_RULE;
 943+RULES[27 /* GREATER_THAN_SIGN */] = GREATER_THAN_SIGN_RULE;
 944+RULES[28 /* LESS_THAN_SIGN */] = LESS_THAN_SIGN_RULE;
 945+RULES[30 /* OPEN_DOUBLE_QUOTE */] = OPEN_DOUBLE_QUOTE;
 946+RULES[31 /* OPEN_SINGLE_QUITE */] = OPEN_SINGLE_QUITE;
 947+RULES[32 /* EXCLAMATION_POINT_RULE */] = EXCLAMATION_POINT_RULE;
 948+RULES[33 /* EQUALS_SIGN */] = EQUALS_SIGN_RULE;
 949+RULES[34 /* PERCENT_SIGN */] = PERCENT_SIGN_RULE;
 950+RULES[35 /* FULL_ERROR */] = FULL_ERROR_RULE;
 951+RULES[36 /* END_OF_STRING */] = END_OF_STRING_RULE;
 952 /**
 953  * Actions to take when processing tokens one by one. We're always either taking the next token, reducing our current
 954  * tokens, or accepting and returning.
 955@@ -91,85 +84,6 @@ var REDUCE = 2;
 956 exports.REDUCE = REDUCE;
 957 var ACCEPT = 3;
 958 exports.ACCEPT = ACCEPT;
 959-/**
 960- * Represents the length to reduce the stack by, and the token index value that will replace those tokens in the stack.
 961- */
 962-var ReductionPair = (function () {
 963-    function ReductionPair(replacementTokenIndex, length) {
 964-        this.lengthToReduceStackBy = length;
 965-        this.replacementTokenIndex = replacementTokenIndex;
 966-    }
 967-    /**
 968-     * Get the number representing the length to reduce the stack by.
 969-     * @returns {number}
 970-     */
 971-    ReductionPair.prototype.getLengthToReduceStackBy = function () {
 972-        return this.lengthToReduceStackBy;
 973-    };
 974-    /**
 975-     * Get the replacement token index.
 976-     * @returns {number}
 977-     */
 978-    ReductionPair.prototype.getReplacementTokenIndex = function () {
 979-        return this.replacementTokenIndex;
 980-    };
 981-    return ReductionPair;
 982-}());
 983-exports.ReductionPair = ReductionPair;
 984-/**
 985- * Productions is used to look up both the number to use when reducing the stack (productions[x][1]) and the semantic
 986- * value that will replace the tokens in the stack (productions[x][0]).
 987- * @type {Array<ReductionPair>}
 988- *
 989- * Maps a ProductionRule to the appropriate number of previous tokens to use in a reduction action.
 990- */
 991-var productions = [];
 992-productions[0 /* NO_ACTION */] = null;
 993-productions[1 /* RETURN_LAST */] = new ReductionPair(3, 2);
 994-productions[2 /* CALL_VARIABLE */] = new ReductionPair(4, 1);
 995-productions[3 /* TIME_CALL_TRUE */] = new ReductionPair(4, 1);
 996-productions[4 /* TIME_CALL */] = new ReductionPair(4, 1);
 997-productions[5 /* AS_NUMBER */] = new ReductionPair(4, 1);
 998-productions[6 /* AS_STRING */] = new ReductionPair(4, 1);
 999-productions[7 /* AMPERSAND */] = new ReductionPair(4, 3);
1000-productions[8 /* EQUALS */] = new ReductionPair(4, 3);
1001-productions[9 /* PLUS */] = new ReductionPair(4, 3);
1002-productions[10 /* LAST_NUMBER */] = new ReductionPair(4, 3);
1003-productions[11 /* LTE */] = new ReductionPair(4, 4);
1004-productions[12 /* GTE */] = new ReductionPair(4, 4);
1005-productions[13 /* NOT_EQ */] = new ReductionPair(4, 4);
1006-productions[14 /* NOT */] = new ReductionPair(4, 3);
1007-productions[15 /* GT */] = new ReductionPair(4, 3);
1008-productions[16 /* LT */] = new ReductionPair(4, 3);
1009-productions[17 /* MINUS */] = new ReductionPair(4, 3);
1010-productions[18 /* MULTIPLY */] = new ReductionPair(4, 3);
1011-productions[19 /* DIVIDE */] = new ReductionPair(4, 3);
1012-productions[20 /* TO_POWER */] = new ReductionPair(4, 3);
1013-productions[21 /* INVERT_NUM */] = new ReductionPair(4, 2);
1014-productions[22 /* TO_NUMBER_NAN_AS_ZERO */] = new ReductionPair(4, 2);
1015-productions[23 /* CALL_FUNCTION_LAST_BLANK */] = new ReductionPair(4, 3);
1016-productions[24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */] = new ReductionPair(4, 4);
1017-productions[25 /* I25 */] = new ReductionPair(4, 1);
1018-productions[26 /* I26 */] = new ReductionPair(4, 1);
1019-productions[27 /* I27 */] = new ReductionPair(4, 2);
1020-productions[28 /* FIXED_CELL_VAL */] = new ReductionPair(25, 1);
1021-productions[29 /* FIXED_CELL_RANGE_VAL */] = new ReductionPair(25, 3);
1022-productions[30 /* CELL_VALUE */] = new ReductionPair(25, 1);
1023-productions[31 /* CELL_RANGE_VALUE */] = new ReductionPair(25, 3);
1024-productions[32 /* ENSURE_IS_ARRAY */] = new ReductionPair(24, 1);
1025-productions[33 /* ENSURE_YYTEXT_ARRAY */] = new ReductionPair(24, 1);
1026-productions[34 /* REDUCE_INT */] = new ReductionPair(24, 3);
1027-productions[35 /* REDUCE_PERCENT */] = new ReductionPair(24, 3);
1028-productions[36 /* WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY */] = new ReductionPair(6, 1);
1029-productions[37 /* ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH */] = new ReductionPair(6, 3);
1030-productions[38 /* REFLEXIVE_REDUCE */] = new ReductionPair(9, 1);
1031-productions[39 /* REDUCE_FLOAT */] = new ReductionPair(9, 3);
1032-productions[40 /* REDUCE_PREV_AS_PERCENT */] = new ReductionPair(9, 2);
1033-productions[41 /* REDUCE_LAST_THREE_A */] = new ReductionPair(2, 3);
1034-productions[42 /* REDUCE_LAST_THREE_B */] = new ReductionPair(2, 4);
1035-productions[43 /* AS_ERROR */] = new ReductionPair(4, 1);
1036-var PRODUCTIONS = productions;
1037-exports.PRODUCTIONS = PRODUCTIONS;
1038 var Symbol;
1039 (function (Symbol) {
1040     Symbol[Symbol["ACCEPT"] = 0] = "ACCEPT";
1041@@ -179,8 +93,6 @@ var Symbol;
1042     Symbol[Symbol["EXPRESSION"] = 4] = "EXPRESSION";
1043     Symbol[Symbol["EOF"] = 5] = "EOF";
1044     Symbol[Symbol["VARIABLE_SEQUENCE"] = 6] = "VARIABLE_SEQUENCE";
1045-    Symbol[Symbol["TIME_AMPM"] = 7] = "TIME_AMPM";
1046-    Symbol[Symbol["TIME_24"] = 8] = "TIME_24";
1047     Symbol[Symbol["NUMBER"] = 9] = "NUMBER";
1048     Symbol[Symbol["STRING"] = 10] = "STRING";
1049     Symbol[Symbol["AMPERSAND"] = 11] = "AMPERSAND";
1050@@ -190,7 +102,6 @@ var Symbol;
1051     Symbol[Symbol["RIGHT_PAREN"] = 15] = "RIGHT_PAREN";
1052     Symbol[Symbol["LESS_THAN"] = 16] = "LESS_THAN";
1053     Symbol[Symbol["GREATER_THAN"] = 17] = "GREATER_THAN";
1054-    Symbol[Symbol["NOT"] = 18] = "NOT";
1055     Symbol[Symbol["MINUS"] = 19] = "MINUS";
1056     Symbol[Symbol["ASTERISK"] = 20] = "ASTERISK";
1057     Symbol[Symbol["DIVIDE"] = 21] = "DIVIDE";
1058@@ -208,10 +119,86 @@ var Symbol;
1059     Symbol[Symbol["DECIMAL"] = 33] = "DECIMAL";
1060     Symbol[Symbol["NUMBER_UPPER"] = 34] = "NUMBER_UPPER";
1061     Symbol[Symbol["PERCENT"] = 35] = "PERCENT";
1062-    Symbol[Symbol["POUND"] = 36] = "POUND";
1063+    Symbol[Symbol["FULL_ERROR"] = 36] = "FULL_ERROR";
1064     Symbol[Symbol["EXCLAMATION_POINT"] = 37] = "EXCLAMATION_POINT";
1065 })(Symbol || (Symbol = {}));
1066 exports.Symbol = Symbol;
1067+/**
1068+ * Represents the length to reduce the stack by, and the replacement symbol that will replace those tokens in the stack.
1069+ */
1070+var ReductionPair = /** @class */ (function () {
1071+    function ReductionPair(replacementSymbol, length) {
1072+        this.lengthToReduceStackBy = length;
1073+        this.replacementSymbol = replacementSymbol;
1074+    }
1075+    /**
1076+     * Get the number representing the length to reduce the stack by.
1077+     * @returns {number}
1078+     */
1079+    ReductionPair.prototype.getLengthToReduceStackBy = function () {
1080+        return this.lengthToReduceStackBy;
1081+    };
1082+    /**
1083+     * Get the replacement token index.
1084+     * @returns {number}
1085+     */
1086+    ReductionPair.prototype.getReplacementSymbol = function () {
1087+        return this.replacementSymbol;
1088+    };
1089+    return ReductionPair;
1090+}());
1091+exports.ReductionPair = ReductionPair;
1092+/**
1093+ * Productions is used to look up both the number to use when reducing the stack (productions[x][1]) and the semantic
1094+ * value that will replace the tokens in the stack (productions[x][0]).
1095+ * @type {Array<ReductionPair>}
1096+ *
1097+ * Maps a ProductionRule to the appropriate number of previous tokens to use in a reduction action.
1098+ */
1099+var productions = [];
1100+productions[0 /* NO_ACTION */] = null;
1101+productions[1 /* RETURN_LAST */] = new ReductionPair(Symbol.EXPRESSIONS, 2);
1102+productions[2 /* CALL_VARIABLE */] = new ReductionPair(Symbol.EXPRESSION, 1);
1103+productions[5 /* AS_NUMBER */] = new ReductionPair(Symbol.EXPRESSION, 1);
1104+productions[6 /* AS_STRING */] = new ReductionPair(Symbol.EXPRESSION, 1);
1105+productions[7 /* AMPERSAND */] = new ReductionPair(Symbol.EXPRESSION, 3);
1106+productions[8 /* EQUALS */] = new ReductionPair(Symbol.EXPRESSION, 3);
1107+productions[9 /* PLUS */] = new ReductionPair(Symbol.EXPRESSION, 3);
1108+productions[10 /* LAST_NUMBER */] = new ReductionPair(Symbol.EXPRESSION, 3);
1109+productions[11 /* LTE */] = new ReductionPair(Symbol.EXPRESSION, 4);
1110+productions[12 /* GTE */] = new ReductionPair(Symbol.EXPRESSION, 4);
1111+productions[13 /* NOT_EQ */] = new ReductionPair(Symbol.EXPRESSION, 4);
1112+productions[15 /* GT */] = new ReductionPair(Symbol.EXPRESSION, 3);
1113+productions[16 /* LT */] = new ReductionPair(Symbol.EXPRESSION, 3);
1114+productions[17 /* MINUS */] = new ReductionPair(Symbol.EXPRESSION, 3);
1115+productions[18 /* MULTIPLY */] = new ReductionPair(Symbol.EXPRESSION, 3);
1116+productions[19 /* DIVIDE */] = new ReductionPair(Symbol.EXPRESSION, 3);
1117+productions[20 /* TO_POWER */] = new ReductionPair(Symbol.EXPRESSION, 3);
1118+productions[21 /* INVERT_NUM */] = new ReductionPair(Symbol.EXPRESSION, 2);
1119+productions[22 /* TO_NUMBER_NAN_AS_ZERO */] = new ReductionPair(Symbol.EXPRESSION, 2);
1120+productions[23 /* CALL_FUNCTION_LAST_BLANK */] = new ReductionPair(Symbol.EXPRESSION, 3);
1121+productions[24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */] = new ReductionPair(Symbol.EXPRESSION, 4);
1122+productions[25 /* CELL_VALUE_AS_EXPRESSION */] = new ReductionPair(Symbol.EXPRESSION, 1);
1123+productions[26 /* ERROR_AND_CONTINUE */] = new ReductionPair(Symbol.EXPRESSION, 1);
1124+productions[27 /* ERROR_AND_CONTINUE_WITH_OTHER_ERRORS */] = new ReductionPair(Symbol.EXPRESSION, 2);
1125+productions[28 /* FIXED_CELL_VAL */] = new ReductionPair(Symbol.CELL, 1);
1126+productions[29 /* FIXED_CELL_RANGE_VAL */] = new ReductionPair(Symbol.CELL, 3);
1127+productions[30 /* CELL_VALUE */] = new ReductionPair(Symbol.CELL, 1);
1128+productions[31 /* CELL_RANGE_VALUE */] = new ReductionPair(Symbol.CELL, 3);
1129+productions[32 /* ENSURE_IS_ARRAY */] = new ReductionPair(Symbol.EXP_SEQ, 1);
1130+productions[33 /* ENSURE_YYTEXT_ARRAY */] = new ReductionPair(Symbol.EXP_SEQ, 1);
1131+productions[34 /* REDUCE_INT */] = new ReductionPair(Symbol.EXP_SEQ, 3);
1132+productions[35 /* REDUCE_PERCENT */] = new ReductionPair(Symbol.EXP_SEQ, 3);
1133+productions[36 /* WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY */] = new ReductionPair(Symbol.VARIABLE_SEQUENCE, 1);
1134+productions[37 /* ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH */] = new ReductionPair(Symbol.VARIABLE_SEQUENCE, 3);
1135+productions[38 /* REFLEXIVE_REDUCE */] = new ReductionPair(Symbol.NUMBER, 1);
1136+productions[39 /* REDUCE_FLOAT */] = new ReductionPair(Symbol.NUMBER, 3);
1137+productions[40 /* REDUCE_PREV_AS_PERCENT */] = new ReductionPair(Symbol.NUMBER, 2);
1138+productions[41 /* REDUCE_LAST_THREE_A */] = new ReductionPair(Symbol.ERROR, 3);
1139+productions[42 /* REDUCE_LAST_THREE_B */] = new ReductionPair(Symbol.ERROR, 4);
1140+productions[43 /* AS_ERROR */] = new ReductionPair(Symbol.EXPRESSION, 1);
1141+var PRODUCTIONS = productions;
1142+exports.PRODUCTIONS = PRODUCTIONS;
1143 var SYMBOL_NAME_TO_INDEX = {
1144     "$accept": Symbol.ACCEPT,
1145     "$end": Symbol.END,
1146@@ -220,8 +207,6 @@ var SYMBOL_NAME_TO_INDEX = {
1147     "expression": Symbol.EXPRESSION,
1148     "EOF": Symbol.EOF,
1149     "variableSequence": Symbol.VARIABLE_SEQUENCE,
1150-    "TIME_AMPM": Symbol.TIME_AMPM,
1151-    "TIME_24": Symbol.TIME_24,
1152     "number": Symbol.NUMBER,
1153     "STRING": Symbol.STRING,
1154     "&": Symbol.AMPERSAND,
1155@@ -231,7 +216,6 @@ var SYMBOL_NAME_TO_INDEX = {
1156     ")": Symbol.RIGHT_PAREN,
1157     "<": Symbol.LESS_THAN,
1158     ">": Symbol.GREATER_THAN,
1159-    "NOT": Symbol.NOT,
1160     "-": Symbol.MINUS,
1161     "*": Symbol.ASTERISK,
1162     "/": Symbol.DIVIDE,
1163@@ -249,14 +233,12 @@ var SYMBOL_NAME_TO_INDEX = {
1164     "DECIMAL": Symbol.DECIMAL,
1165     "NUMBER": Symbol.NUMBER_UPPER,
1166     "%": Symbol.PERCENT,
1167-    "#": Symbol.POUND,
1168+    "#": Symbol.FULL_ERROR,
1169     "!": Symbol.EXCLAMATION_POINT
1170 };
1171 exports.SYMBOL_NAME_TO_INDEX = SYMBOL_NAME_TO_INDEX;
1172 var symbolIndexToName = {};
1173 symbolIndexToName[Symbol.EOF] = "EOF";
1174-symbolIndexToName[Symbol.TIME_AMPM] = "TIME_AMPM";
1175-symbolIndexToName[Symbol.TIME_24] = "TIME_24";
1176 symbolIndexToName[Symbol.STRING] = "STRING";
1177 symbolIndexToName[Symbol.AMPERSAND] = "&";
1178 symbolIndexToName[Symbol.EQUALS] = "=";
1179@@ -265,41 +247,24 @@ symbolIndexToName[Symbol.LEFT_PAREN] = "(";
1180 symbolIndexToName[Symbol.RIGHT_PAREN] = ")";
1181 symbolIndexToName[Symbol.LESS_THAN] = "<";
1182 symbolIndexToName[Symbol.GREATER_THAN] = ">";
1183-symbolIndexToName[Symbol.NOT] = "NOTE";
1184 symbolIndexToName[Symbol.MINUS] = "-";
1185 symbolIndexToName[Symbol.ASTERISK] = "*";
1186 symbolIndexToName[Symbol.DIVIDE] = "/";
1187 symbolIndexToName[Symbol.CARROT] = "^";
1188 symbolIndexToName[Symbol.FUNCTION] = "FUNCTION";
1189-symbolIndexToName[Symbol.FIXEDCELL] = "FIXEDCELL";
1190+symbolIndexToName[Symbol.FIXEDCELL] = "FIXED_CELL_REF";
1191+symbolIndexToName[Symbol.CELL] = "CELL";
1192 symbolIndexToName[Symbol.COLON] = ";";
1193 symbolIndexToName[Symbol.COMMA] = ",";
1194 symbolIndexToName[Symbol.VARIABLE] = "VARIABLE";
1195 symbolIndexToName[Symbol.DECIMAL] = "DECIMAL";
1196 symbolIndexToName[Symbol.NUMBER_UPPER] = "NUMBER";
1197 symbolIndexToName[Symbol.PERCENT] = "%";
1198-symbolIndexToName[Symbol.POUND] = "#";
1199+symbolIndexToName[Symbol.FULL_ERROR] = "#";
1200+symbolIndexToName[Symbol.ARRAY] = "ARRAY";
1201 symbolIndexToName[Symbol.EXCLAMATION_POINT] = "!";
1202 var SYMBOL_INDEX_TO_NAME = symbolIndexToName;
1203 exports.SYMBOL_INDEX_TO_NAME = SYMBOL_INDEX_TO_NAME;
1204-var ObjectBuilder = (function () {
1205-    function ObjectBuilder() {
1206-        this.o = {};
1207-    }
1208-    ObjectBuilder.add = function (k, v) {
1209-        var m = new ObjectBuilder();
1210-        m.o[k.toString()] = v;
1211-        return m;
1212-    };
1213-    ObjectBuilder.prototype.add = function (k, v) {
1214-        this.o[k.toString()] = v;
1215-        return this;
1216-    };
1217-    ObjectBuilder.prototype.build = function () {
1218-        return this.o;
1219-    };
1220-    return ObjectBuilder;
1221-}());
1222 /**
1223  * Array of to map rules to to LexActions and other rules. A single index in the object (e.g. `{2: 13}`) indicates the
1224  * rule object to follow for the next token, while an array (e.g. `{23: [1, ReduceActions.LTE]}`) indicates the action to be taken,
1225@@ -307,43 +272,40 @@ var ObjectBuilder = (function () {
1226  */
1227 var table = [];
1228 // All functions in the spreadsheet start with a 0-token.
1229-table[0] = ObjectBuilder
1230-    .add(Symbol.ERROR, 13)
1231-    .add(Symbol.EXPRESSIONS, 1)
1232-    .add(Symbol.EXPRESSION, 2)
1233-    .add(Symbol.VARIABLE_SEQUENCE, 3)
1234-    .add(Symbol.TIME_AMPM, [SHIFT, 4 /* TIME_CALL */])
1235-    .add(Symbol.TIME_24, [SHIFT, 5 /* AS_NUMBER */])
1236-    .add(Symbol.NUMBER, 6)
1237-    .add(Symbol.STRING, [SHIFT, 7 /* AMPERSAND */])
1238-    .add(Symbol.PLUS, [SHIFT, 10 /* LAST_NUMBER */])
1239-    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* EQUALS */])
1240-    .add(Symbol.MINUS, [SHIFT, 9 /* PLUS */])
1241-    .add(Symbol.FUNCTION, [SHIFT, 11 /* LTE */])
1242-    .add(Symbol.CELL, 12)
1243-    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* LT */])
1244-    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* MINUS */])
1245-    .add(Symbol.VARIABLE, [SHIFT, 14 /* NOT */])
1246-    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* GT */])
1247-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */])
1248-    .build();
1249-table[1] = ObjectBuilder
1250-    .add(Symbol.END, [3])
1251-    .build();
1252-table[2] = ObjectBuilder
1253-    .add(Symbol.EOF, [SHIFT, 19 /* DIVIDE */])
1254-    .add(Symbol.AMPERSAND, [SHIFT, 20 /* TO_POWER */])
1255-    .add(Symbol.EQUALS, [SHIFT, 21 /* INVERT_NUM */])
1256-    .add(Symbol.PLUS, [SHIFT, 22 /* TO_NUMBER_NAN_AS_ZERO */])
1257-    .add(Symbol.LESS_THAN, [SHIFT, 23 /* CALL_FUNCTION_LAST_BLANK */])
1258-    .add(Symbol.GREATER_THAN, [SHIFT, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */])
1259-    .add(Symbol.NOT, [SHIFT, 25 /* I25 */])
1260-    .add(Symbol.MINUS, [SHIFT, 26 /* I26 */])
1261-    .add(Symbol.ASTERISK, [SHIFT, 27 /* I27 */])
1262-    .add(Symbol.DIVIDE, [SHIFT, 28 /* FIXED_CELL_VAL */])
1263-    .add(Symbol.CARROT, [SHIFT, 29 /* FIXED_CELL_RANGE_VAL */])
1264-    .build();
1265-table[3] = ObjectBuilder
1266+table[0 /* Start */] = ObjectBuilder_1.ObjectBuilder
1267+    .add(Symbol.ERROR, 13 /* Error */)
1268+    .add(Symbol.EXPRESSIONS, 1 /* Expressions */)
1269+    .add(Symbol.EXPRESSION, 2 /* Expression */)
1270+    .add(Symbol.VARIABLE_SEQUENCE, 3 /* VariableSeq */)
1271+    .add(Symbol.NUMBER, 6 /* Start_Number */)
1272+    .add(Symbol.STRING, [SHIFT, 7 /* Start_String */])
1273+    .add(Symbol.PLUS, [SHIFT, 10 /* PrefixUnaryPlus */])
1274+    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* LeftParen */])
1275+    .add(Symbol.MINUS, [SHIFT, 9 /* PrefixUnaryMinus */])
1276+    .add(Symbol.FUNCTION, [SHIFT, 11 /* Function */])
1277+    .add(Symbol.CELL, 12 /* Cell */)
1278+    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* FixedCell */])
1279+    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* CellUpper */])
1280+    .add(Symbol.VARIABLE, [SHIFT, 14 /* Variable */])
1281+    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* NumberUpper */])
1282+    .add(Symbol.FULL_ERROR, [SHIFT, 18 /* Pound */])
1283+    .build();
1284+table[1 /* Expressions */] = ObjectBuilder_1.ObjectBuilder
1285+    .add(Symbol.END, [ACCEPT])
1286+    .build();
1287+table[2 /* Expression */] = ObjectBuilder_1.ObjectBuilder
1288+    .add(Symbol.EOF, [SHIFT, 19 /* EOF_ReturnLast */])
1289+    .add(Symbol.AMPERSAND, [SHIFT, 20 /* Number_Ampersand */])
1290+    .add(Symbol.EQUALS, [SHIFT, 21 /* Start_Equals */])
1291+    .add(Symbol.PLUS, [SHIFT, 22 /* Number_Plus */])
1292+    .add(Symbol.LESS_THAN, [SHIFT, 23 /* LessThan */])
1293+    .add(Symbol.GREATER_THAN, [SHIFT, 24 /* GreaterThan */])
1294+    .add(Symbol.MINUS, [SHIFT, 26 /* Number_Minus */])
1295+    .add(Symbol.ASTERISK, [SHIFT, 27 /* Number_Asterisk */])
1296+    .add(Symbol.DIVIDE, [SHIFT, 28 /* Number_Divide */])
1297+    .add(Symbol.CARROT, [SHIFT, 29 /* Number_Carrot */])
1298+    .build();
1299+table[3 /* VariableSeq */] = ObjectBuilder_1.ObjectBuilder
1300     .add(Symbol.EOF, [REDUCE, 2 /* CALL_VARIABLE */])
1301     .add(Symbol.AMPERSAND, [REDUCE, 2 /* CALL_VARIABLE */])
1302     .add(Symbol.EQUALS, [REDUCE, 2 /* CALL_VARIABLE */])
1303@@ -351,65 +313,15 @@ table[3] = ObjectBuilder
1304     .add(Symbol.RIGHT_PAREN, [REDUCE, 2 /* CALL_VARIABLE */])
1305     .add(Symbol.LESS_THAN, [REDUCE, 2 /* CALL_VARIABLE */])
1306     .add(Symbol.GREATER_THAN, [REDUCE, 2 /* CALL_VARIABLE */])
1307-    .add(Symbol.NOT, [REDUCE, 2 /* CALL_VARIABLE */])
1308     .add(Symbol.MINUS, [REDUCE, 2 /* CALL_VARIABLE */])
1309     .add(Symbol.ASTERISK, [REDUCE, 2 /* CALL_VARIABLE */])
1310     .add(Symbol.DIVIDE, [REDUCE, 2 /* CALL_VARIABLE */])
1311     .add(Symbol.CARROT, [REDUCE, 2 /* CALL_VARIABLE */])
1312     .add(Symbol.SEMI_COLON, [REDUCE, 2 /* CALL_VARIABLE */])
1313     .add(Symbol.COMMA, [REDUCE, 2 /* CALL_VARIABLE */])
1314-    .add(33, [SHIFT, 30 /* CELL_VALUE */])
1315+    .add(Symbol.DECIMAL, [SHIFT, 30 /* VariableSeq_Decimal */])
1316     .build();
1317-table[3] = ObjectBuilder
1318-    .add(Symbol.EOF, [REDUCE, 2 /* CALL_VARIABLE */])
1319-    .add(Symbol.AMPERSAND, [REDUCE, 2 /* CALL_VARIABLE */])
1320-    .add(Symbol.EQUALS, [REDUCE, 2 /* CALL_VARIABLE */])
1321-    .add(Symbol.PLUS, [REDUCE, 2 /* CALL_VARIABLE */])
1322-    .add(Symbol.RIGHT_PAREN, [REDUCE, 2 /* CALL_VARIABLE */])
1323-    .add(Symbol.LESS_THAN, [REDUCE, 2 /* CALL_VARIABLE */])
1324-    .add(Symbol.GREATER_THAN, [REDUCE, 2 /* CALL_VARIABLE */])
1325-    .add(Symbol.NOT, [REDUCE, 2 /* CALL_VARIABLE */])
1326-    .add(Symbol.MINUS, [REDUCE, 2 /* CALL_VARIABLE */])
1327-    .add(Symbol.ASTERISK, [REDUCE, 2 /* CALL_VARIABLE */])
1328-    .add(Symbol.DIVIDE, [REDUCE, 2 /* CALL_VARIABLE */])
1329-    .add(Symbol.CARROT, [REDUCE, 2 /* CALL_VARIABLE */])
1330-    .add(Symbol.SEMI_COLON, [REDUCE, 2 /* CALL_VARIABLE */])
1331-    .add(Symbol.COMMA, [REDUCE, 2 /* CALL_VARIABLE */])
1332-    .add(33, [SHIFT, 30 /* CELL_VALUE */])
1333-    .build();
1334-table[4] = ObjectBuilder
1335-    .add(Symbol.EOF, [REDUCE, 3 /* TIME_CALL_TRUE */])
1336-    .add(Symbol.AMPERSAND, [REDUCE, 3 /* TIME_CALL_TRUE */])
1337-    .add(Symbol.EQUALS, [REDUCE, 3 /* TIME_CALL_TRUE */])
1338-    .add(Symbol.PLUS, [REDUCE, 3 /* TIME_CALL_TRUE */])
1339-    .add(Symbol.RIGHT_PAREN, [REDUCE, 3 /* TIME_CALL_TRUE */])
1340-    .add(Symbol.LESS_THAN, [REDUCE, 3 /* TIME_CALL_TRUE */])
1341-    .add(Symbol.GREATER_THAN, [REDUCE, 3 /* TIME_CALL_TRUE */])
1342-    .add(Symbol.NOT, [REDUCE, 3 /* TIME_CALL_TRUE */])
1343-    .add(Symbol.MINUS, [REDUCE, 3 /* TIME_CALL_TRUE */])
1344-    .add(Symbol.ASTERISK, [REDUCE, 3 /* TIME_CALL_TRUE */])
1345-    .add(Symbol.DIVIDE, [REDUCE, 3 /* TIME_CALL_TRUE */])
1346-    .add(Symbol.CARROT, [REDUCE, 3 /* TIME_CALL_TRUE */])
1347-    .add(Symbol.SEMI_COLON, [REDUCE, 3 /* TIME_CALL_TRUE */])
1348-    .add(Symbol.COMMA, [REDUCE, 3 /* TIME_CALL_TRUE */])
1349-    .build();
1350-table[5] = ObjectBuilder
1351-    .add(Symbol.EOF, [REDUCE, 4 /* TIME_CALL */])
1352-    .add(Symbol.AMPERSAND, [REDUCE, 4 /* TIME_CALL */])
1353-    .add(Symbol.EQUALS, [REDUCE, 4 /* TIME_CALL */])
1354-    .add(Symbol.PLUS, [REDUCE, 4 /* TIME_CALL */])
1355-    .add(Symbol.RIGHT_PAREN, [REDUCE, 4 /* TIME_CALL */])
1356-    .add(Symbol.LESS_THAN, [REDUCE, 4 /* TIME_CALL */])
1357-    .add(Symbol.GREATER_THAN, [REDUCE, 4 /* TIME_CALL */])
1358-    .add(Symbol.NOT, [REDUCE, 4 /* TIME_CALL */])
1359-    .add(Symbol.MINUS, [REDUCE, 4 /* TIME_CALL */])
1360-    .add(Symbol.ASTERISK, [REDUCE, 4 /* TIME_CALL */])
1361-    .add(Symbol.DIVIDE, [REDUCE, 4 /* TIME_CALL */])
1362-    .add(Symbol.CARROT, [REDUCE, 4 /* TIME_CALL */])
1363-    .add(Symbol.SEMI_COLON, [REDUCE, 4 /* TIME_CALL */])
1364-    .add(Symbol.COMMA, [REDUCE, 4 /* TIME_CALL */])
1365-    .build();
1366-table[6] = ObjectBuilder
1367+table[6 /* Start_Number */] = ObjectBuilder_1.ObjectBuilder
1368     .add(Symbol.EOF, [REDUCE, 5 /* AS_NUMBER */])
1369     .add(Symbol.AMPERSAND, [REDUCE, 5 /* AS_NUMBER */])
1370     .add(Symbol.EQUALS, [REDUCE, 5 /* AS_NUMBER */])
1371@@ -417,16 +329,15 @@ table[6] = ObjectBuilder
1372     .add(Symbol.RIGHT_PAREN, [REDUCE, 5 /* AS_NUMBER */])
1373     .add(Symbol.LESS_THAN, [REDUCE, 5 /* AS_NUMBER */])
1374     .add(Symbol.GREATER_THAN, [REDUCE, 5 /* AS_NUMBER */])
1375-    .add(Symbol.NOT, [REDUCE, 5 /* AS_NUMBER */])
1376     .add(Symbol.MINUS, [REDUCE, 5 /* AS_NUMBER */])
1377     .add(Symbol.ASTERISK, [REDUCE, 5 /* AS_NUMBER */])
1378     .add(Symbol.DIVIDE, [REDUCE, 5 /* AS_NUMBER */])
1379     .add(Symbol.CARROT, [REDUCE, 5 /* AS_NUMBER */])
1380     .add(Symbol.SEMI_COLON, [REDUCE, 5 /* AS_NUMBER */])
1381     .add(Symbol.COMMA, [REDUCE, 5 /* AS_NUMBER */])
1382-    .add(Symbol.PERCENT, [SHIFT, 31 /* CELL_RANGE_VALUE */])
1383+    .add(Symbol.PERCENT, [SHIFT, 31 /* Number_Percent */])
1384     .build();
1385-table[7] = ObjectBuilder
1386+table[7 /* Start_String */] = ObjectBuilder_1.ObjectBuilder
1387     .add(Symbol.EOF, [REDUCE, 6 /* AS_STRING */])
1388     .add(Symbol.AMPERSAND, [REDUCE, 6 /* AS_STRING */])
1389     .add(Symbol.EQUALS, [REDUCE, 6 /* AS_STRING */])
1390@@ -434,7 +345,6 @@ table[7] = ObjectBuilder
1391     .add(Symbol.RIGHT_PAREN, [REDUCE, 6 /* AS_STRING */])
1392     .add(Symbol.LESS_THAN, [REDUCE, 6 /* AS_STRING */])
1393     .add(Symbol.GREATER_THAN, [REDUCE, 6 /* AS_STRING */])
1394-    .add(Symbol.NOT, [REDUCE, 6 /* AS_STRING */])
1395     .add(Symbol.MINUS, [REDUCE, 6 /* AS_STRING */])
1396     .add(Symbol.ASTERISK, [REDUCE, 6 /* AS_STRING */])
1397     .add(Symbol.DIVIDE, [REDUCE, 6 /* AS_STRING */])
1398@@ -442,102 +352,94 @@ table[7] = ObjectBuilder
1399     .add(Symbol.SEMI_COLON, [REDUCE, 6 /* AS_STRING */])
1400     .add(Symbol.COMMA, [REDUCE, 6 /* AS_STRING */])
1401     .build();
1402-table[8] = ObjectBuilder
1403-    .add(Symbol.ERROR, 13)
1404-    .add(Symbol.EXPRESSION, 32)
1405-    .add(Symbol.VARIABLE_SEQUENCE, 3)
1406-    .add(Symbol.TIME_AMPM, [SHIFT, 4 /* TIME_CALL */])
1407-    .add(Symbol.TIME_24, [SHIFT, 5 /* AS_NUMBER */])
1408-    .add(Symbol.NUMBER, 6)
1409-    .add(Symbol.STRING, [SHIFT, 7 /* AMPERSAND */])
1410-    .add(Symbol.PLUS, [SHIFT, 10 /* LAST_NUMBER */])
1411-    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* EQUALS */])
1412-    .add(Symbol.MINUS, [SHIFT, 9 /* PLUS */])
1413-    .add(Symbol.FUNCTION, [SHIFT, 11 /* LTE */])
1414-    .add(Symbol.CELL, 12)
1415-    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* LT */])
1416-    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* MINUS */])
1417-    .add(Symbol.VARIABLE, [SHIFT, 14 /* NOT */])
1418-    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* GT */])
1419-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */])
1420-    .build();
1421-table[9] = ObjectBuilder
1422-    .add(Symbol.ERROR, 13)
1423-    .add(Symbol.EXPRESSION, 33)
1424-    .add(Symbol.VARIABLE_SEQUENCE, 3)
1425-    .add(Symbol.TIME_AMPM, [SHIFT, 4 /* TIME_CALL */])
1426-    .add(Symbol.TIME_24, [SHIFT, 5 /* AS_NUMBER */])
1427-    .add(Symbol.NUMBER, 6)
1428-    .add(Symbol.STRING, [SHIFT, 7 /* AMPERSAND */])
1429-    .add(Symbol.PLUS, [SHIFT, 10 /* LAST_NUMBER */])
1430-    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* EQUALS */])
1431-    .add(Symbol.MINUS, [SHIFT, 9 /* PLUS */])
1432-    .add(Symbol.FUNCTION, [SHIFT, 11 /* LTE */])
1433-    .add(Symbol.CELL, 12)
1434-    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* LT */])
1435-    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* MINUS */])
1436-    .add(Symbol.VARIABLE, [SHIFT, 14 /* NOT */])
1437-    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* GT */])
1438-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */])
1439-    .build();
1440-table[10] = ObjectBuilder
1441-    .add(Symbol.ERROR, 13)
1442-    .add(Symbol.EXPRESSION, 34)
1443-    .add(Symbol.VARIABLE_SEQUENCE, 3)
1444-    .add(Symbol.TIME_AMPM, [SHIFT, 4 /* TIME_CALL */])
1445-    .add(Symbol.TIME_24, [SHIFT, 5 /* AS_NUMBER */])
1446-    .add(Symbol.NUMBER, 6)
1447-    .add(Symbol.STRING, [SHIFT, 7 /* AMPERSAND */])
1448-    .add(Symbol.PLUS, [SHIFT, 10 /* LAST_NUMBER */])
1449-    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* EQUALS */])
1450-    .add(Symbol.MINUS, [SHIFT, 9 /* PLUS */])
1451-    .add(Symbol.FUNCTION, [SHIFT, 11 /* LTE */])
1452-    .add(Symbol.CELL, 12)
1453-    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* LT */])
1454-    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* MINUS */])
1455-    .add(Symbol.VARIABLE, [SHIFT, 14 /* NOT */])
1456-    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* GT */])
1457-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */])
1458-    .build();
1459-table[11] = ObjectBuilder
1460-    .add(Symbol.LEFT_PAREN, [SHIFT, 35 /* REDUCE_PERCENT */])
1461-    .build();
1462-table[12] = ObjectBuilder
1463-    .add(Symbol.EOF, [REDUCE, 25 /* I25 */])
1464-    .add(Symbol.AMPERSAND, [REDUCE, 25 /* I25 */])
1465-    .add(Symbol.EQUALS, [REDUCE, 25 /* I25 */])
1466-    .add(Symbol.PLUS, [REDUCE, 25 /* I25 */])
1467-    .add(Symbol.RIGHT_PAREN, [REDUCE, 25 /* I25 */])
1468-    .add(Symbol.LESS_THAN, [REDUCE, 25 /* I25 */])
1469-    .add(Symbol.GREATER_THAN, [REDUCE, 25 /* I25 */])
1470-    .add(Symbol.NOT, [REDUCE, 25 /* I25 */])
1471-    .add(Symbol.MINUS, [REDUCE, 25 /* I25 */])
1472-    .add(Symbol.ASTERISK, [REDUCE, 25 /* I25 */])
1473-    .add(Symbol.DIVIDE, [REDUCE, 25 /* I25 */])
1474-    .add(Symbol.CARROT, [REDUCE, 25 /* I25 */])
1475-    .add(Symbol.SEMI_COLON, [REDUCE, 25 /* I25 */])
1476-    .add(Symbol.COMMA, [REDUCE, 25 /* I25 */])
1477-    .build();
1478-table[13] = ObjectBuilder
1479-    .add(Symbol.ERROR, 36)
1480-    .add(Symbol.EOF, [REDUCE, 26 /* I26 */])
1481-    .add(Symbol.AMPERSAND, [REDUCE, 26 /* I26 */])
1482-    .add(Symbol.EQUALS, [REDUCE, 26 /* I26 */])
1483-    .add(Symbol.PLUS, [REDUCE, 26 /* I26 */])
1484-    .add(Symbol.RIGHT_PAREN, [REDUCE, 26 /* I26 */])
1485-    .add(Symbol.LESS_THAN, [REDUCE, 26 /* I26 */])
1486-    .add(Symbol.GREATER_THAN, [REDUCE, 26 /* I26 */])
1487-    .add(Symbol.NOT, [REDUCE, 26 /* I26 */])
1488-    .add(Symbol.MINUS, [REDUCE, 26 /* I26 */])
1489-    .add(Symbol.ASTERISK, [REDUCE, 26 /* I26 */])
1490-    .add(Symbol.DIVIDE, [REDUCE, 26 /* I26 */])
1491-    .add(Symbol.CARROT, [REDUCE, 26 /* I26 */])
1492-    .add(Symbol.SEMI_COLON, [REDUCE, 26 /* I26 */])
1493-    .add(Symbol.COMMA, [REDUCE, 26 /* I26 */])
1494-    .add(Symbol.VARIABLE, [SHIFT, 37 /* ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH */])
1495-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */])
1496-    .build();
1497-table[14] = ObjectBuilder
1498+table[8 /* LeftParen */] = ObjectBuilder_1.ObjectBuilder
1499+    .add(Symbol.ERROR, 13 /* Error */)
1500+    .add(Symbol.EXPRESSION, 32 /* LeftParen_Expression */)
1501+    .add(Symbol.VARIABLE_SEQUENCE, 3 /* VariableSeq */)
1502+    .add(Symbol.NUMBER, 6 /* Start_Number */)
1503+    .add(Symbol.STRING, [SHIFT, 7 /* Start_String */])
1504+    .add(Symbol.PLUS, [SHIFT, 10 /* PrefixUnaryPlus */])
1505+    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* LeftParen */])
1506+    .add(Symbol.MINUS, [SHIFT, 9 /* PrefixUnaryMinus */])
1507+    .add(Symbol.FUNCTION, [SHIFT, 11 /* Function */])
1508+    .add(Symbol.CELL, 12 /* Cell */)
1509+    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* FixedCell */])
1510+    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* CellUpper */])
1511+    .add(Symbol.VARIABLE, [SHIFT, 14 /* Variable */])
1512+    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* NumberUpper */])
1513+    .add(Symbol.FULL_ERROR, [SHIFT, 18 /* Pound */])
1514+    .build();
1515+table[9 /* PrefixUnaryMinus */] = ObjectBuilder_1.ObjectBuilder
1516+    .add(Symbol.ERROR, 13 /* Error */)
1517+    .add(Symbol.EXPRESSION, 33 /* PrefixUnaryMinus_Expression */)
1518+    .add(Symbol.VARIABLE_SEQUENCE, 3 /* VariableSeq */)
1519+    .add(Symbol.NUMBER, 6 /* Start_Number */)
1520+    .add(Symbol.STRING, [SHIFT, 7 /* Start_String */])
1521+    .add(Symbol.PLUS, [SHIFT, 10 /* PrefixUnaryPlus */])
1522+    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* LeftParen */])
1523+    .add(Symbol.MINUS, [SHIFT, 9 /* PrefixUnaryMinus */])
1524+    .add(Symbol.FUNCTION, [SHIFT, 11 /* Function */])
1525+    .add(Symbol.CELL, 12 /* Cell */)
1526+    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* FixedCell */])
1527+    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* CellUpper */])
1528+    .add(Symbol.VARIABLE, [SHIFT, 14 /* Variable */])
1529+    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* NumberUpper */])
1530+    .add(Symbol.FULL_ERROR, [SHIFT, 18 /* Pound */])
1531+    .build();
1532+table[10 /* PrefixUnaryPlus */] = ObjectBuilder_1.ObjectBuilder
1533+    .add(Symbol.ERROR, 13 /* Error */)
1534+    .add(Symbol.EXPRESSION, 34 /* PrefixUnaryPlus_Expression */)
1535+    .add(Symbol.VARIABLE_SEQUENCE, 3 /* VariableSeq */)
1536+    .add(Symbol.NUMBER, 6 /* Start_Number */)
1537+    .add(Symbol.STRING, [SHIFT, 7 /* Start_String */])
1538+    .add(Symbol.PLUS, [SHIFT, 10 /* PrefixUnaryPlus */])
1539+    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* LeftParen */])
1540+    .add(Symbol.MINUS, [SHIFT, 9 /* PrefixUnaryMinus */])
1541+    .add(Symbol.FUNCTION, [SHIFT, 11 /* Function */])
1542+    .add(Symbol.CELL, 12 /* Cell */)
1543+    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* FixedCell */])
1544+    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* CellUpper */])
1545+    .add(Symbol.VARIABLE, [SHIFT, 14 /* Variable */])
1546+    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* NumberUpper */])
1547+    .add(Symbol.FULL_ERROR, [SHIFT, 18 /* Pound */])
1548+    .build();
1549+table[11 /* Function */] = ObjectBuilder_1.ObjectBuilder
1550+    .add(Symbol.LEFT_PAREN, [SHIFT, 35 /* Function_LeftParen */])
1551+    .build();
1552+table[12 /* Cell */] = ObjectBuilder_1.ObjectBuilder
1553+    .add(Symbol.EOF, [REDUCE, 25 /* CELL_VALUE_AS_EXPRESSION */])
1554+    .add(Symbol.AMPERSAND, [REDUCE, 25 /* CELL_VALUE_AS_EXPRESSION */])
1555+    .add(Symbol.EQUALS, [REDUCE, 25 /* CELL_VALUE_AS_EXPRESSION */])
1556+    .add(Symbol.PLUS, [REDUCE, 25 /* CELL_VALUE_AS_EXPRESSION */])
1557+    .add(Symbol.RIGHT_PAREN, [REDUCE, 25 /* CELL_VALUE_AS_EXPRESSION */])
1558+    .add(Symbol.LESS_THAN, [REDUCE, 25 /* CELL_VALUE_AS_EXPRESSION */])
1559+    .add(Symbol.GREATER_THAN, [REDUCE, 25 /* CELL_VALUE_AS_EXPRESSION */])
1560+    .add(Symbol.MINUS, [REDUCE, 25 /* CELL_VALUE_AS_EXPRESSION */])
1561+    .add(Symbol.ASTERISK, [REDUCE, 25 /* CELL_VALUE_AS_EXPRESSION */])
1562+    .add(Symbol.DIVIDE, [REDUCE, 25 /* CELL_VALUE_AS_EXPRESSION */])
1563+    .add(Symbol.CARROT, [REDUCE, 25 /* CELL_VALUE_AS_EXPRESSION */])
1564+    .add(Symbol.SEMI_COLON, [REDUCE, 25 /* CELL_VALUE_AS_EXPRESSION */])
1565+    .add(Symbol.COMMA, [REDUCE, 25 /* CELL_VALUE_AS_EXPRESSION */])
1566+    .build();
1567+table[13 /* Error */] = ObjectBuilder_1.ObjectBuilder
1568+    .add(Symbol.ERROR, 36 /* Error_Error */)
1569+    .add(Symbol.EOF, [REDUCE, 26 /* ERROR_AND_CONTINUE */])
1570+    .add(Symbol.AMPERSAND, [REDUCE, 26 /* ERROR_AND_CONTINUE */])
1571+    .add(Symbol.EQUALS, [REDUCE, 26 /* ERROR_AND_CONTINUE */])
1572+    .add(Symbol.PLUS, [REDUCE, 26 /* ERROR_AND_CONTINUE */])
1573+    .add(Symbol.RIGHT_PAREN, [REDUCE, 26 /* ERROR_AND_CONTINUE */])
1574+    .add(Symbol.LESS_THAN, [REDUCE, 26 /* ERROR_AND_CONTINUE */])
1575+    .add(Symbol.GREATER_THAN, [REDUCE, 26 /* ERROR_AND_CONTINUE */])
1576+    .add(Symbol.MINUS, [REDUCE, 26 /* ERROR_AND_CONTINUE */])
1577+    .add(Symbol.ASTERISK, [REDUCE, 26 /* ERROR_AND_CONTINUE */])
1578+    .add(Symbol.DIVIDE, [REDUCE, 26 /* ERROR_AND_CONTINUE */])
1579+    .add(Symbol.CARROT, [REDUCE, 26 /* ERROR_AND_CONTINUE */])
1580+    .add(Symbol.SEMI_COLON, [REDUCE, 26 /* ERROR_AND_CONTINUE */])
1581+    .add(Symbol.COMMA, [REDUCE, 26 /* ERROR_AND_CONTINUE */])
1582+    .add(Symbol.VARIABLE, [SHIFT, 37])
1583+    .add(Symbol.FULL_ERROR, [SHIFT, 18])
1584+    .build();
1585+table[14 /* Variable */] = ObjectBuilder_1.ObjectBuilder
1586     .add(Symbol.EOF, [REDUCE, 36 /* WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY */])
1587     .add(Symbol.AMPERSAND, [REDUCE, 36 /* WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY */])
1588     .add(Symbol.EQUALS, [REDUCE, 36 /* WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY */])
1589@@ -545,17 +447,16 @@ table[14] = ObjectBuilder
1590     .add(Symbol.RIGHT_PAREN, [REDUCE, 36 /* WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY */])
1591     .add(Symbol.LESS_THAN, [REDUCE, 36 /* WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY */])
1592     .add(Symbol.GREATER_THAN, [REDUCE, 36 /* WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY */])
1593-    .add(Symbol.NOT, [REDUCE, 36 /* WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY */])
1594     .add(Symbol.MINUS, [REDUCE, 36 /* WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY */])
1595     .add(Symbol.ASTERISK, [REDUCE, 36 /* WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY */])
1596     .add(Symbol.DIVIDE, [REDUCE, 36 /* WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY */])
1597     .add(Symbol.CARROT, [REDUCE, 36 /* WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY */])
1598     .add(Symbol.SEMI_COLON, [REDUCE, 36 /* WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY */])
1599     .add(Symbol.COMMA, [REDUCE, 36 /* WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY */])
1600-    .add(33, [REDUCE, 36 /* WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY */])
1601-    .add(Symbol.POUND, [SHIFT, 38 /* REFLEXIVE_REDUCE */])
1602+    .add(Symbol.DECIMAL, [REDUCE, 36 /* WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY */])
1603+    .add(Symbol.FULL_ERROR, [SHIFT, 38])
1604     .build();
1605-table[15] = ObjectBuilder
1606+table[15 /* NumberUpper */] = ObjectBuilder_1.ObjectBuilder
1607     .add(Symbol.EOF, [REDUCE, 38 /* REFLEXIVE_REDUCE */])
1608     .add(Symbol.AMPERSAND, [REDUCE, 38 /* REFLEXIVE_REDUCE */])
1609     .add(Symbol.EQUALS, [REDUCE, 38 /* REFLEXIVE_REDUCE */])
1610@@ -563,18 +464,17 @@ table[15] = ObjectBuilder
1611     .add(Symbol.RIGHT_PAREN, [REDUCE, 38 /* REFLEXIVE_REDUCE */])
1612     .add(Symbol.LESS_THAN, [REDUCE, 38 /* REFLEXIVE_REDUCE */])
1613     .add(Symbol.GREATER_THAN, [REDUCE, 38 /* REFLEXIVE_REDUCE */])
1614-    .add(Symbol.NOT, [REDUCE, 38 /* REFLEXIVE_REDUCE */])
1615     .add(Symbol.MINUS, [REDUCE, 38 /* REFLEXIVE_REDUCE */])
1616     .add(Symbol.ASTERISK, [REDUCE, 38 /* REFLEXIVE_REDUCE */])
1617     .add(Symbol.DIVIDE, [REDUCE, 38 /* REFLEXIVE_REDUCE */])
1618     .add(Symbol.CARROT, [REDUCE, 38 /* REFLEXIVE_REDUCE */])
1619     .add(Symbol.SEMI_COLON, [REDUCE, 38 /* REFLEXIVE_REDUCE */])
1620     .add(Symbol.COMMA, [REDUCE, 38 /* REFLEXIVE_REDUCE */])
1621-    .add(33, [SHIFT, 39 /* REDUCE_FLOAT */])
1622+    .add(Symbol.DECIMAL, [SHIFT, 39])
1623     .add(Symbol.PERCENT, [REDUCE, 38 /* REFLEXIVE_REDUCE */])
1624     .add(38, [REDUCE, 38 /* REFLEXIVE_REDUCE */])
1625     .build();
1626-table[16] = ObjectBuilder
1627+table[16 /* FixedCell */] = ObjectBuilder_1.ObjectBuilder
1628     .add(Symbol.EOF, [REDUCE, 28 /* FIXED_CELL_VAL */])
1629     .add(Symbol.AMPERSAND, [REDUCE, 28 /* FIXED_CELL_VAL */])
1630     .add(Symbol.EQUALS, [REDUCE, 28 /* FIXED_CELL_VAL */])
1631@@ -582,16 +482,15 @@ table[16] = ObjectBuilder
1632     .add(Symbol.RIGHT_PAREN, [REDUCE, 28 /* FIXED_CELL_VAL */])
1633     .add(Symbol.LESS_THAN, [REDUCE, 28 /* FIXED_CELL_VAL */])
1634     .add(Symbol.GREATER_THAN, [REDUCE, 28 /* FIXED_CELL_VAL */])
1635-    .add(Symbol.NOT, [REDUCE, 28 /* FIXED_CELL_VAL */])
1636     .add(Symbol.MINUS, [REDUCE, 28 /* FIXED_CELL_VAL */])
1637     .add(Symbol.ASTERISK, [REDUCE, 28 /* FIXED_CELL_VAL */])
1638     .add(Symbol.DIVIDE, [REDUCE, 28 /* FIXED_CELL_VAL */])
1639     .add(Symbol.CARROT, [REDUCE, 28 /* FIXED_CELL_VAL */])
1640-    .add(Symbol.COLON, [SHIFT, 40 /* REDUCE_PREV_AS_PERCENT */])
1641+    .add(Symbol.COLON, [SHIFT, 40])
1642     .add(Symbol.SEMI_COLON, [REDUCE, 28 /* FIXED_CELL_VAL */])
1643     .add(Symbol.COMMA, [REDUCE, 28 /* FIXED_CELL_VAL */])
1644     .build();
1645-table[17] = ObjectBuilder
1646+table[17 /* CellUpper */] = ObjectBuilder_1.ObjectBuilder
1647     .add(Symbol.EOF, [REDUCE, 30 /* CELL_VALUE */])
1648     .add(Symbol.AMPERSAND, [REDUCE, 30 /* CELL_VALUE */])
1649     .add(Symbol.EQUALS, [REDUCE, 30 /* CELL_VALUE */])
1650@@ -599,221 +498,200 @@ table[17] = ObjectBuilder
1651     .add(Symbol.RIGHT_PAREN, [REDUCE, 30 /* CELL_VALUE */])
1652     .add(Symbol.LESS_THAN, [REDUCE, 30 /* CELL_VALUE */])
1653     .add(Symbol.GREATER_THAN, [REDUCE, 30 /* CELL_VALUE */])
1654-    .add(Symbol.NOT, [REDUCE, 30 /* CELL_VALUE */])
1655     .add(Symbol.MINUS, [REDUCE, 30 /* CELL_VALUE */])
1656     .add(Symbol.ASTERISK, [REDUCE, 30 /* CELL_VALUE */])
1657     .add(Symbol.DIVIDE, [REDUCE, 30 /* CELL_VALUE */])
1658     .add(Symbol.CARROT, [REDUCE, 30 /* CELL_VALUE */])
1659-    .add(Symbol.COLON, [SHIFT, 41 /* REDUCE_LAST_THREE_A */])
1660+    .add(Symbol.COLON, [SHIFT, 41])
1661     .add(Symbol.SEMI_COLON, [REDUCE, 30 /* CELL_VALUE */])
1662     .add(Symbol.COMMA, [REDUCE, 30 /* CELL_VALUE */])
1663     .build();
1664-table[18] = ObjectBuilder
1665-    .add(Symbol.VARIABLE, [SHIFT, 42 /* REDUCE_LAST_THREE_B */])
1666+table[18 /* Pound */] = ObjectBuilder_1.ObjectBuilder
1667+    .add(Symbol.VARIABLE, [SHIFT, 42 /* Pound_Variable */])
1668     .add(Symbol.EOF, [REDUCE, 43 /* AS_ERROR */])
1669     .add(Symbol.RIGHT_PAREN, [REDUCE, 43 /* AS_ERROR */])
1670     .add(Symbol.COMMA, [REDUCE, 43 /* AS_ERROR */])
1671     .build();
1672-table[19] = ObjectBuilder
1673-    .add(Symbol.END, [ACCEPT, 1 /* RETURN_LAST */])
1674-    .build();
1675-table[20] = ObjectBuilder
1676-    .add(Symbol.ERROR, 13)
1677-    .add(Symbol.EXPRESSION, 43)
1678-    .add(Symbol.VARIABLE_SEQUENCE, 3)
1679-    .add(Symbol.TIME_AMPM, [SHIFT, 4 /* TIME_CALL */])
1680-    .add(Symbol.TIME_24, [SHIFT, 5 /* AS_NUMBER */])
1681-    .add(Symbol.NUMBER, 6)
1682-    .add(Symbol.STRING, [SHIFT, 7 /* AMPERSAND */])
1683-    .add(Symbol.PLUS, [SHIFT, 10 /* LAST_NUMBER */])
1684-    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* EQUALS */])
1685-    .add(Symbol.MINUS, [SHIFT, 9 /* PLUS */])
1686-    .add(Symbol.FUNCTION, [SHIFT, 11 /* LTE */])
1687-    .add(Symbol.CELL, 12)
1688-    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* LT */])
1689-    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* MINUS */])
1690-    .add(Symbol.VARIABLE, [SHIFT, 14 /* NOT */])
1691-    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* GT */])
1692-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */])
1693-    .build();
1694-table[21] = ObjectBuilder
1695-    .add(Symbol.ERROR, 13)
1696-    .add(Symbol.EXPRESSION, 44)
1697-    .add(Symbol.VARIABLE_SEQUENCE, 3)
1698-    .add(Symbol.TIME_AMPM, [SHIFT, 4 /* TIME_CALL */])
1699-    .add(Symbol.TIME_24, [SHIFT, 5 /* AS_NUMBER */])
1700-    .add(Symbol.NUMBER, 6)
1701-    .add(Symbol.STRING, [SHIFT, 7 /* AMPERSAND */])
1702-    .add(Symbol.PLUS, [SHIFT, 10 /* LAST_NUMBER */])
1703-    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* EQUALS */])
1704-    .add(Symbol.MINUS, [SHIFT, 9 /* PLUS */])
1705-    .add(Symbol.FUNCTION, [SHIFT, 11 /* LTE */])
1706-    .add(Symbol.CELL, 12)
1707-    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* LT */])
1708-    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* MINUS */])
1709-    .add(Symbol.VARIABLE, [SHIFT, 14 /* NOT */])
1710-    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* GT */])
1711-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */])
1712-    .build();
1713-table[22] = ObjectBuilder
1714-    .add(Symbol.ERROR, 13)
1715-    .add(Symbol.EXPRESSION, 45)
1716-    .add(Symbol.VARIABLE_SEQUENCE, 3)
1717-    .add(Symbol.TIME_AMPM, [SHIFT, 4 /* TIME_CALL */])
1718-    .add(Symbol.TIME_24, [SHIFT, 5 /* AS_NUMBER */])
1719-    .add(Symbol.NUMBER, 6)
1720-    .add(Symbol.STRING, [SHIFT, 7 /* AMPERSAND */])
1721-    .add(Symbol.PLUS, [SHIFT, 10 /* LAST_NUMBER */])
1722-    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* EQUALS */])
1723-    .add(Symbol.MINUS, [SHIFT, 9 /* PLUS */])
1724-    .add(Symbol.FUNCTION, [SHIFT, 11 /* LTE */])
1725-    .add(Symbol.CELL, 12)
1726-    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* LT */])
1727-    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* MINUS */])
1728-    .add(Symbol.VARIABLE, [SHIFT, 14 /* NOT */])
1729-    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* GT */])
1730-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */])
1731-    .build();
1732-table[23] = ObjectBuilder
1733-    .add(Symbol.ERROR, 13)
1734-    .add(Symbol.EXPRESSION, 48)
1735-    .add(Symbol.VARIABLE_SEQUENCE, 3)
1736-    .add(Symbol.TIME_AMPM, [SHIFT, 4 /* TIME_CALL */])
1737-    .add(Symbol.TIME_24, [SHIFT, 5 /* AS_NUMBER */])
1738-    .add(Symbol.NUMBER, 6)
1739-    .add(Symbol.STRING, [SHIFT, 7 /* AMPERSAND */])
1740-    .add(Symbol.EQUALS, [SHIFT, 46])
1741-    .add(Symbol.PLUS, [SHIFT, 10 /* LAST_NUMBER */])
1742-    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* EQUALS */])
1743-    .add(Symbol.GREATER_THAN, [SHIFT, 47])
1744-    .add(Symbol.MINUS, [SHIFT, 9 /* PLUS */])
1745-    .add(Symbol.FUNCTION, [SHIFT, 11 /* LTE */])
1746-    .add(Symbol.CELL, 12)
1747-    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* LT */])
1748-    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* MINUS */])
1749-    .add(Symbol.VARIABLE, [SHIFT, 14 /* NOT */])
1750-    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* GT */])
1751-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */])
1752-    .build();
1753-table[24] = ObjectBuilder
1754-    .add(Symbol.ERROR, 13)
1755-    .add(Symbol.EXPRESSION, 50)
1756-    .add(Symbol.VARIABLE_SEQUENCE, 3)
1757-    .add(Symbol.TIME_AMPM, [SHIFT, 4 /* TIME_CALL */])
1758-    .add(Symbol.TIME_24, [SHIFT, 5 /* AS_NUMBER */])
1759-    .add(Symbol.NUMBER, 6)
1760-    .add(Symbol.STRING, [SHIFT, 7 /* AMPERSAND */])
1761-    .add(Symbol.EQUALS, [SHIFT, 49])
1762-    .add(Symbol.PLUS, [SHIFT, 10 /* LAST_NUMBER */])
1763-    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* EQUALS */])
1764-    .add(Symbol.MINUS, [SHIFT, 9 /* PLUS */])
1765-    .add(Symbol.FUNCTION, [SHIFT, 11 /* LTE */])
1766-    .add(Symbol.CELL, 12)
1767-    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* LT */])
1768-    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* MINUS */])
1769-    .add(Symbol.VARIABLE, [SHIFT, 14 /* NOT */])
1770-    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* GT */])
1771-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */])
1772-    .build();
1773-table[25] = ObjectBuilder
1774-    .add(Symbol.ERROR, 13)
1775+table[19 /* EOF_ReturnLast */] = ObjectBuilder_1.ObjectBuilder
1776+    .add(Symbol.END, [REDUCE, 1 /* RETURN_LAST */])
1777+    .build();
1778+table[20 /* Number_Ampersand */] = ObjectBuilder_1.ObjectBuilder
1779+    .add(Symbol.ERROR, 13 /* Error */)
1780+    .add(Symbol.EXPRESSION, 43 /* Number_Ampersand_Expression */)
1781+    .add(Symbol.VARIABLE_SEQUENCE, 3 /* VariableSeq */)
1782+    .add(Symbol.NUMBER, 6 /* Start_Number */)
1783+    .add(Symbol.STRING, [SHIFT, 7 /* Start_String */])
1784+    .add(Symbol.PLUS, [SHIFT, 10 /* PrefixUnaryPlus */])
1785+    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* LeftParen */])
1786+    .add(Symbol.MINUS, [SHIFT, 9 /* PrefixUnaryMinus */])
1787+    .add(Symbol.FUNCTION, [SHIFT, 11 /* Function */])
1788+    .add(Symbol.CELL, 12 /* Cell */)
1789+    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* FixedCell */])
1790+    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* CellUpper */])
1791+    .add(Symbol.VARIABLE, [SHIFT, 14 /* Variable */])
1792+    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* NumberUpper */])
1793+    .add(Symbol.FULL_ERROR, [SHIFT, 18])
1794+    .build();
1795+table[21 /* Start_Equals */] = ObjectBuilder_1.ObjectBuilder
1796+    .add(Symbol.ERROR, 13 /* Error */)
1797+    .add(Symbol.EXPRESSION, 44 /* Start_Equals_Expression */)
1798+    .add(Symbol.VARIABLE_SEQUENCE, 3 /* VariableSeq */)
1799+    .add(Symbol.NUMBER, 6 /* Start_Number */)
1800+    .add(Symbol.STRING, [SHIFT, 7 /* Start_String */])
1801+    .add(Symbol.PLUS, [SHIFT, 10 /* PrefixUnaryPlus */])
1802+    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* LeftParen */])
1803+    .add(Symbol.MINUS, [SHIFT, 9 /* PrefixUnaryMinus */])
1804+    .add(Symbol.FUNCTION, [SHIFT, 11 /* Function */])
1805+    .add(Symbol.CELL, 12 /* Cell */)
1806+    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* FixedCell */])
1807+    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* CellUpper */])
1808+    .add(Symbol.VARIABLE, [SHIFT, 14 /* Variable */])
1809+    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* NumberUpper */])
1810+    .add(Symbol.FULL_ERROR, [SHIFT, 18 /* Pound */])
1811+    .build();
1812+table[22 /* Number_Plus */] = ObjectBuilder_1.ObjectBuilder
1813+    .add(Symbol.ERROR, 13 /* Error */)
1814+    .add(Symbol.EXPRESSION, 45 /* AddTwoNumbers */)
1815+    .add(Symbol.VARIABLE_SEQUENCE, 3 /* VariableSeq */)
1816+    .add(Symbol.NUMBER, 6 /* Start_Number */)
1817+    .add(Symbol.STRING, [SHIFT, 7 /* Start_String */])
1818+    .add(Symbol.PLUS, [SHIFT, 10 /* PrefixUnaryPlus */])
1819+    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* LeftParen */])
1820+    .add(Symbol.MINUS, [SHIFT, 9 /* PrefixUnaryMinus */])
1821+    .add(Symbol.FUNCTION, [SHIFT, 11 /* Function */])
1822+    .add(Symbol.CELL, 12 /* Cell */)
1823+    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* FixedCell */])
1824+    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* CellUpper */])
1825+    .add(Symbol.VARIABLE, [SHIFT, 14 /* Variable */])
1826+    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* NumberUpper */])
1827+    .add(Symbol.FULL_ERROR, [SHIFT, 18 /* Pound */])
1828+    .build();
1829+table[23 /* LessThan */] = ObjectBuilder_1.ObjectBuilder
1830+    .add(Symbol.ERROR, 13 /* Error */)
1831+    .add(Symbol.EXPRESSION, 48 /* LessThan_Expression */)
1832+    .add(Symbol.VARIABLE_SEQUENCE, 3 /* VariableSeq */)
1833+    .add(Symbol.NUMBER, 6 /* Start_Number */)
1834+    .add(Symbol.STRING, [SHIFT, 7 /* Start_String */])
1835+    .add(Symbol.EQUALS, [SHIFT, 46 /* LessThan_Equals */])
1836+    .add(Symbol.PLUS, [SHIFT, 10 /* PrefixUnaryPlus */])
1837+    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* LeftParen */])
1838+    .add(Symbol.GREATER_THAN, [SHIFT, 47 /* LessThan_GreaterThan */])
1839+    .add(Symbol.MINUS, [SHIFT, 9 /* PrefixUnaryMinus */])
1840+    .add(Symbol.FUNCTION, [SHIFT, 11 /* Function */])
1841+    .add(Symbol.CELL, 12 /* Cell */)
1842+    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* FixedCell */])
1843+    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* CellUpper */])
1844+    .add(Symbol.VARIABLE, [SHIFT, 14 /* Variable */])
1845+    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* NumberUpper */])
1846+    .add(Symbol.FULL_ERROR, [SHIFT, 18 /* Pound */])
1847+    .build();
1848+table[24 /* GreaterThan */] = ObjectBuilder_1.ObjectBuilder
1849+    .add(Symbol.ERROR, 13 /* Error */)
1850+    .add(Symbol.EXPRESSION, 50 /* GreaterThan_Expression */)
1851+    .add(Symbol.VARIABLE_SEQUENCE, 3 /* VariableSeq */)
1852+    .add(Symbol.NUMBER, 6 /* Start_Number */)
1853+    .add(Symbol.STRING, [SHIFT, 7 /* Start_String */])
1854+    .add(Symbol.EQUALS, [SHIFT, 49 /* GreaterThan_Equals */])
1855+    .add(Symbol.PLUS, [SHIFT, 10 /* PrefixUnaryPlus */])
1856+    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* LeftParen */])
1857+    .add(Symbol.MINUS, [SHIFT, 9 /* PrefixUnaryMinus */])
1858+    .add(Symbol.FUNCTION, [SHIFT, 11 /* Function */])
1859+    .add(Symbol.CELL, 12 /* Cell */)
1860+    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* FixedCell */])
1861+    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* CellUpper */])
1862+    .add(Symbol.VARIABLE, [SHIFT, 14 /* Variable */])
1863+    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* NumberUpper */])
1864+    .add(Symbol.FULL_ERROR, [SHIFT, 18 /* Pound */])
1865+    .build();
1866+table[25] = ObjectBuilder_1.ObjectBuilder
1867+    .add(Symbol.ERROR, 13 /* Error */)
1868     .add(Symbol.EXPRESSION, 51)
1869-    .add(Symbol.VARIABLE_SEQUENCE, 3)
1870-    .add(Symbol.TIME_AMPM, [SHIFT, 4 /* TIME_CALL */])
1871-    .add(Symbol.TIME_24, [SHIFT, 5 /* AS_NUMBER */])
1872-    .add(Symbol.NUMBER, 6)
1873-    .add(Symbol.STRING, [SHIFT, 7 /* AMPERSAND */])
1874-    .add(Symbol.PLUS, [SHIFT, 10 /* LAST_NUMBER */])
1875-    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* EQUALS */])
1876-    .add(Symbol.MINUS, [SHIFT, 9 /* PLUS */])
1877-    .add(Symbol.FUNCTION, [SHIFT, 11 /* LTE */])
1878-    .add(Symbol.CELL, 12)
1879-    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* LT */])
1880-    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* MINUS */])
1881-    .add(Symbol.VARIABLE, [SHIFT, 14 /* NOT */])
1882-    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* GT */])
1883-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */])
1884-    .build();
1885-table[26] = ObjectBuilder
1886-    .add(Symbol.ERROR, 13)
1887-    .add(Symbol.EXPRESSION, 52)
1888-    .add(Symbol.VARIABLE_SEQUENCE, 3)
1889-    .add(Symbol.TIME_AMPM, [SHIFT, 4 /* TIME_CALL */])
1890-    .add(Symbol.TIME_24, [SHIFT, 5 /* AS_NUMBER */])
1891-    .add(Symbol.NUMBER, 6)
1892-    .add(Symbol.STRING, [SHIFT, 7 /* AMPERSAND */])
1893-    .add(Symbol.PLUS, [SHIFT, 10 /* LAST_NUMBER */])
1894-    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* EQUALS */])
1895-    .add(Symbol.MINUS, [SHIFT, 9 /* PLUS */])
1896-    .add(Symbol.FUNCTION, [SHIFT, 11 /* LTE */])
1897-    .add(Symbol.CELL, 12)
1898-    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* LT */])
1899-    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* MINUS */])
1900-    .add(Symbol.VARIABLE, [SHIFT, 14 /* NOT */])
1901-    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* GT */])
1902-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */])
1903-    .build();
1904-table[27] = ObjectBuilder
1905-    .add(Symbol.ERROR, 13)
1906-    .add(Symbol.EXPRESSION, 53)
1907-    .add(Symbol.VARIABLE_SEQUENCE, 3)
1908-    .add(Symbol.TIME_AMPM, [SHIFT, 4 /* TIME_CALL */])
1909-    .add(Symbol.TIME_24, [SHIFT, 5 /* AS_NUMBER */])
1910-    .add(Symbol.NUMBER, 6)
1911-    .add(Symbol.STRING, [SHIFT, 7 /* AMPERSAND */])
1912-    .add(Symbol.PLUS, [SHIFT, 10 /* LAST_NUMBER */])
1913-    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* EQUALS */])
1914-    .add(Symbol.MINUS, [SHIFT, 9 /* PLUS */])
1915-    .add(Symbol.FUNCTION, [SHIFT, 11 /* LTE */])
1916-    .add(Symbol.CELL, 12)
1917-    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* LT */])
1918-    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* MINUS */])
1919-    .add(Symbol.VARIABLE, [SHIFT, 14 /* NOT */])
1920-    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* GT */])
1921-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */])
1922-    .build();
1923-table[28] = ObjectBuilder
1924-    .add(Symbol.ERROR, 13)
1925-    .add(Symbol.EXPRESSION, 54)
1926-    .add(Symbol.VARIABLE_SEQUENCE, 3)
1927-    .add(Symbol.TIME_AMPM, [SHIFT, 4 /* TIME_CALL */])
1928-    .add(Symbol.TIME_24, [SHIFT, 5 /* AS_NUMBER */])
1929-    .add(Symbol.NUMBER, 6)
1930-    .add(Symbol.STRING, [SHIFT, 7 /* AMPERSAND */])
1931-    .add(Symbol.PLUS, [SHIFT, 10 /* LAST_NUMBER */])
1932-    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* EQUALS */])
1933-    .add(Symbol.MINUS, [SHIFT, 9 /* PLUS */])
1934-    .add(Symbol.FUNCTION, [SHIFT, 11 /* LTE */])
1935-    .add(Symbol.CELL, 12)
1936-    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* LT */])
1937-    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* MINUS */])
1938-    .add(Symbol.VARIABLE, [SHIFT, 14 /* NOT */])
1939-    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* GT */])
1940-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */])
1941-    .build();
1942-table[29] = ObjectBuilder
1943-    .add(Symbol.ERROR, 13)
1944-    .add(Symbol.EXPRESSION, 55)
1945-    .add(Symbol.VARIABLE_SEQUENCE, 3)
1946-    .add(Symbol.TIME_AMPM, [SHIFT, 4 /* TIME_CALL */])
1947-    .add(Symbol.TIME_24, [SHIFT, 5 /* AS_NUMBER */])
1948-    .add(Symbol.NUMBER, 6)
1949-    .add(Symbol.STRING, [SHIFT, 7 /* AMPERSAND */])
1950-    .add(Symbol.PLUS, [SHIFT, 10 /* LAST_NUMBER */])
1951-    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* EQUALS */])
1952-    .add(Symbol.MINUS, [SHIFT, 9 /* PLUS */])
1953-    .add(Symbol.FUNCTION, [SHIFT, 11 /* LTE */])
1954-    .add(Symbol.CELL, 12)
1955-    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* LT */])
1956-    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* MINUS */])
1957-    .add(Symbol.VARIABLE, [SHIFT, 14 /* NOT */])
1958-    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* GT */])
1959-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */])
1960-    .build();
1961-table[30 /* CELL_VALUE */] = ObjectBuilder
1962-    .add(Symbol.VARIABLE, [SHIFT, 56])
1963-    .build();
1964-table[31] = ObjectBuilder
1965+    .add(Symbol.VARIABLE_SEQUENCE, 3 /* VariableSeq */)
1966+    .add(Symbol.NUMBER, 6 /* Start_Number */)
1967+    .add(Symbol.STRING, [SHIFT, 7 /* Start_String */])
1968+    .add(Symbol.PLUS, [SHIFT, 10 /* PrefixUnaryPlus */])
1969+    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* LeftParen */])
1970+    .add(Symbol.MINUS, [SHIFT, 9 /* PrefixUnaryMinus */])
1971+    .add(Symbol.FUNCTION, [SHIFT, 11 /* Function */])
1972+    .add(Symbol.CELL, 12 /* Cell */)
1973+    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* FixedCell */])
1974+    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* CellUpper */])
1975+    .add(Symbol.VARIABLE, [SHIFT, 14 /* Variable */])
1976+    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* NumberUpper */])
1977+    .add(Symbol.FULL_ERROR, [SHIFT, 18 /* Pound */])
1978+    .build();
1979+table[26 /* Number_Minus */] = ObjectBuilder_1.ObjectBuilder
1980+    .add(Symbol.ERROR, 13 /* Error */)
1981+    .add(Symbol.EXPRESSION, 52 /* SubtractTwoNumbers */)
1982+    .add(Symbol.VARIABLE_SEQUENCE, 3 /* VariableSeq */)
1983+    .add(Symbol.NUMBER, 6 /* Start_Number */)
1984+    .add(Symbol.STRING, [SHIFT, 7 /* Start_String */])
1985+    .add(Symbol.PLUS, [SHIFT, 10 /* PrefixUnaryPlus */])
1986+    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* LeftParen */])
1987+    .add(Symbol.MINUS, [SHIFT, 9 /* PrefixUnaryMinus */])
1988+    .add(Symbol.FUNCTION, [SHIFT, 11 /* Function */])
1989+    .add(Symbol.CELL, 12 /* Cell */)
1990+    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* FixedCell */])
1991+    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* CellUpper */])
1992+    .add(Symbol.VARIABLE, [SHIFT, 14 /* Variable */])
1993+    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* NumberUpper */])
1994+    .add(Symbol.FULL_ERROR, [SHIFT, 18 /* Pound */])
1995+    .build();
1996+table[27 /* Number_Asterisk */] = ObjectBuilder_1.ObjectBuilder
1997+    .add(Symbol.ERROR, 13 /* Error */)
1998+    .add(Symbol.EXPRESSION, 53 /* MultiplyTwoNumbers */)
1999+    .add(Symbol.VARIABLE_SEQUENCE, 3 /* VariableSeq */)
2000+    .add(Symbol.NUMBER, 6 /* Start_Number */)
2001+    .add(Symbol.STRING, [SHIFT, 7 /* Start_String */])
2002+    .add(Symbol.PLUS, [SHIFT, 10 /* PrefixUnaryPlus */])
2003+    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* LeftParen */])
2004+    .add(Symbol.MINUS, [SHIFT, 9 /* PrefixUnaryMinus */])
2005+    .add(Symbol.FUNCTION, [SHIFT, 11 /* Function */])
2006+    .add(Symbol.CELL, 12 /* Cell */)
2007+    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* FixedCell */])
2008+    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* CellUpper */])
2009+    .add(Symbol.VARIABLE, [SHIFT, 14 /* Variable */])
2010+    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* NumberUpper */])
2011+    .add(Symbol.FULL_ERROR, [SHIFT, 18 /* Pound */])
2012+    .build();
2013+table[28 /* Number_Divide */] = ObjectBuilder_1.ObjectBuilder
2014+    .add(Symbol.ERROR, 13 /* Error */)
2015+    .add(Symbol.EXPRESSION, 54 /* DivideTwoNumbers */)
2016+    .add(Symbol.VARIABLE_SEQUENCE, 3 /* VariableSeq */)
2017+    .add(Symbol.NUMBER, 6 /* Start_Number */)
2018+    .add(Symbol.STRING, [SHIFT, 7 /* Start_String */])
2019+    .add(Symbol.PLUS, [SHIFT, 10 /* PrefixUnaryPlus */])
2020+    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* LeftParen */])
2021+    .add(Symbol.MINUS, [SHIFT, 9 /* PrefixUnaryMinus */])
2022+    .add(Symbol.FUNCTION, [SHIFT, 11 /* Function */])
2023+    .add(Symbol.CELL, 12 /* Cell */)
2024+    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* FixedCell */])
2025+    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* CellUpper */])
2026+    .add(Symbol.VARIABLE, [SHIFT, 14 /* Variable */])
2027+    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* NumberUpper */])
2028+    .add(Symbol.FULL_ERROR, [SHIFT, 18 /* Pound */])
2029+    .build();
2030+table[29 /* Number_Carrot */] = ObjectBuilder_1.ObjectBuilder
2031+    .add(Symbol.ERROR, 13 /* Error */)
2032+    .add(Symbol.EXPRESSION, 55 /* PowerTwoNumbers */)
2033+    .add(Symbol.VARIABLE_SEQUENCE, 3 /* VariableSeq */)
2034+    .add(Symbol.NUMBER, 6 /* Start_Number */)
2035+    .add(Symbol.STRING, [SHIFT, 7 /* Start_String */])
2036+    .add(Symbol.PLUS, [SHIFT, 10 /* PrefixUnaryPlus */])
2037+    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* LeftParen */])
2038+    .add(Symbol.MINUS, [SHIFT, 9 /* PrefixUnaryMinus */])
2039+    .add(Symbol.FUNCTION, [SHIFT, 11 /* Function */])
2040+    .add(Symbol.CELL, 12 /* Cell */)
2041+    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* FixedCell */])
2042+    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* CellUpper */])
2043+    .add(Symbol.VARIABLE, [SHIFT, 14 /* Variable */])
2044+    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* NumberUpper */])
2045+    .add(Symbol.FULL_ERROR, [SHIFT, 18 /* Pound */])
2046+    .build();
2047+table[30 /* VariableSeq_Decimal */] = ObjectBuilder_1.ObjectBuilder
2048+    .add(Symbol.VARIABLE, [SHIFT, 56 /* VariableSeq_Decimal_Variable */])
2049+    .build();
2050+table[31 /* Number_Percent */] = ObjectBuilder_1.ObjectBuilder
2051     .add(Symbol.EOF, [REDUCE, 40 /* REDUCE_PREV_AS_PERCENT */])
2052     .add(Symbol.AMPERSAND, [REDUCE, 40 /* REDUCE_PREV_AS_PERCENT */])
2053     .add(Symbol.EQUALS, [REDUCE, 40 /* REDUCE_PREV_AS_PERCENT */])
2054@@ -821,7 +699,6 @@ table[31] = ObjectBuilder
2055     .add(Symbol.RIGHT_PAREN, [REDUCE, 40 /* REDUCE_PREV_AS_PERCENT */])
2056     .add(Symbol.LESS_THAN, [REDUCE, 40 /* REDUCE_PREV_AS_PERCENT */])
2057     .add(Symbol.GREATER_THAN, [REDUCE, 40 /* REDUCE_PREV_AS_PERCENT */])
2058-    .add(Symbol.NOT, [REDUCE, 40 /* REDUCE_PREV_AS_PERCENT */])
2059     .add(Symbol.MINUS, [REDUCE, 40 /* REDUCE_PREV_AS_PERCENT */])
2060     .add(Symbol.ASTERISK, [REDUCE, 40 /* REDUCE_PREV_AS_PERCENT */])
2061     .add(Symbol.DIVIDE, [REDUCE, 40 /* REDUCE_PREV_AS_PERCENT */])
2062@@ -831,108 +708,102 @@ table[31] = ObjectBuilder
2063     .add(Symbol.PERCENT, [REDUCE, 40 /* REDUCE_PREV_AS_PERCENT */])
2064     .add(38, [REDUCE, 40 /* REDUCE_PREV_AS_PERCENT */])
2065     .build();
2066-table[32] = ObjectBuilder
2067-    .add(Symbol.AMPERSAND, [SHIFT, 20 /* TO_POWER */])
2068-    .add(Symbol.EQUALS, [SHIFT, 21 /* INVERT_NUM */])
2069-    .add(Symbol.PLUS, [SHIFT, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2070-    .add(Symbol.RIGHT_PAREN, [SHIFT, 57])
2071-    .add(Symbol.LESS_THAN, [SHIFT, 23 /* CALL_FUNCTION_LAST_BLANK */])
2072-    .add(Symbol.GREATER_THAN, [SHIFT, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */])
2073-    .add(Symbol.NOT, [SHIFT, 25 /* I25 */])
2074-    .add(Symbol.MINUS, [SHIFT, 26 /* I26 */])
2075-    .add(Symbol.ASTERISK, [SHIFT, 27 /* I27 */])
2076-    .add(Symbol.DIVIDE, [SHIFT, 28 /* FIXED_CELL_VAL */])
2077-    .add(Symbol.CARROT, [SHIFT, 29 /* FIXED_CELL_RANGE_VAL */])
2078-    .build();
2079-table[33] = ObjectBuilder
2080+table[32 /* LeftParen_Expression */] = ObjectBuilder_1.ObjectBuilder
2081+    .add(Symbol.AMPERSAND, [SHIFT, 20 /* Number_Ampersand */])
2082+    .add(Symbol.EQUALS, [SHIFT, 21 /* Start_Equals */])
2083+    .add(Symbol.PLUS, [SHIFT, 22 /* Number_Plus */])
2084+    .add(Symbol.RIGHT_PAREN, [SHIFT, 57 /* CLOSE_PAREN_ON_EXPRESSION */])
2085+    .add(Symbol.LESS_THAN, [SHIFT, 23 /* LessThan */])
2086+    .add(Symbol.GREATER_THAN, [SHIFT, 24 /* GreaterThan */])
2087+    .add(Symbol.MINUS, [SHIFT, 26 /* Number_Minus */])
2088+    .add(Symbol.ASTERISK, [SHIFT, 27 /* Number_Asterisk */])
2089+    .add(Symbol.DIVIDE, [SHIFT, 28 /* Number_Divide */])
2090+    .add(Symbol.CARROT, [SHIFT, 29 /* Number_Carrot */])
2091+    .build();
2092+table[33 /* PrefixUnaryMinus_Expression */] = ObjectBuilder_1.ObjectBuilder
2093     .add(Symbol.EOF, [REDUCE, 21 /* INVERT_NUM */])
2094-    .add(Symbol.AMPERSAND, [SHIFT, 20 /* TO_POWER */])
2095+    .add(Symbol.AMPERSAND, [SHIFT, 20 /* Number_Ampersand */])
2096     .add(Symbol.EQUALS, [REDUCE, 21 /* INVERT_NUM */])
2097     .add(Symbol.PLUS, [REDUCE, 21 /* INVERT_NUM */])
2098     .add(Symbol.RIGHT_PAREN, [REDUCE, 21 /* INVERT_NUM */])
2099     .add(Symbol.LESS_THAN, [REDUCE, 21 /* INVERT_NUM */])
2100     .add(Symbol.GREATER_THAN, [REDUCE, 21 /* INVERT_NUM */])
2101-    .add(Symbol.NOT, [REDUCE, 21 /* INVERT_NUM */])
2102     .add(Symbol.MINUS, [REDUCE, 21 /* INVERT_NUM */])
2103-    .add(Symbol.ASTERISK, [SHIFT, 27 /* I27 */])
2104-    .add(Symbol.DIVIDE, [SHIFT, 28 /* FIXED_CELL_VAL */])
2105-    .add(Symbol.CARROT, [SHIFT, 29 /* FIXED_CELL_RANGE_VAL */])
2106+    .add(Symbol.ASTERISK, [SHIFT, 27])
2107+    .add(Symbol.DIVIDE, [SHIFT, 28])
2108+    .add(Symbol.CARROT, [SHIFT, 29])
2109     .add(Symbol.SEMI_COLON, [REDUCE, 21 /* INVERT_NUM */])
2110     .add(Symbol.COMMA, [REDUCE, 21 /* INVERT_NUM */])
2111     .build();
2112-table[34] = ObjectBuilder
2113+table[34 /* PrefixUnaryPlus_Expression */] = ObjectBuilder_1.ObjectBuilder
2114     .add(Symbol.EOF, [REDUCE, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2115-    .add(Symbol.AMPERSAND, [SHIFT, 20 /* TO_POWER */])
2116+    .add(Symbol.AMPERSAND, [SHIFT, 20 /* Number_Ampersand */])
2117     .add(Symbol.EQUALS, [REDUCE, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2118     .add(Symbol.PLUS, [REDUCE, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2119     .add(Symbol.RIGHT_PAREN, [REDUCE, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2120     .add(Symbol.LESS_THAN, [REDUCE, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2121     .add(Symbol.GREATER_THAN, [REDUCE, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2122-    .add(Symbol.NOT, [REDUCE, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2123     .add(Symbol.MINUS, [REDUCE, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2124-    .add(Symbol.ASTERISK, [SHIFT, 27 /* I27 */])
2125-    .add(Symbol.DIVIDE, [SHIFT, 28 /* FIXED_CELL_VAL */])
2126-    .add(Symbol.CARROT, [SHIFT, 29 /* FIXED_CELL_RANGE_VAL */])
2127+    .add(Symbol.ASTERISK, [SHIFT, 27 /* Number_Asterisk */])
2128+    .add(Symbol.DIVIDE, [SHIFT, 28 /* Number_Divide */])
2129+    .add(Symbol.CARROT, [SHIFT, 29 /* Number_Carrot */])
2130     .add(Symbol.SEMI_COLON, [REDUCE, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2131     .add(Symbol.COMMA, [REDUCE, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2132     .build();
2133-table[35] = ObjectBuilder
2134-    .add(Symbol.ERROR, 13)
2135-    .add(Symbol.EXPRESSION, 60)
2136-    .add(Symbol.VARIABLE_SEQUENCE, 3)
2137-    .add(Symbol.TIME_AMPM, [SHIFT, 4 /* TIME_CALL */])
2138-    .add(Symbol.TIME_24, [SHIFT, 5 /* AS_NUMBER */])
2139-    .add(Symbol.NUMBER, 6)
2140-    .add(Symbol.STRING, [SHIFT, 7 /* AMPERSAND */])
2141-    .add(Symbol.PLUS, [SHIFT, 10 /* LAST_NUMBER */])
2142-    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* EQUALS */])
2143+table[35 /* Function_LeftParen */] = ObjectBuilder_1.ObjectBuilder
2144+    .add(Symbol.ERROR, 13 /* Error */)
2145+    .add(Symbol.EXPRESSION, 60 /* Function_LeftParen_Expression */)
2146+    .add(Symbol.VARIABLE_SEQUENCE, 3 /* VariableSeq */)
2147+    .add(Symbol.NUMBER, 6 /* Start_Number */)
2148+    .add(Symbol.STRING, [SHIFT, 7 /* Start_String */])
2149+    .add(Symbol.PLUS, [SHIFT, 10 /* PrefixUnaryPlus */])
2150+    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* LeftParen */])
2151     .add(Symbol.RIGHT_PAREN, [SHIFT, 58])
2152-    .add(Symbol.MINUS, [SHIFT, 9 /* PLUS */])
2153-    .add(Symbol.FUNCTION, [SHIFT, 11 /* LTE */])
2154+    .add(Symbol.MINUS, [SHIFT, 9 /* PrefixUnaryMinus */])
2155+    .add(Symbol.FUNCTION, [SHIFT, 11 /* Function */])
2156     .add(Symbol.EXP_SEQ, 59)
2157-    .add(Symbol.CELL, 12)
2158-    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* LT */])
2159-    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* MINUS */])
2160+    .add(Symbol.CELL, 12 /* Cell */)
2161+    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* FixedCell */])
2162+    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* CellUpper */])
2163     .add(Symbol.ARRAY, [SHIFT, 61])
2164-    .add(Symbol.VARIABLE, [SHIFT, 14 /* NOT */])
2165-    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* GT */])
2166-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */])
2167-    .build();
2168-table[36] = ObjectBuilder
2169-    .add(Symbol.EOF, [REDUCE, 27 /* I27 */])
2170-    .add(Symbol.AMPERSAND, [REDUCE, 27 /* I27 */])
2171-    .add(Symbol.EQUALS, [REDUCE, 27 /* I27 */])
2172-    .add(Symbol.PLUS, [REDUCE, 27 /* I27 */])
2173-    .add(Symbol.RIGHT_PAREN, [REDUCE, 27 /* I27 */])
2174-    .add(Symbol.LESS_THAN, [REDUCE, 27 /* I27 */])
2175-    .add(Symbol.GREATER_THAN, [REDUCE, 27 /* I27 */])
2176-    .add(Symbol.NOT, [REDUCE, 27 /* I27 */])
2177-    .add(Symbol.MINUS, [REDUCE, 27 /* I27 */])
2178-    .add(Symbol.ASTERISK, [REDUCE, 27 /* I27 */])
2179-    .add(Symbol.DIVIDE, [REDUCE, 27 /* I27 */])
2180-    .add(Symbol.CARROT, [REDUCE, 27 /* I27 */])
2181-    .add(Symbol.SEMI_COLON, [REDUCE, 27 /* I27 */])
2182-    .add(Symbol.COMMA, [REDUCE, 27 /* I27 */])
2183-    .build();
2184-table[37] = ObjectBuilder
2185-    .add(Symbol.POUND, [REDUCE, 43 /* AS_ERROR */])
2186-    .build();
2187-table[38] = ObjectBuilder
2188+    .add(Symbol.VARIABLE, [SHIFT, 14 /* Variable */])
2189+    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* NumberUpper */])
2190+    .add(Symbol.FULL_ERROR, [SHIFT, 18 /* Pound */])
2191+    .build();
2192+table[36 /* Error_Error */] = ObjectBuilder_1.ObjectBuilder
2193+    .add(Symbol.EOF, [REDUCE, 27 /* ERROR_AND_CONTINUE_WITH_OTHER_ERRORS */])
2194+    .add(Symbol.AMPERSAND, [REDUCE, 27 /* ERROR_AND_CONTINUE_WITH_OTHER_ERRORS */])
2195+    .add(Symbol.EQUALS, [REDUCE, 27 /* ERROR_AND_CONTINUE_WITH_OTHER_ERRORS */])
2196+    .add(Symbol.PLUS, [REDUCE, 27 /* ERROR_AND_CONTINUE_WITH_OTHER_ERRORS */])
2197+    .add(Symbol.RIGHT_PAREN, [REDUCE, 27 /* ERROR_AND_CONTINUE_WITH_OTHER_ERRORS */])
2198+    .add(Symbol.LESS_THAN, [REDUCE, 27 /* ERROR_AND_CONTINUE_WITH_OTHER_ERRORS */])
2199+    .add(Symbol.GREATER_THAN, [REDUCE, 27 /* ERROR_AND_CONTINUE_WITH_OTHER_ERRORS */])
2200+    .add(Symbol.MINUS, [REDUCE, 27 /* ERROR_AND_CONTINUE_WITH_OTHER_ERRORS */])
2201+    .add(Symbol.ASTERISK, [REDUCE, 27 /* ERROR_AND_CONTINUE_WITH_OTHER_ERRORS */])
2202+    .add(Symbol.DIVIDE, [REDUCE, 27 /* ERROR_AND_CONTINUE_WITH_OTHER_ERRORS */])
2203+    .add(Symbol.CARROT, [REDUCE, 27 /* ERROR_AND_CONTINUE_WITH_OTHER_ERRORS */])
2204+    .add(Symbol.SEMI_COLON, [REDUCE, 27 /* ERROR_AND_CONTINUE_WITH_OTHER_ERRORS */])
2205+    .add(Symbol.COMMA, [REDUCE, 27 /* ERROR_AND_CONTINUE_WITH_OTHER_ERRORS */])
2206+    .build();
2207+table[37] = ObjectBuilder_1.ObjectBuilder
2208+    .add(Symbol.FULL_ERROR, [REDUCE, 43 /* AS_ERROR */])
2209+    .build();
2210+table[38] = ObjectBuilder_1.ObjectBuilder
2211     .add(Symbol.VARIABLE, [SHIFT, 62])
2212     .build();
2213-table[39] = ObjectBuilder
2214+table[39] = ObjectBuilder_1.ObjectBuilder
2215     .add(Symbol.NUMBER_UPPER, [SHIFT, 63])
2216     .build();
2217-table[40] = ObjectBuilder
2218+table[40] = ObjectBuilder_1.ObjectBuilder
2219     .add(Symbol.FIXEDCELL, [SHIFT, 64])
2220     .build();
2221-table[41] = ObjectBuilder
2222+table[41] = ObjectBuilder_1.ObjectBuilder
2223     .add(Symbol.CELL_UPPER, [SHIFT, 65])
2224     .build();
2225-table[42] = ObjectBuilder
2226+table[42 /* Pound_Variable */] = ObjectBuilder_1.ObjectBuilder
2227     .add(Symbol.EXCLAMATION_POINT, [SHIFT, 66])
2228     .build();
2229-table[43] = ObjectBuilder
2230+table[43 /* Number_Ampersand_Expression */] = ObjectBuilder_1.ObjectBuilder
2231     .add(Symbol.EOF, [REDUCE, 7 /* AMPERSAND */])
2232     .add(Symbol.AMPERSAND, [REDUCE, 7 /* AMPERSAND */])
2233     .add(Symbol.EQUALS, [REDUCE, 7 /* AMPERSAND */])
2234@@ -940,7 +811,6 @@ table[43] = ObjectBuilder
2235     .add(Symbol.RIGHT_PAREN, [REDUCE, 7 /* AMPERSAND */])
2236     .add(Symbol.LESS_THAN, [REDUCE, 7 /* AMPERSAND */])
2237     .add(Symbol.GREATER_THAN, [REDUCE, 7 /* AMPERSAND */])
2238-    .add(Symbol.NOT, [REDUCE, 7 /* AMPERSAND */])
2239     .add(Symbol.MINUS, [REDUCE, 7 /* AMPERSAND */])
2240     .add(Symbol.ASTERISK, [REDUCE, 7 /* AMPERSAND */])
2241     .add(Symbol.DIVIDE, [REDUCE, 7 /* AMPERSAND */])
2242@@ -948,200 +818,180 @@ table[43] = ObjectBuilder
2243     .add(Symbol.SEMI_COLON, [REDUCE, 7 /* AMPERSAND */])
2244     .add(Symbol.COMMA, [REDUCE, 7 /* AMPERSAND */])
2245     .build();
2246-table[44] = ObjectBuilder
2247+table[44 /* Start_Equals_Expression */] = ObjectBuilder_1.ObjectBuilder
2248     .add(Symbol.EOF, [REDUCE, 8 /* EQUALS */])
2249-    .add(Symbol.AMPERSAND, [SHIFT, 20 /* TO_POWER */])
2250+    .add(Symbol.AMPERSAND, [SHIFT, 20 /* Number_Ampersand */])
2251     .add(Symbol.EQUALS, [REDUCE, 8 /* EQUALS */])
2252-    .add(Symbol.PLUS, [SHIFT, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2253+    .add(Symbol.PLUS, [SHIFT, 22 /* Number_Plus */])
2254     .add(Symbol.RIGHT_PAREN, [REDUCE, 8 /* EQUALS */])
2255-    .add(Symbol.LESS_THAN, [SHIFT, 23 /* CALL_FUNCTION_LAST_BLANK */])
2256-    .add(Symbol.GREATER_THAN, [SHIFT, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */])
2257-    .add(Symbol.NOT, [SHIFT, 25 /* I25 */])
2258-    .add(Symbol.MINUS, [SHIFT, 26 /* I26 */])
2259-    .add(Symbol.ASTERISK, [SHIFT, 27 /* I27 */])
2260-    .add(Symbol.DIVIDE, [SHIFT, 28 /* FIXED_CELL_VAL */])
2261-    .add(Symbol.CARROT, [SHIFT, 29 /* FIXED_CELL_RANGE_VAL */])
2262+    .add(Symbol.LESS_THAN, [SHIFT, 23 /* LessThan */])
2263+    .add(Symbol.GREATER_THAN, [SHIFT, 24 /* GreaterThan */])
2264+    .add(Symbol.MINUS, [SHIFT, 26 /* Number_Minus */])
2265+    .add(Symbol.ASTERISK, [SHIFT, 27 /* Number_Asterisk */])
2266+    .add(Symbol.DIVIDE, [SHIFT, 28 /* Number_Divide */])
2267+    .add(Symbol.CARROT, [SHIFT, 29 /* Number_Carrot */])
2268     .add(Symbol.SEMI_COLON, [REDUCE, 8 /* EQUALS */])
2269     .add(Symbol.COMMA, [REDUCE, 8 /* EQUALS */])
2270     .build();
2271-table[45] = ObjectBuilder
2272+table[45 /* AddTwoNumbers */] = ObjectBuilder_1.ObjectBuilder
2273     .add(Symbol.EOF, [REDUCE, 9 /* PLUS */])
2274-    .add(Symbol.AMPERSAND, [SHIFT, 20 /* TO_POWER */])
2275+    .add(Symbol.AMPERSAND, [SHIFT, 20 /* Number_Ampersand */])
2276     .add(Symbol.EQUALS, [REDUCE, 9 /* PLUS */])
2277     .add(Symbol.PLUS, [REDUCE, 9 /* PLUS */])
2278     .add(Symbol.RIGHT_PAREN, [REDUCE, 9 /* PLUS */])
2279     .add(Symbol.LESS_THAN, [REDUCE, 9 /* PLUS */])
2280     .add(Symbol.GREATER_THAN, [REDUCE, 9 /* PLUS */])
2281-    .add(Symbol.NOT, [REDUCE, 9 /* PLUS */])
2282     .add(Symbol.MINUS, [REDUCE, 9 /* PLUS */])
2283-    .add(Symbol.ASTERISK, [SHIFT, 27 /* I27 */])
2284-    .add(Symbol.DIVIDE, [SHIFT, 28 /* FIXED_CELL_VAL */])
2285-    .add(Symbol.CARROT, [SHIFT, 29 /* FIXED_CELL_RANGE_VAL */])
2286+    .add(Symbol.ASTERISK, [SHIFT, 27 /* Number_Asterisk */])
2287+    .add(Symbol.DIVIDE, [SHIFT, 28 /* Number_Divide */])
2288+    .add(Symbol.CARROT, [SHIFT, 29 /* Number_Carrot */])
2289     .add(Symbol.SEMI_COLON, [REDUCE, 9 /* PLUS */])
2290     .add(Symbol.COMMA, [REDUCE, 9 /* PLUS */])
2291     .build();
2292-table[46] = ObjectBuilder
2293-    .add(Symbol.ERROR, 13)
2294+table[46 /* LessThan_Equals */] = ObjectBuilder_1.ObjectBuilder
2295+    .add(Symbol.ERROR, 13 /* Error */)
2296     .add(Symbol.EXPRESSION, 67)
2297-    .add(Symbol.VARIABLE_SEQUENCE, 3)
2298-    .add(Symbol.TIME_AMPM, [SHIFT, 4 /* TIME_CALL */])
2299-    .add(Symbol.TIME_24, [SHIFT, 5 /* AS_NUMBER */])
2300-    .add(Symbol.NUMBER, 6)
2301-    .add(Symbol.STRING, [SHIFT, 7 /* AMPERSAND */])
2302-    .add(Symbol.PLUS, [SHIFT, 10 /* LAST_NUMBER */])
2303-    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* EQUALS */])
2304-    .add(Symbol.MINUS, [SHIFT, 9 /* PLUS */])
2305-    .add(Symbol.FUNCTION, [SHIFT, 11 /* LTE */])
2306-    .add(Symbol.CELL, 12)
2307-    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* LT */])
2308-    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* MINUS */])
2309-    .add(Symbol.VARIABLE, [SHIFT, 14 /* NOT */])
2310-    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* GT */])
2311-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */])
2312-    .build();
2313-table[47] = ObjectBuilder
2314-    .add(Symbol.ERROR, 13)
2315+    .add(Symbol.VARIABLE_SEQUENCE, 3 /* VariableSeq */)
2316+    .add(Symbol.NUMBER, 6 /* Start_Number */)
2317+    .add(Symbol.STRING, [SHIFT, 7 /* Start_String */])
2318+    .add(Symbol.PLUS, [SHIFT, 10 /* PrefixUnaryPlus */])
2319+    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* LeftParen */])
2320+    .add(Symbol.MINUS, [SHIFT, 9 /* PrefixUnaryMinus */])
2321+    .add(Symbol.FUNCTION, [SHIFT, 11 /* Function */])
2322+    .add(Symbol.CELL, 12 /* Cell */)
2323+    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* FixedCell */])
2324+    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* CellUpper */])
2325+    .add(Symbol.VARIABLE, [SHIFT, 14 /* Variable */])
2326+    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* NumberUpper */])
2327+    .add(Symbol.FULL_ERROR, [SHIFT, 18 /* Pound */])
2328+    .build();
2329+table[47 /* LessThan_GreaterThan */] = ObjectBuilder_1.ObjectBuilder
2330+    .add(Symbol.ERROR, 13 /* Error */)
2331     .add(Symbol.EXPRESSION, 68)
2332-    .add(Symbol.VARIABLE_SEQUENCE, 3)
2333-    .add(Symbol.TIME_AMPM, [SHIFT, 4 /* TIME_CALL */])
2334-    .add(Symbol.TIME_24, [SHIFT, 5 /* AS_NUMBER */])
2335-    .add(Symbol.NUMBER, 6)
2336-    .add(Symbol.STRING, [SHIFT, 7 /* AMPERSAND */])
2337-    .add(Symbol.PLUS, [SHIFT, 10 /* LAST_NUMBER */])
2338-    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* EQUALS */])
2339-    .add(Symbol.MINUS, [SHIFT, 9 /* PLUS */])
2340-    .add(Symbol.FUNCTION, [SHIFT, 11 /* LTE */])
2341-    .add(Symbol.CELL, 12)
2342-    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* LT */])
2343-    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* MINUS */])
2344-    .add(Symbol.VARIABLE, [SHIFT, 14 /* NOT */])
2345-    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* GT */])
2346-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */])
2347-    .build();
2348-table[48] = ObjectBuilder
2349+    .add(Symbol.VARIABLE_SEQUENCE, 3 /* VariableSeq */)
2350+    .add(Symbol.NUMBER, 6 /* Start_Number */)
2351+    .add(Symbol.STRING, [SHIFT, 7 /* Start_String */])
2352+    .add(Symbol.PLUS, [SHIFT, 10 /* PrefixUnaryPlus */])
2353+    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* LeftParen */])
2354+    .add(Symbol.MINUS, [SHIFT, 9 /* PrefixUnaryMinus */])
2355+    .add(Symbol.FUNCTION, [SHIFT, 11 /* Function */])
2356+    .add(Symbol.CELL, 12 /* Cell */)
2357+    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* FixedCell */])
2358+    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* CellUpper */])
2359+    .add(Symbol.VARIABLE, [SHIFT, 14 /* Variable */])
2360+    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* NumberUpper */])
2361+    .add(Symbol.FULL_ERROR, [SHIFT, 18 /* Pound */])
2362+    .build();
2363+table[48 /* LessThan_Expression */] = ObjectBuilder_1.ObjectBuilder
2364     .add(Symbol.EOF, [REDUCE, 16 /* LT */])
2365-    .add(Symbol.AMPERSAND, [SHIFT, 20 /* TO_POWER */])
2366+    .add(Symbol.AMPERSAND, [SHIFT, 20 /* Number_Ampersand */])
2367     .add(Symbol.EQUALS, [REDUCE, 16 /* LT */])
2368-    .add(Symbol.PLUS, [SHIFT, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2369+    .add(Symbol.PLUS, [SHIFT, 22 /* Number_Plus */])
2370     .add(Symbol.RIGHT_PAREN, [REDUCE, 16 /* LT */])
2371     .add(Symbol.LESS_THAN, [REDUCE, 16 /* LT */])
2372     .add(Symbol.GREATER_THAN, [REDUCE, 16 /* LT */])
2373-    .add(Symbol.NOT, [REDUCE, 16 /* LT */])
2374-    .add(Symbol.MINUS, [SHIFT, 26 /* I26 */])
2375-    .add(Symbol.ASTERISK, [SHIFT, 27 /* I27 */])
2376-    .add(Symbol.DIVIDE, [SHIFT, 28 /* FIXED_CELL_VAL */])
2377-    .add(Symbol.CARROT, [SHIFT, 29 /* FIXED_CELL_RANGE_VAL */])
2378+    .add(Symbol.MINUS, [SHIFT, 26 /* Number_Minus */])
2379+    .add(Symbol.ASTERISK, [SHIFT, 27 /* Number_Asterisk */])
2380+    .add(Symbol.DIVIDE, [SHIFT, 28 /* Number_Divide */])
2381+    .add(Symbol.CARROT, [SHIFT, 29 /* Number_Carrot */])
2382     .add(Symbol.SEMI_COLON, [REDUCE, 16 /* LT */])
2383     .add(Symbol.COMMA, [REDUCE, 16 /* LT */])
2384     .build();
2385-table[49] = ObjectBuilder
2386-    .add(Symbol.ERROR, 13)
2387-    .add(Symbol.EXPRESSION, 69)
2388-    .add(Symbol.VARIABLE_SEQUENCE, 3)
2389-    .add(Symbol.TIME_AMPM, [SHIFT, 4 /* TIME_CALL */])
2390-    .add(Symbol.TIME_24, [SHIFT, 5 /* AS_NUMBER */])
2391-    .add(Symbol.NUMBER, 6)
2392-    .add(Symbol.STRING, [SHIFT, 7 /* AMPERSAND */])
2393-    .add(Symbol.PLUS, [SHIFT, 10 /* LAST_NUMBER */])
2394-    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* EQUALS */])
2395-    .add(Symbol.MINUS, [SHIFT, 9 /* PLUS */])
2396-    .add(Symbol.FUNCTION, [SHIFT, 11 /* LTE */])
2397-    .add(Symbol.CELL, 12)
2398-    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* LT */])
2399-    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* MINUS */])
2400-    .add(Symbol.VARIABLE, [SHIFT, 14 /* NOT */])
2401-    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* GT */])
2402-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */])
2403-    .build();
2404-table[50] = ObjectBuilder
2405+table[49 /* GreaterThan_Equals */] = ObjectBuilder_1.ObjectBuilder
2406+    .add(Symbol.ERROR, 13 /* Error */)
2407+    .add(Symbol.EXPRESSION, 69 /* GTETwoExpressions */)
2408+    .add(Symbol.VARIABLE_SEQUENCE, 3 /* VariableSeq */)
2409+    .add(Symbol.NUMBER, 6 /* Start_Number */)
2410+    .add(Symbol.STRING, [SHIFT, 7 /* Start_String */])
2411+    .add(Symbol.PLUS, [SHIFT, 10 /* PrefixUnaryPlus */])
2412+    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* LeftParen */])
2413+    .add(Symbol.MINUS, [SHIFT, 9 /* PrefixUnaryMinus */])
2414+    .add(Symbol.FUNCTION, [SHIFT, 11 /* Function */])
2415+    .add(Symbol.CELL, 12 /* Cell */)
2416+    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* FixedCell */])
2417+    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* CellUpper */])
2418+    .add(Symbol.VARIABLE, [SHIFT, 14 /* Variable */])
2419+    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* NumberUpper */])
2420+    .add(Symbol.FULL_ERROR, [SHIFT, 18 /* Pound */])
2421+    .build();
2422+table[50 /* GreaterThan_Expression */] = ObjectBuilder_1.ObjectBuilder
2423     .add(Symbol.EOF, [REDUCE, 15 /* GT */])
2424-    .add(Symbol.AMPERSAND, [SHIFT, 20 /* TO_POWER */])
2425+    .add(Symbol.AMPERSAND, [SHIFT, 20 /* Number_Ampersand */])
2426     .add(Symbol.EQUALS, [REDUCE, 15 /* GT */])
2427-    .add(Symbol.PLUS, [SHIFT, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2428+    .add(Symbol.PLUS, [SHIFT, 22 /* Number_Plus */])
2429     .add(Symbol.RIGHT_PAREN, [REDUCE, 15 /* GT */])
2430     .add(Symbol.LESS_THAN, [REDUCE, 15 /* GT */])
2431     .add(Symbol.GREATER_THAN, [REDUCE, 15 /* GT */])
2432-    .add(Symbol.NOT, [REDUCE, 15 /* GT */])
2433-    .add(Symbol.MINUS, [SHIFT, 26 /* I26 */])
2434-    .add(Symbol.ASTERISK, [SHIFT, 27 /* I27 */])
2435-    .add(Symbol.DIVIDE, [SHIFT, 28 /* FIXED_CELL_VAL */])
2436-    .add(Symbol.CARROT, [SHIFT, 29 /* FIXED_CELL_RANGE_VAL */])
2437+    .add(Symbol.MINUS, [SHIFT, 26 /* Number_Minus */])
2438+    .add(Symbol.ASTERISK, [SHIFT, 27 /* Number_Asterisk */])
2439+    .add(Symbol.DIVIDE, [SHIFT, 28 /* Number_Divide */])
2440+    .add(Symbol.CARROT, [SHIFT, 29 /* Number_Carrot */])
2441     .add(Symbol.SEMI_COLON, [REDUCE, 15 /* GT */])
2442     .add(Symbol.COMMA, [REDUCE, 15 /* GT */])
2443     .build();
2444-table[51] = ObjectBuilder
2445-    .add(Symbol.EOF, [REDUCE, 14 /* NOT */])
2446-    .add(Symbol.AMPERSAND, [SHIFT, 20 /* TO_POWER */])
2447-    .add(Symbol.EQUALS, [REDUCE, 14 /* NOT */])
2448-    .add(Symbol.PLUS, [SHIFT, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2449-    .add(Symbol.RIGHT_PAREN, [REDUCE, 14 /* NOT */])
2450-    .add(Symbol.LESS_THAN, [SHIFT, 23 /* CALL_FUNCTION_LAST_BLANK */])
2451-    .add(Symbol.GREATER_THAN, [SHIFT, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */])
2452-    .add(Symbol.NOT, [REDUCE, 14 /* NOT */])
2453-    .add(Symbol.MINUS, [SHIFT, 26 /* I26 */])
2454-    .add(Symbol.ASTERISK, [SHIFT, 27 /* I27 */])
2455-    .add(Symbol.DIVIDE, [SHIFT, 28 /* FIXED_CELL_VAL */])
2456-    .add(Symbol.CARROT, [SHIFT, 29 /* FIXED_CELL_RANGE_VAL */])
2457-    .add(Symbol.SEMI_COLON, [REDUCE, 14 /* NOT */])
2458-    .add(Symbol.COMMA, [REDUCE, 14 /* NOT */])
2459-    .build();
2460-table[52] = ObjectBuilder
2461+table[51] = ObjectBuilder_1.ObjectBuilder
2462+    .add(Symbol.AMPERSAND, [SHIFT, 20 /* Number_Ampersand */])
2463+    .add(Symbol.PLUS, [SHIFT, 22])
2464+    .add(Symbol.LESS_THAN, [SHIFT, 23])
2465+    .add(Symbol.GREATER_THAN, [SHIFT, 24])
2466+    .add(Symbol.MINUS, [SHIFT, 26 /* Number_Minus */])
2467+    .add(Symbol.ASTERISK, [SHIFT, 27 /* Number_Asterisk */])
2468+    .add(Symbol.DIVIDE, [SHIFT, 28])
2469+    .add(Symbol.CARROT, [SHIFT, 29])
2470+    .build();
2471+table[52 /* SubtractTwoNumbers */] = ObjectBuilder_1.ObjectBuilder
2472     .add(Symbol.EOF, [REDUCE, 17 /* MINUS */])
2473-    .add(Symbol.AMPERSAND, [SHIFT, 20 /* TO_POWER */])
2474+    .add(Symbol.AMPERSAND, [SHIFT, 20 /* Number_Ampersand */])
2475     .add(Symbol.EQUALS, [REDUCE, 17 /* MINUS */])
2476     .add(Symbol.PLUS, [REDUCE, 17 /* MINUS */])
2477     .add(Symbol.RIGHT_PAREN, [REDUCE, 17 /* MINUS */])
2478     .add(Symbol.LESS_THAN, [REDUCE, 17 /* MINUS */])
2479     .add(Symbol.GREATER_THAN, [REDUCE, 17 /* MINUS */])
2480-    .add(Symbol.NOT, [REDUCE, 17 /* MINUS */])
2481     .add(Symbol.MINUS, [REDUCE, 17 /* MINUS */])
2482-    .add(Symbol.ASTERISK, [SHIFT, 27 /* I27 */])
2483-    .add(Symbol.DIVIDE, [SHIFT, 28 /* FIXED_CELL_VAL */])
2484-    .add(Symbol.CARROT, [SHIFT, 29 /* FIXED_CELL_RANGE_VAL */])
2485+    .add(Symbol.ASTERISK, [SHIFT, 27 /* Number_Asterisk */])
2486+    .add(Symbol.DIVIDE, [SHIFT, 28])
2487+    .add(Symbol.CARROT, [SHIFT, 29])
2488     .add(Symbol.SEMI_COLON, [REDUCE, 17 /* MINUS */])
2489     .add(Symbol.COMMA, [REDUCE, 17 /* MINUS */])
2490     .build();
2491-table[53] = ObjectBuilder
2492+table[53 /* MultiplyTwoNumbers */] = ObjectBuilder_1.ObjectBuilder
2493     .add(Symbol.EOF, [REDUCE, 18 /* MULTIPLY */])
2494-    .add(Symbol.AMPERSAND, [SHIFT, 20 /* TO_POWER */])
2495+    .add(Symbol.AMPERSAND, [SHIFT, 20])
2496     .add(Symbol.EQUALS, [REDUCE, 18 /* MULTIPLY */])
2497     .add(Symbol.PLUS, [REDUCE, 18 /* MULTIPLY */])
2498     .add(Symbol.RIGHT_PAREN, [REDUCE, 18 /* MULTIPLY */])
2499     .add(Symbol.LESS_THAN, [REDUCE, 18 /* MULTIPLY */])
2500     .add(Symbol.GREATER_THAN, [REDUCE, 18 /* MULTIPLY */])
2501-    .add(Symbol.NOT, [REDUCE, 18 /* MULTIPLY */])
2502     .add(Symbol.MINUS, [REDUCE, 18 /* MULTIPLY */])
2503     .add(Symbol.ASTERISK, [REDUCE, 18 /* MULTIPLY */])
2504     .add(Symbol.DIVIDE, [REDUCE, 18 /* MULTIPLY */])
2505-    .add(Symbol.CARROT, [SHIFT, 29 /* FIXED_CELL_RANGE_VAL */])
2506+    .add(Symbol.CARROT, [SHIFT, 29])
2507     .add(Symbol.SEMI_COLON, [REDUCE, 18 /* MULTIPLY */])
2508     .add(Symbol.COMMA, [REDUCE, 18 /* MULTIPLY */])
2509     .build();
2510-table[54] = ObjectBuilder
2511+table[54 /* DivideTwoNumbers */] = ObjectBuilder_1.ObjectBuilder
2512     .add(Symbol.EOF, [REDUCE, 19 /* DIVIDE */])
2513-    .add(Symbol.AMPERSAND, [SHIFT, 20 /* TO_POWER */])
2514+    .add(Symbol.AMPERSAND, [SHIFT, 20]) // ???same
2515     .add(Symbol.EQUALS, [REDUCE, 19 /* DIVIDE */])
2516     .add(Symbol.PLUS, [REDUCE, 19 /* DIVIDE */])
2517     .add(Symbol.RIGHT_PAREN, [REDUCE, 19 /* DIVIDE */])
2518     .add(Symbol.LESS_THAN, [REDUCE, 19 /* DIVIDE */])
2519     .add(Symbol.GREATER_THAN, [REDUCE, 19 /* DIVIDE */])
2520-    .add(Symbol.NOT, [REDUCE, 19 /* DIVIDE */])
2521     .add(Symbol.MINUS, [REDUCE, 19 /* DIVIDE */])
2522     .add(Symbol.ASTERISK, [REDUCE, 19 /* DIVIDE */])
2523     .add(Symbol.DIVIDE, [REDUCE, 19 /* DIVIDE */])
2524-    .add(Symbol.CARROT, [SHIFT, 29 /* FIXED_CELL_RANGE_VAL */])
2525+    .add(Symbol.CARROT, [SHIFT, 29])
2526     .add(Symbol.SEMI_COLON, [REDUCE, 19 /* DIVIDE */])
2527     .add(Symbol.COMMA, [REDUCE, 19 /* DIVIDE */])
2528     .build();
2529-table[55] = ObjectBuilder
2530+table[55 /* PowerTwoNumbers */] = ObjectBuilder_1.ObjectBuilder
2531     .add(Symbol.EOF, [REDUCE, 20 /* TO_POWER */])
2532-    .add(Symbol.AMPERSAND, [SHIFT, 20 /* TO_POWER */])
2533+    .add(Symbol.AMPERSAND, [SHIFT, 20])
2534     .add(Symbol.EQUALS, [REDUCE, 20 /* TO_POWER */])
2535     .add(Symbol.PLUS, [REDUCE, 20 /* TO_POWER */])
2536     .add(Symbol.RIGHT_PAREN, [REDUCE, 20 /* TO_POWER */])
2537     .add(Symbol.LESS_THAN, [REDUCE, 20 /* TO_POWER */])
2538     .add(Symbol.GREATER_THAN, [REDUCE, 20 /* TO_POWER */])
2539-    .add(Symbol.NOT, [REDUCE, 20 /* TO_POWER */])
2540     .add(Symbol.MINUS, [REDUCE, 20 /* TO_POWER */])
2541     .add(Symbol.ASTERISK, [REDUCE, 20 /* TO_POWER */])
2542     .add(Symbol.DIVIDE, [REDUCE, 20 /* TO_POWER */])
2543@@ -1149,7 +999,7 @@ table[55] = ObjectBuilder
2544     .add(Symbol.SEMI_COLON, [REDUCE, 20 /* TO_POWER */])
2545     .add(Symbol.COMMA, [REDUCE, 20 /* TO_POWER */])
2546     .build();
2547-table[56] = ObjectBuilder
2548+table[56 /* VariableSeq_Decimal_Variable */] = ObjectBuilder_1.ObjectBuilder
2549     .add(Symbol.EOF, [REDUCE, 37 /* ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH */])
2550     .add(Symbol.AMPERSAND, [REDUCE, 37 /* ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH */])
2551     .add(Symbol.EQUALS, [REDUCE, 37 /* ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH */])
2552@@ -1157,16 +1007,15 @@ table[56] = ObjectBuilder
2553     .add(Symbol.RIGHT_PAREN, [REDUCE, 37 /* ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH */])
2554     .add(Symbol.LESS_THAN, [REDUCE, 37 /* ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH */])
2555     .add(Symbol.GREATER_THAN, [REDUCE, 37 /* ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH */])
2556-    .add(Symbol.NOT, [REDUCE, 37 /* ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH */])
2557     .add(Symbol.MINUS, [REDUCE, 37 /* ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH */])
2558     .add(Symbol.ASTERISK, [REDUCE, 37 /* ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH */])
2559     .add(Symbol.DIVIDE, [REDUCE, 37 /* ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH */])
2560     .add(Symbol.CARROT, [REDUCE, 37 /* ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH */])
2561     .add(Symbol.SEMI_COLON, [REDUCE, 37 /* ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH */])
2562     .add(Symbol.COMMA, [REDUCE, 37 /* ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH */])
2563-    .add(33, [REDUCE, 37 /* ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH */])
2564+    .add(Symbol.DECIMAL, [REDUCE, 37 /* ENSURE_LAST_TWO_IN_ARRAY_AND_PUSH */])
2565     .build();
2566-table[57] = ObjectBuilder
2567+table[57 /* CLOSE_PAREN_ON_EXPRESSION */] = ObjectBuilder_1.ObjectBuilder
2568     .add(Symbol.EOF, [REDUCE, 10 /* LAST_NUMBER */])
2569     .add(Symbol.AMPERSAND, [REDUCE, 10 /* LAST_NUMBER */])
2570     .add(Symbol.EQUALS, [REDUCE, 10 /* LAST_NUMBER */])
2571@@ -1174,7 +1023,6 @@ table[57] = ObjectBuilder
2572     .add(Symbol.RIGHT_PAREN, [REDUCE, 10 /* LAST_NUMBER */])
2573     .add(Symbol.LESS_THAN, [REDUCE, 10 /* LAST_NUMBER */])
2574     .add(Symbol.GREATER_THAN, [REDUCE, 10 /* LAST_NUMBER */])
2575-    .add(Symbol.NOT, [REDUCE, 10 /* LAST_NUMBER */])
2576     .add(Symbol.MINUS, [REDUCE, 10 /* LAST_NUMBER */])
2577     .add(Symbol.ASTERISK, [REDUCE, 10 /* LAST_NUMBER */])
2578     .add(Symbol.DIVIDE, [REDUCE, 10 /* LAST_NUMBER */])
2579@@ -1182,7 +1030,7 @@ table[57] = ObjectBuilder
2580     .add(Symbol.SEMI_COLON, [REDUCE, 10 /* LAST_NUMBER */])
2581     .add(Symbol.COMMA, [REDUCE, 10 /* LAST_NUMBER */])
2582     .build();
2583-table[58] = ObjectBuilder
2584+table[58] = ObjectBuilder_1.ObjectBuilder
2585     .add(Symbol.EOF, [REDUCE, 23 /* CALL_FUNCTION_LAST_BLANK */])
2586     .add(Symbol.AMPERSAND, [REDUCE, 23 /* CALL_FUNCTION_LAST_BLANK */])
2587     .add(Symbol.EQUALS, [REDUCE, 23 /* CALL_FUNCTION_LAST_BLANK */])
2588@@ -1190,7 +1038,6 @@ table[58] = ObjectBuilder
2589     .add(Symbol.RIGHT_PAREN, [REDUCE, 23 /* CALL_FUNCTION_LAST_BLANK */])
2590     .add(Symbol.LESS_THAN, [REDUCE, 23 /* CALL_FUNCTION_LAST_BLANK */])
2591     .add(Symbol.GREATER_THAN, [REDUCE, 23 /* CALL_FUNCTION_LAST_BLANK */])
2592-    .add(Symbol.NOT, [REDUCE, 23 /* CALL_FUNCTION_LAST_BLANK */])
2593     .add(Symbol.MINUS, [REDUCE, 23 /* CALL_FUNCTION_LAST_BLANK */])
2594     .add(Symbol.ASTERISK, [REDUCE, 23 /* CALL_FUNCTION_LAST_BLANK */])
2595     .add(Symbol.DIVIDE, [REDUCE, 23 /* CALL_FUNCTION_LAST_BLANK */])
2596@@ -1198,35 +1045,34 @@ table[58] = ObjectBuilder
2597     .add(Symbol.SEMI_COLON, [REDUCE, 23 /* CALL_FUNCTION_LAST_BLANK */])
2598     .add(Symbol.COMMA, [REDUCE, 23 /* CALL_FUNCTION_LAST_BLANK */])
2599     .build();
2600-table[59] = ObjectBuilder
2601-    .add(Symbol.RIGHT_PAREN, [SHIFT, 70])
2602-    .add(Symbol.SEMI_COLON, [SHIFT, 71])
2603-    .add(Symbol.COMMA, [SHIFT, 72])
2604+table[59] = ObjectBuilder_1.ObjectBuilder
2605+    .add(Symbol.RIGHT_PAREN, [SHIFT, 70 /* CLOSE_PAREN_ON_FUNCTION */])
2606+    .add(Symbol.SEMI_COLON, [SHIFT, 71 /* Variable_SemiColon */])
2607+    .add(Symbol.COMMA, [SHIFT, 72 /* Variable_Comma */])
2608     .build();
2609-table[60] = ObjectBuilder
2610-    .add(Symbol.AMPERSAND, [SHIFT, 20 /* TO_POWER */])
2611-    .add(Symbol.EQUALS, [SHIFT, 21 /* INVERT_NUM */])
2612-    .add(Symbol.PLUS, [SHIFT, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2613+table[60 /* Function_LeftParen_Expression */] = ObjectBuilder_1.ObjectBuilder
2614+    .add(Symbol.AMPERSAND, [SHIFT, 20 /* Number_Ampersand */])
2615+    .add(Symbol.EQUALS, [SHIFT, 21 /* Start_Equals */])
2616+    .add(Symbol.PLUS, [SHIFT, 22 /* Number_Plus */])
2617     .add(Symbol.RIGHT_PAREN, [REDUCE, 32 /* ENSURE_IS_ARRAY */])
2618-    .add(Symbol.LESS_THAN, [SHIFT, 23 /* CALL_FUNCTION_LAST_BLANK */])
2619-    .add(Symbol.GREATER_THAN, [SHIFT, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */])
2620-    .add(Symbol.NOT, [SHIFT, 25 /* I25 */])
2621-    .add(Symbol.MINUS, [SHIFT, 26 /* I26 */])
2622-    .add(Symbol.ASTERISK, [SHIFT, 27 /* I27 */])
2623-    .add(Symbol.DIVIDE, [SHIFT, 28 /* FIXED_CELL_VAL */])
2624-    .add(Symbol.CARROT, [SHIFT, 29 /* FIXED_CELL_RANGE_VAL */])
2625+    .add(Symbol.LESS_THAN, [SHIFT, 23 /* LessThan */])
2626+    .add(Symbol.GREATER_THAN, [SHIFT, 24 /* GreaterThan */])
2627+    .add(Symbol.MINUS, [SHIFT, 26 /* Number_Minus */])
2628+    .add(Symbol.ASTERISK, [SHIFT, 27 /* Number_Asterisk */])
2629+    .add(Symbol.DIVIDE, [SHIFT, 28 /* Number_Divide */])
2630+    .add(Symbol.CARROT, [SHIFT, 29 /* Number_Carrot */])
2631     .add(Symbol.SEMI_COLON, [REDUCE, 32 /* ENSURE_IS_ARRAY */])
2632     .add(Symbol.COMMA, [REDUCE, 32 /* ENSURE_IS_ARRAY */])
2633     .build();
2634-table[61] = ObjectBuilder
2635+table[61] = ObjectBuilder_1.ObjectBuilder
2636     .add(Symbol.RIGHT_PAREN, [REDUCE, 33 /* ENSURE_YYTEXT_ARRAY */])
2637     .add(Symbol.SEMI_COLON, [REDUCE, 33 /* ENSURE_YYTEXT_ARRAY */])
2638     .add(Symbol.COMMA, [REDUCE, 33 /* ENSURE_YYTEXT_ARRAY */])
2639     .build();
2640-table[62] = ObjectBuilder
2641+table[62] = ObjectBuilder_1.ObjectBuilder
2642     .add(Symbol.EXCLAMATION_POINT, [SHIFT, 73])
2643     .build();
2644-table[63] = ObjectBuilder
2645+table[63] = ObjectBuilder_1.ObjectBuilder
2646     .add(Symbol.EOF, [REDUCE, 39 /* REDUCE_FLOAT */])
2647     .add(Symbol.AMPERSAND, [REDUCE, 39 /* REDUCE_FLOAT */])
2648     .add(Symbol.EQUALS, [REDUCE, 39 /* REDUCE_FLOAT */])
2649@@ -1234,7 +1080,6 @@ table[63] = ObjectBuilder
2650     .add(Symbol.RIGHT_PAREN, [REDUCE, 39 /* REDUCE_FLOAT */])
2651     .add(Symbol.LESS_THAN, [REDUCE, 39 /* REDUCE_FLOAT */])
2652     .add(Symbol.GREATER_THAN, [REDUCE, 39 /* REDUCE_FLOAT */])
2653-    .add(Symbol.NOT, [REDUCE, 39 /* REDUCE_FLOAT */])
2654     .add(Symbol.MINUS, [REDUCE, 39 /* REDUCE_FLOAT */])
2655     .add(Symbol.ASTERISK, [REDUCE, 39 /* REDUCE_FLOAT */])
2656     .add(Symbol.DIVIDE, [REDUCE, 39 /* REDUCE_FLOAT */])
2657@@ -1243,7 +1088,7 @@ table[63] = ObjectBuilder
2658     .add(Symbol.COMMA, [REDUCE, 39 /* REDUCE_FLOAT */])
2659     .add(Symbol.PERCENT, [REDUCE, 39 /* REDUCE_FLOAT */])
2660     .add(38, [REDUCE, 39 /* REDUCE_FLOAT */]).build();
2661-table[64] = ObjectBuilder
2662+table[64] = ObjectBuilder_1.ObjectBuilder
2663     .add(Symbol.EOF, [REDUCE, 29 /* FIXED_CELL_RANGE_VAL */])
2664     .add(Symbol.AMPERSAND, [REDUCE, 29 /* FIXED_CELL_RANGE_VAL */])
2665     .add(Symbol.EQUALS, [REDUCE, 29 /* FIXED_CELL_RANGE_VAL */])
2666@@ -1251,14 +1096,13 @@ table[64] = ObjectBuilder
2667     .add(Symbol.RIGHT_PAREN, [REDUCE, 29 /* FIXED_CELL_RANGE_VAL */])
2668     .add(Symbol.LESS_THAN, [REDUCE, 29 /* FIXED_CELL_RANGE_VAL */])
2669     .add(Symbol.GREATER_THAN, [REDUCE, 29 /* FIXED_CELL_RANGE_VAL */])
2670-    .add(Symbol.NOT, [REDUCE, 29 /* FIXED_CELL_RANGE_VAL */])
2671     .add(Symbol.MINUS, [REDUCE, 29 /* FIXED_CELL_RANGE_VAL */])
2672     .add(Symbol.ASTERISK, [REDUCE, 29 /* FIXED_CELL_RANGE_VAL */])
2673     .add(Symbol.DIVIDE, [REDUCE, 29 /* FIXED_CELL_RANGE_VAL */])
2674     .add(Symbol.CARROT, [REDUCE, 29 /* FIXED_CELL_RANGE_VAL */])
2675     .add(Symbol.SEMI_COLON, [REDUCE, 29 /* FIXED_CELL_RANGE_VAL */])
2676     .add(Symbol.COMMA, [REDUCE, 29 /* FIXED_CELL_RANGE_VAL */]).build();
2677-table[65] = ObjectBuilder
2678+table[65] = ObjectBuilder_1.ObjectBuilder
2679     .add(Symbol.EOF, [REDUCE, 31 /* CELL_RANGE_VALUE */])
2680     .add(Symbol.AMPERSAND, [REDUCE, 31 /* CELL_RANGE_VALUE */])
2681     .add(Symbol.EQUALS, [REDUCE, 31 /* CELL_RANGE_VALUE */])
2682@@ -1266,14 +1110,13 @@ table[65] = ObjectBuilder
2683     .add(Symbol.RIGHT_PAREN, [REDUCE, 31 /* CELL_RANGE_VALUE */])
2684     .add(Symbol.LESS_THAN, [REDUCE, 31 /* CELL_RANGE_VALUE */])
2685     .add(Symbol.GREATER_THAN, [REDUCE, 31 /* CELL_RANGE_VALUE */])
2686-    .add(Symbol.NOT, [REDUCE, 31 /* CELL_RANGE_VALUE */])
2687     .add(Symbol.MINUS, [REDUCE, 31 /* CELL_RANGE_VALUE */])
2688     .add(Symbol.ASTERISK, [REDUCE, 31 /* CELL_RANGE_VALUE */])
2689     .add(Symbol.DIVIDE, [REDUCE, 31 /* CELL_RANGE_VALUE */])
2690     .add(Symbol.CARROT, [REDUCE, 31 /* CELL_RANGE_VALUE */])
2691     .add(Symbol.SEMI_COLON, [REDUCE, 31 /* CELL_RANGE_VALUE */])
2692     .add(Symbol.COMMA, [REDUCE, 31 /* CELL_RANGE_VALUE */]).build();
2693-table[66] = ObjectBuilder
2694+table[66] = ObjectBuilder_1.ObjectBuilder
2695     .add(Symbol.EOF, [REDUCE, 41 /* REDUCE_LAST_THREE_A */])
2696     .add(Symbol.AMPERSAND, [REDUCE, 41 /* REDUCE_LAST_THREE_A */])
2697     .add(Symbol.EQUALS, [REDUCE, 41 /* REDUCE_LAST_THREE_A */])
2698@@ -1281,7 +1124,6 @@ table[66] = ObjectBuilder
2699     .add(Symbol.RIGHT_PAREN, [REDUCE, 41 /* REDUCE_LAST_THREE_A */])
2700     .add(Symbol.LESS_THAN, [REDUCE, 41 /* REDUCE_LAST_THREE_A */])
2701     .add(Symbol.GREATER_THAN, [REDUCE, 41 /* REDUCE_LAST_THREE_A */])
2702-    .add(Symbol.NOT, [REDUCE, 41 /* REDUCE_LAST_THREE_A */])
2703     .add(Symbol.MINUS, [REDUCE, 41 /* REDUCE_LAST_THREE_A */])
2704     .add(Symbol.ASTERISK, [REDUCE, 41 /* REDUCE_LAST_THREE_A */])
2705     .add(Symbol.DIVIDE, [REDUCE, 41 /* REDUCE_LAST_THREE_A */])
2706@@ -1289,53 +1131,51 @@ table[66] = ObjectBuilder
2707     .add(Symbol.SEMI_COLON, [REDUCE, 41 /* REDUCE_LAST_THREE_A */])
2708     .add(Symbol.COMMA, [REDUCE, 41 /* REDUCE_LAST_THREE_A */])
2709     .add(Symbol.VARIABLE, [REDUCE, 41 /* REDUCE_LAST_THREE_A */])
2710-    .add(Symbol.POUND, [REDUCE, 41 /* REDUCE_LAST_THREE_A */]).build();
2711-table[67] = ObjectBuilder
2712+    .add(Symbol.FULL_ERROR, [REDUCE, 41 /* REDUCE_LAST_THREE_A */]).build();
2713+table[67] = ObjectBuilder_1.ObjectBuilder
2714     .add(Symbol.EOF, [REDUCE, 11 /* LTE */])
2715-    .add(Symbol.AMPERSAND, [SHIFT, 20 /* TO_POWER */])
2716+    .add(Symbol.AMPERSAND, [SHIFT, 20 /* Number_Ampersand */])
2717     .add(Symbol.EQUALS, [REDUCE, 11 /* LTE */])
2718-    .add(Symbol.PLUS, [SHIFT, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2719+    .add(Symbol.PLUS, [SHIFT, 22 /* Number_Plus */])
2720     .add(Symbol.RIGHT_PAREN, [REDUCE, 11 /* LTE */])
2721     .add(Symbol.LESS_THAN, [REDUCE, 11 /* LTE */])
2722     .add(Symbol.GREATER_THAN, [REDUCE, 11 /* LTE */])
2723-    .add(Symbol.NOT, [REDUCE, 11 /* LTE */])
2724-    .add(Symbol.MINUS, [SHIFT, 26 /* I26 */])
2725-    .add(Symbol.ASTERISK, [SHIFT, 27 /* I27 */])
2726-    .add(Symbol.DIVIDE, [SHIFT, 28 /* FIXED_CELL_VAL */])
2727-    .add(Symbol.CARROT, [SHIFT, 29 /* FIXED_CELL_RANGE_VAL */])
2728+    .add(Symbol.MINUS, [SHIFT, 26 /* Number_Minus */])
2729+    .add(Symbol.ASTERISK, [SHIFT, 27 /* Number_Asterisk */])
2730+    .add(Symbol.DIVIDE, [SHIFT, 28 /* Number_Divide */])
2731+    .add(Symbol.CARROT, [SHIFT, 29 /* Number_Carrot */])
2732     .add(Symbol.SEMI_COLON, [REDUCE, 11 /* LTE */])
2733     .add(Symbol.COMMA, [REDUCE, 11 /* LTE */]).build();
2734-table[68] = ObjectBuilder
2735+table[68] = ObjectBuilder_1.ObjectBuilder
2736     .add(Symbol.EOF, [REDUCE, 13 /* NOT_EQ */])
2737-    .add(Symbol.AMPERSAND, [SHIFT, 20 /* TO_POWER */])
2738+    .add(Symbol.AMPERSAND, [SHIFT, 20 /* Number_Ampersand */])
2739     .add(Symbol.EQUALS, [REDUCE, 13 /* NOT_EQ */])
2740-    .add(Symbol.PLUS, [SHIFT, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2741+    .add(Symbol.PLUS, [SHIFT, 22 /* Number_Plus */])
2742     .add(Symbol.RIGHT_PAREN, [REDUCE, 13 /* NOT_EQ */])
2743     .add(Symbol.LESS_THAN, [REDUCE, 13 /* NOT_EQ */])
2744     .add(Symbol.GREATER_THAN, [REDUCE, 13 /* NOT_EQ */])
2745-    .add(Symbol.NOT, [REDUCE, 13 /* NOT_EQ */])
2746-    .add(Symbol.MINUS, [SHIFT, 26 /* I26 */])
2747-    .add(Symbol.ASTERISK, [SHIFT, 27 /* I27 */])
2748-    .add(Symbol.DIVIDE, [SHIFT, 28 /* FIXED_CELL_VAL */])
2749-    .add(Symbol.CARROT, [SHIFT, 29 /* FIXED_CELL_RANGE_VAL */])
2750+    .add(Symbol.MINUS, [SHIFT, 26 /* Number_Minus */])
2751+    .add(Symbol.ASTERISK, [SHIFT, 27 /* Number_Asterisk */])
2752+    .add(Symbol.DIVIDE, [SHIFT, 28 /* Number_Divide */])
2753+    .add(Symbol.CARROT, [SHIFT, 29 /* Number_Carrot */])
2754     .add(Symbol.SEMI_COLON, [REDUCE, 13 /* NOT_EQ */])
2755     .add(Symbol.COMMA, [REDUCE, 13 /* NOT_EQ */]).build();
2756-table[69] = ObjectBuilder
2757+table[69 /* GTETwoExpressions */] = ObjectBuilder_1.ObjectBuilder
2758     .add(Symbol.EOF, [REDUCE, 12 /* GTE */])
2759-    .add(Symbol.AMPERSAND, [SHIFT, 20 /* TO_POWER */])
2760+    .add(Symbol.AMPERSAND, [SHIFT, 20 /* Number_Ampersand */])
2761     .add(Symbol.EQUALS, [REDUCE, 12 /* GTE */])
2762-    .add(Symbol.PLUS, [SHIFT, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2763+    .add(Symbol.PLUS, [SHIFT, 22 /* Number_Plus */])
2764     .add(Symbol.RIGHT_PAREN, [REDUCE, 12 /* GTE */])
2765     .add(Symbol.LESS_THAN, [REDUCE, 12 /* GTE */])
2766     .add(Symbol.GREATER_THAN, [REDUCE, 12 /* GTE */])
2767-    .add(Symbol.NOT, [REDUCE, 12 /* GTE */])
2768-    .add(Symbol.MINUS, [SHIFT, 26 /* I26 */])
2769-    .add(Symbol.ASTERISK, [SHIFT, 27 /* I27 */])
2770-    .add(Symbol.DIVIDE, [SHIFT, 28 /* FIXED_CELL_VAL */])
2771-    .add(Symbol.CARROT, [SHIFT, 29 /* FIXED_CELL_RANGE_VAL */])
2772+    .add(Symbol.MINUS, [SHIFT, 26 /* Number_Minus */])
2773+    .add(Symbol.ASTERISK, [SHIFT, 27 /* Number_Asterisk */])
2774+    .add(Symbol.DIVIDE, [SHIFT, 28 /* Number_Divide */])
2775+    .add(Symbol.CARROT, [SHIFT, 29 /* Number_Carrot */])
2776     .add(Symbol.SEMI_COLON, [REDUCE, 12 /* GTE */])
2777-    .add(Symbol.COMMA, [REDUCE, 12 /* GTE */]).build();
2778-table[70] = ObjectBuilder
2779+    .add(Symbol.COMMA, [REDUCE, 12 /* GTE */])
2780+    .build();
2781+table[70 /* CLOSE_PAREN_ON_FUNCTION */] = ObjectBuilder_1.ObjectBuilder
2782     .add(Symbol.EOF, [REDUCE, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */])
2783     .add(Symbol.AMPERSAND, [REDUCE, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */])
2784     .add(Symbol.EQUALS, [REDUCE, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */])
2785@@ -1343,52 +1183,51 @@ table[70] = ObjectBuilder
2786     .add(Symbol.RIGHT_PAREN, [REDUCE, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */])
2787     .add(Symbol.LESS_THAN, [REDUCE, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */])
2788     .add(Symbol.GREATER_THAN, [REDUCE, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */])
2789-    .add(Symbol.NOT, [REDUCE, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */])
2790     .add(Symbol.MINUS, [REDUCE, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */])
2791     .add(Symbol.ASTERISK, [REDUCE, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */])
2792     .add(Symbol.DIVIDE, [REDUCE, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */])
2793     .add(Symbol.CARROT, [REDUCE, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */])
2794     .add(Symbol.SEMI_COLON, [REDUCE, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */])
2795-    .add(Symbol.COMMA, [REDUCE, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */]).build();
2796-table[71] = ObjectBuilder
2797-    .add(Symbol.ERROR, 13)
2798+    .add(Symbol.COMMA, [REDUCE, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */])
2799+    .build();
2800+table[71 /* Variable_SemiColon */] = ObjectBuilder_1.ObjectBuilder
2801+    .add(Symbol.ERROR, 13 /* Error */)
2802     .add(Symbol.EXPRESSION, 74)
2803-    .add(Symbol.VARIABLE_SEQUENCE, 3)
2804-    .add(Symbol.TIME_AMPM, [SHIFT, 4 /* TIME_CALL */])
2805-    .add(Symbol.TIME_24, [SHIFT, 5 /* AS_NUMBER */])
2806-    .add(Symbol.NUMBER, 6)
2807-    .add(Symbol.STRING, [SHIFT, 7 /* AMPERSAND */])
2808-    .add(Symbol.EQUALS, [SHIFT, 21 /* INVERT_NUM */])
2809-    .add(Symbol.PLUS, [SHIFT, 10 /* LAST_NUMBER */])
2810-    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* EQUALS */])
2811-    .add(Symbol.MINUS, [SHIFT, 9 /* PLUS */])
2812-    .add(Symbol.FUNCTION, [SHIFT, 11 /* LTE */])
2813-    .add(Symbol.CELL, 12)
2814-    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* LT */])
2815-    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* MINUS */])
2816-    .add(Symbol.VARIABLE, [SHIFT, 14 /* NOT */])
2817-    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* GT */])
2818-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */]).build();
2819-table[72] = ObjectBuilder
2820-    .add(Symbol.ERROR, 13)
2821+    .add(Symbol.VARIABLE_SEQUENCE, 3 /* VariableSeq */)
2822+    .add(Symbol.NUMBER, 6 /* Start_Number */)
2823+    .add(Symbol.STRING, [SHIFT, 7 /* Start_String */])
2824+    .add(Symbol.EQUALS, [SHIFT, 21 /* Start_Equals */])
2825+    .add(Symbol.PLUS, [SHIFT, 10 /* PrefixUnaryPlus */])
2826+    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* LeftParen */])
2827+    .add(Symbol.MINUS, [SHIFT, 9 /* PrefixUnaryMinus */])
2828+    .add(Symbol.FUNCTION, [SHIFT, 11 /* Function */])
2829+    .add(Symbol.CELL, 12 /* Cell */)
2830+    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* FixedCell */])
2831+    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* CellUpper */])
2832+    .add(Symbol.VARIABLE, [SHIFT, 14 /* Variable */])
2833+    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* NumberUpper */])
2834+    .add(Symbol.FULL_ERROR, [SHIFT, 18 /* Pound */])
2835+    .build();
2836+table[72 /* Variable_Comma */] = ObjectBuilder_1.ObjectBuilder
2837+    .add(Symbol.ERROR, 13 /* Error */)
2838     .add(Symbol.EXPRESSION, 75)
2839-    .add(Symbol.VARIABLE_SEQUENCE, 3)
2840-    .add(Symbol.TIME_AMPM, [SHIFT, 4 /* TIME_CALL */])
2841-    .add(Symbol.TIME_24, [SHIFT, 5 /* AS_NUMBER */])
2842-    .add(Symbol.NUMBER, 6)
2843-    .add(Symbol.STRING, [SHIFT, 7 /* AMPERSAND */])
2844-    .add(Symbol.EQUALS, [SHIFT, 21 /* INVERT_NUM */])
2845-    .add(Symbol.PLUS, [SHIFT, 10 /* LAST_NUMBER */])
2846-    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* EQUALS */])
2847-    .add(Symbol.MINUS, [SHIFT, 9 /* PLUS */])
2848-    .add(Symbol.FUNCTION, [SHIFT, 11 /* LTE */])
2849-    .add(Symbol.CELL, 12)
2850-    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* LT */])
2851-    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* MINUS */])
2852-    .add(Symbol.VARIABLE, [SHIFT, 14 /* NOT */])
2853-    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* GT */])
2854-    .add(Symbol.POUND, [SHIFT, 18 /* MULTIPLY */]).build();
2855-table[73] = ObjectBuilder
2856+    .add(Symbol.VARIABLE_SEQUENCE, 3 /* VariableSeq */)
2857+    .add(Symbol.NUMBER, 6 /* Start_Number */)
2858+    .add(Symbol.STRING, [SHIFT, 7 /* Start_String */])
2859+    .add(Symbol.EQUALS, [SHIFT, 21 /* Start_Equals */])
2860+    .add(Symbol.PLUS, [SHIFT, 10 /* PrefixUnaryPlus */])
2861+    .add(Symbol.LEFT_PAREN, [SHIFT, 8 /* LeftParen */])
2862+    .add(Symbol.MINUS, [SHIFT, 9 /* PrefixUnaryMinus */])
2863+    .add(Symbol.FUNCTION, [SHIFT, 11 /* Function */])
2864+    .add(Symbol.CELL, 12 /* Cell */)
2865+    .add(Symbol.FIXEDCELL, [SHIFT, 16 /* FixedCell */])
2866+    .add(Symbol.CELL_UPPER, [SHIFT, 17 /* CellUpper */])
2867+    .add(Symbol.VARIABLE, [SHIFT, 14 /* Variable */])
2868+    .add(Symbol.NUMBER_UPPER, [SHIFT, 15 /* NumberUpper */])
2869+    .add(Symbol.ARRAY, [SHIFT, 61])
2870+    .add(Symbol.FULL_ERROR, [SHIFT, 18 /* Pound */])
2871+    .build();
2872+table[73] = ObjectBuilder_1.ObjectBuilder
2873     .add(Symbol.EOF, [REDUCE, 42 /* REDUCE_LAST_THREE_B */])
2874     .add(Symbol.AMPERSAND, [REDUCE, 42 /* REDUCE_LAST_THREE_B */])
2875     .add(Symbol.EQUALS, [REDUCE, 42 /* REDUCE_LAST_THREE_B */])
2876@@ -1396,7 +1235,6 @@ table[73] = ObjectBuilder
2877     .add(Symbol.RIGHT_PAREN, [REDUCE, 42 /* REDUCE_LAST_THREE_B */])
2878     .add(Symbol.LESS_THAN, [REDUCE, 42 /* REDUCE_LAST_THREE_B */])
2879     .add(Symbol.GREATER_THAN, [REDUCE, 42 /* REDUCE_LAST_THREE_B */])
2880-    .add(Symbol.NOT, [REDUCE, 42 /* REDUCE_LAST_THREE_B */])
2881     .add(Symbol.MINUS, [REDUCE, 42 /* REDUCE_LAST_THREE_B */])
2882     .add(Symbol.ASTERISK, [REDUCE, 42 /* REDUCE_LAST_THREE_B */])
2883     .add(Symbol.DIVIDE, [REDUCE, 42 /* REDUCE_LAST_THREE_B */])
2884@@ -1404,33 +1242,32 @@ table[73] = ObjectBuilder
2885     .add(Symbol.SEMI_COLON, [REDUCE, 42 /* REDUCE_LAST_THREE_B */])
2886     .add(Symbol.COMMA, [REDUCE, 42 /* REDUCE_LAST_THREE_B */])
2887     .add(Symbol.VARIABLE, [REDUCE, 42 /* REDUCE_LAST_THREE_B */])
2888-    .add(Symbol.POUND, [REDUCE, 42 /* REDUCE_LAST_THREE_B */]).build();
2889-table[74] = ObjectBuilder
2890-    .add(Symbol.AMPERSAND, [SHIFT, 20 /* TO_POWER */])
2891-    .add(Symbol.EQUALS, [SHIFT, 21 /* INVERT_NUM */])
2892-    .add(Symbol.PLUS, [SHIFT, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2893+    .add(Symbol.FULL_ERROR, [REDUCE, 42 /* REDUCE_LAST_THREE_B */])
2894+    .build();
2895+table[74] = ObjectBuilder_1.ObjectBuilder
2896+    .add(Symbol.AMPERSAND, [SHIFT, 20 /* Number_Ampersand */])
2897+    .add(Symbol.EQUALS, [SHIFT, 21 /* Start_Equals */])
2898+    .add(Symbol.PLUS, [SHIFT, 22 /* Number_Plus */])
2899     .add(Symbol.RIGHT_PAREN, [REDUCE, 34 /* REDUCE_INT */])
2900-    .add(Symbol.LESS_THAN, [SHIFT, 23 /* CALL_FUNCTION_LAST_BLANK */])
2901-    .add(Symbol.GREATER_THAN, [SHIFT, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */])
2902-    .add(Symbol.NOT, [SHIFT, 25 /* I25 */])
2903-    .add(Symbol.MINUS, [SHIFT, 26 /* I26 */])
2904-    .add(Symbol.ASTERISK, [SHIFT, 27 /* I27 */])
2905-    .add(Symbol.DIVIDE, [SHIFT, 28 /* FIXED_CELL_VAL */])
2906-    .add(Symbol.CARROT, [SHIFT, 29 /* FIXED_CELL_RANGE_VAL */])
2907+    .add(Symbol.LESS_THAN, [SHIFT, 23 /* LessThan */])
2908+    .add(Symbol.GREATER_THAN, [SHIFT, 24 /* GreaterThan */])
2909+    .add(Symbol.MINUS, [SHIFT, 26 /* Number_Minus */])
2910+    .add(Symbol.ASTERISK, [SHIFT, 27 /* Number_Asterisk */])
2911+    .add(Symbol.DIVIDE, [SHIFT, 28 /* Number_Divide */])
2912+    .add(Symbol.CARROT, [SHIFT, 29 /* Number_Carrot */])
2913     .add(Symbol.SEMI_COLON, [REDUCE, 34 /* REDUCE_INT */])
2914     .add(Symbol.COMMA, [REDUCE, 34 /* REDUCE_INT */]).build();
2915-table[75] = ObjectBuilder
2916-    .add(Symbol.AMPERSAND, [SHIFT, 20 /* TO_POWER */])
2917-    .add(Symbol.EQUALS, [SHIFT, 21 /* INVERT_NUM */])
2918-    .add(Symbol.PLUS, [SHIFT, 22 /* TO_NUMBER_NAN_AS_ZERO */])
2919+table[75] = ObjectBuilder_1.ObjectBuilder
2920+    .add(Symbol.AMPERSAND, [SHIFT, 20 /* Number_Ampersand */])
2921+    .add(Symbol.EQUALS, [SHIFT, 21 /* Start_Equals */])
2922+    .add(Symbol.PLUS, [SHIFT, 22 /* Number_Plus */])
2923     .add(Symbol.RIGHT_PAREN, [REDUCE, 35 /* REDUCE_PERCENT */])
2924-    .add(Symbol.LESS_THAN, [SHIFT, 23 /* CALL_FUNCTION_LAST_BLANK */])
2925-    .add(Symbol.GREATER_THAN, [SHIFT, 24 /* CALL_FUNCTION_LAST_TWO_IN_STACK */])
2926-    .add(Symbol.NOT, [SHIFT, 25 /* I25 */])
2927-    .add(Symbol.MINUS, [SHIFT, 26 /* I26 */])
2928-    .add(Symbol.ASTERISK, [SHIFT, 27 /* I27 */])
2929-    .add(Symbol.DIVIDE, [SHIFT, 28 /* FIXED_CELL_VAL */])
2930-    .add(Symbol.CARROT, [SHIFT, 29 /* FIXED_CELL_RANGE_VAL */])
2931+    .add(Symbol.LESS_THAN, [SHIFT, 23 /* LessThan */])
2932+    .add(Symbol.GREATER_THAN, [SHIFT, 24 /* GreaterThan */])
2933+    .add(Symbol.MINUS, [SHIFT, 26 /* Number_Minus */])
2934+    .add(Symbol.ASTERISK, [SHIFT, 27 /* Number_Asterisk */])
2935+    .add(Symbol.DIVIDE, [SHIFT, 28 /* Number_Divide */])
2936+    .add(Symbol.CARROT, [SHIFT, 29 /* Number_Carrot */])
2937     .add(Symbol.SEMI_COLON, [REDUCE, 35 /* REDUCE_PERCENT */])
2938     .add(Symbol.COMMA, [REDUCE, 35 /* REDUCE_PERCENT */]).build();
2939 var ACTION_TABLE = table;
2940diff --git a/dist/Sheet.js b/dist/Sheet.js
2941index e05fd23..a14720e 100644
2942--- a/dist/Sheet.js
2943+++ b/dist/Sheet.js
2944@@ -1,434 +1,217 @@
2945 "use strict";
2946 exports.__esModule = true;
2947-var Parser_1 = require("./Parser/Parser");
2948 var Cell_1 = require("./Cell");
2949 var Errors_1 = require("./Errors");
2950+var DataStore_1 = require("./Parser/DataStore");
2951+var Parser_1 = require("./Parser/Parser");
2952 var Formulas_1 = require("./Formulas");
2953-var AllFormulas = require("./Formulas/AllFormulas");
2954-exports.AllFormulas = AllFormulas;
2955-var TypeConverter_1 = require("./Utilities/TypeConverter");
2956+var MoreUtils_1 = require("./Utilities/MoreUtils");
2957 /**
2958- * Model representing a spreadsheet. When values/cells are added, dependencies recalculated, and true-values of those
2959- * cells will be updated.
2960+ * Represents a spreadsheet parser and data-store that act together as a functional spreadsheet.
2961  */
2962-var Sheet = (function () {
2963-    var instance = this;
2964-    // Will be overwritten, but needs to be initialized, and have some functions for tsc compilation.
2965-    var parser = {
2966-        setObj: function (obj) { },
2967-        parse: function (formula) { }
2968-    };
2969+var Sheet = /** @class */ (function () {
2970+    function Sheet() {
2971+        this.parser = Parser_1.FormulaParser(this);
2972+        this.dataStore = new DataStore_1.DataStore();
2973+    }
2974     /**
2975-     * Creates a new FormulaParser, which parses formulas, and does minimal error handling.
2976-     *
2977-     * @param handler should be this instance. Needs access to helper.fixedCellValue, helper.cellValue,
2978-     * helper.cellRangeValue, and helper.fixedCellRangeValue
2979-     * @returns formula parser instance for use with parser.js
2980-     * @constructor
2981+     * Iterate through cells in the data-store, returning the collected cells in the range.
2982+     * @param origin
2983+     * @param startCell
2984+     * @param endCell
2985+     * @returns {{index: Array; value: Array}}
2986      */
2987-    var FormulaParser = function (handler) {
2988-        var formulaLexer = function () { };
2989-        formulaLexer.prototype = Parser_1.Parser.lexer;
2990-        var formulaParser = function () {
2991-            this.lexer = new formulaLexer();
2992-            this.yy = {};
2993+    Sheet.prototype.iterateCells = function (origin, startCell, endCell) {
2994+        var result = {
2995+            index: [],
2996+            value: [] // list of cell value
2997         };
2998-        formulaParser.prototype = Parser_1.Parser;
2999-        var newParser = new formulaParser;
3000-        newParser.setObj = function (obj) {
3001-            newParser.yy.obj = obj;
3002+        var cols = {
3003+            start: 0,
3004+            end: 0
3005         };
3006-        newParser.yy.parseError = function (str, hash) {
3007-            throw new Errors_1.ParseError(JSON.stringify({
3008-                name: 'Parser error',
3009-                message: str,
3010-                prop: hash
3011-            }));
3012+        if (endCell.col >= startCell.col) {
3013+            cols = {
3014+                start: startCell.col,
3015+                end: endCell.col
3016+            };
3017+        }
3018+        else {
3019+            cols = {
3020+                start: endCell.col,
3021+                end: startCell.col
3022+            };
3023+        }
3024+        var rows = {
3025+            start: 0,
3026+            end: 0
3027         };
3028-        newParser.yy.handler = handler;
3029-        return newParser;
3030+        if (endCell.row >= startCell.row) {
3031+            rows = {
3032+                start: startCell.row,
3033+                end: endCell.row
3034+            };
3035+        }
3036+        else {
3037+            rows = {
3038+                start: endCell.row,
3039+                end: startCell.row
3040+            };
3041+        }
3042+        for (var column = cols.start; column <= cols.end; column++) {
3043+            for (var row = rows.start; row <= rows.end; row++) {
3044+                var cellIndex = MoreUtils_1.numberToCharacter(column) + (row + 1), cellValue = this.cellValue(origin, cellIndex);
3045+                result.index.push(cellIndex);
3046+                result.value.push(cellValue);
3047+            }
3048+        }
3049+        return result;
3050     };
3051     /**
3052-     * Holds cell values, and allows for the updating and manipulation of those cells.
3053+     * Call function with given arguments. Used for calling formulas.
3054+     * @param fn
3055+     * @param args
3056+     * @returns {any}
3057      */
3058-    var Matrix = (function () {
3059-        function Matrix() {
3060-            /**
3061-             * Holds cells inside an object for quick access.
3062-             */
3063-            this.data = {};
3064+    Sheet.prototype.callFunction = function (fn, args) {
3065+        fn = fn.toUpperCase();
3066+        args = args || [];
3067+        if (Formulas_1.Formulas.exists(fn)) {
3068+            return Formulas_1.Formulas.get(fn).apply(this, args);
3069         }
3070-        /**
3071-         * Gets the cell corresponding to the key. If the value is undefined, will return blank cell..
3072-         * @param key to look up cell
3073-         * @returns {Cell} to return, if it exists. Returns blank cell if key not in matrix.
3074-         */
3075-        Matrix.prototype.getCell = function (key) {
3076-            if (key in this.data) {
3077-                return this.data[key];
3078-            }
3079-            return new Cell_1.Cell(key);
3080-        };
3081-        /**
3082-         * Add cell to matrix. If it exists, update the necessary values. If it doesn't exist add it.
3083-         * @param cell to add to matrix.
3084-         * @returns {Cell} Returns the cell after it has been added.
3085-         */
3086-        Matrix.prototype.addCell = function (cell) {
3087-            var cellId = cell.getId();
3088-            if (!(cellId in this.data)) {
3089-                this.data[cellId] = cell;
3090+        throw new Errors_1.NameError("Unknown function: '" + fn + "'.");
3091+    };
3092+    /**
3093+     * Call variable, which could include calling a function.
3094+     * @param args
3095+     * @returns {any}
3096+     */
3097+    Sheet.prototype.callVariable = function (args) {
3098+        args = args || [];
3099+        var str = args.shift(); // the first in args is the name of the function to call.
3100+        if (str) {
3101+            str = str.toUpperCase();
3102+            if (Formulas_1.Formulas.exists(str)) {
3103+                return Formulas_1.Formulas.get(str).apply(this, args);
3104             }
3105-            else {
3106-                this.getCell(cellId).updateDependencies(cell.getDependencies());
3107-                this.getCell(cellId).setValue(cell.getValue());
3108-                this.getCell(cellId).setError(cell.getError());
3109+        }
3110+        throw new Errors_1.NameError("Unknown variable: '" + str + "'.");
3111+    };
3112+    ;
3113+    /**
3114+     * Fetch cell, updating dependencies in process.
3115+     * @param origin
3116+     * @param cellId
3117+     * @returns {Cell}
3118+     */
3119+    Sheet.prototype.cellValue = function (origin, cellId) {
3120+        var cell = this.dataStore.getCell(cellId);
3121+        //update dependencies
3122+        this.dataStore.getCell(origin).updateDependencies([cellId]);
3123+        // check references error
3124+        if (cell && cell.getDependencies()) {
3125+            if (cell.getDependencies().indexOf(cellId) !== -1) {
3126+                throw new Errors_1.RefError("Reference does not exist.");
3127             }
3128-            return this.getCell(cellId);
3129-        };
3130-        /**
3131-         * Get all dependencies for a specific cell.
3132-         * @param id of cell
3133-         * @returns {Array} of A1-format cell ID dependencies, in no particular oder.
3134-         */
3135-        Matrix.prototype.getDependencies = function (id) {
3136-            var getDependencies = function (id) {
3137-                var filtered = [];
3138-                for (var key in this.data) {
3139-                    var cell = this.data[key];
3140-                    if (cell.dependencies) {
3141-                        if (cell.dependencies.indexOf(id) > -1) {
3142-                            filtered.push(cell);
3143-                        }
3144-                    }
3145-                }
3146-                var deps = [];
3147-                filtered.forEach(function (cell) {
3148-                    if (deps.indexOf(cell.id) === -1) {
3149-                        deps.push(cell.id);
3150-                    }
3151-                });
3152-                return deps;
3153-            }.bind(this);
3154-            var allDependencies = [];
3155-            var getTotalDependencies = function (id) {
3156-                var deps = getDependencies(id);
3157-                if (deps.length) {
3158-                    deps.forEach(function (refId) {
3159-                        if (allDependencies.indexOf(refId) === -1) {
3160-                            allDependencies.push(refId);
3161-                            var cell = this.getCell(refId);
3162-                            if (cell.getDependencies().length) {
3163-                                getTotalDependencies(refId);
3164-                            }
3165-                        }
3166-                    }.bind(this));
3167-                }
3168-            }.bind(this);
3169-            getTotalDependencies(id);
3170-            return allDependencies;
3171-        };
3172-        /**
3173-         * Set a cell in this matrix. Could update an existing cell, or add a new one.
3174-         * @param id to of cell to create of update
3175-         * @param rawFormula of cell to create or update
3176-         */
3177-        Matrix.prototype.setCell = function (id, rawFormula) {
3178-            var cell = new Cell_1.Cell(id);
3179-            cell.setValue(rawFormula);
3180-            registerCellInMatrix(cell);
3181-            recalculateCellDependencies(cell);
3182-        };
3183-        return Matrix;
3184-    }());
3185+        }
3186+        return cell;
3187+    };
3188     /**
3189-     * Recalculate a cell's dependencies. Involves recalculating cell formulas for ALL dependencies.
3190-     * @param cell to recalculate dependencies
3191+     * Get a range of cells.
3192+     * @param origin - the cell id in A1 notation from which this range is being referenced.
3193+     * @param {string} start - first cell coordinate (in A1 notation) in iteration
3194+     * @param {string} end - final cell coordinate (in A1 notation) in iteration
3195+     * @returns {Array}
3196      */
3197-    var recalculateCellDependencies = function (cell) {
3198-        var allDependencies = instance.matrix.getDependencies(cell.getId());
3199-        allDependencies.forEach(function (refId) {
3200-            var currentCell = instance.matrix.getCell(refId);
3201+    Sheet.prototype.cellRangeValue = function (origin, start, end) {
3202+        var coordsStart = MoreUtils_1.A1toRowColCoordinates(start), coordsEnd = MoreUtils_1.A1toRowColCoordinates(end);
3203+        // iterate cells to get values and indexes
3204+        var cells = this.iterateCells(origin, coordsStart, coordsEnd), result = [];
3205+        //update dependencies
3206+        this.dataStore.getCell(origin).updateDependencies(cells.index);
3207+        result.push(cells.value);
3208+        return result;
3209+    };
3210+    /**
3211+     * Get a fixed cell value.
3212+     * @param origin
3213+     * @param id
3214+     * @returns {Cell}
3215+     */
3216+    Sheet.prototype.fixedCellValue = function (origin, id) {
3217+        id = id.replace(/\$/g, '');
3218+        return this.cellValue(origin, id);
3219+    };
3220+    ;
3221+    /**
3222+     * Get a fixed cell value range.
3223+     * @param origin
3224+     * @param start
3225+     * @param end
3226+     * @returns {Array}
3227+     */
3228+    Sheet.prototype.fixedCellRangeValue = function (origin, start, end) {
3229+        start = start.replace(/\$/g, '');
3230+        end = end.replace(/\$/g, '');
3231+        return this.cellRangeValue(origin, start, end);
3232+    };
3233+    ;
3234+    /**
3235+     * Recalculate dependencies for a cell.
3236+     * @param {Cell} cell
3237+     */
3238+    Sheet.prototype.recalculateCellDependencies = function (cell) {
3239+        var allDependencies = this.dataStore.getDependencies(cell.getId());
3240+        for (var _i = 0, allDependencies_1 = allDependencies; _i < allDependencies_1.length; _i++) {
3241+            var refId = allDependencies_1[_i];
3242+            var currentCell = this.dataStore.getCell(refId);
3243             if (currentCell && currentCell.hasFormula()) {
3244-                calculateCellFormula(currentCell);
3245+                this.calculateCellFormula(currentCell);
3246             }
3247-        });
3248+        }
3249     };
3250     /**
3251-     * Calculate a cell's formula by parsing it, and updating it's value and error fields.
3252-     * @param cell to calculate
3253-     * @returns {{error: null, result: null}} parsed result
3254+     * Executes the formula in a cell.
3255+     * @param {Cell} cell
3256+     * @returns {{error: Error; result: any} | {error: any; result: any}}
3257      */
3258-    var calculateCellFormula = function (cell) {
3259+    Sheet.prototype.calculateCellFormula = function (cell) {
3260         // to avoid double translate formulas, update cell data in parser
3261-        var parsed = parse(cell.getFormula(), cell.getId());
3262-        instance.matrix.getCell(cell.getId()).setValue(parsed.result);
3263-        instance.matrix.getCell(cell.getId()).setError(parsed.error);
3264+        var parsed = this.parse(cell.getFormula(), cell.getId());
3265+        this.dataStore.getCell(cell.getId()).setValue(parsed.result);
3266+        this.dataStore.getCell(cell.getId()).setError(parsed.error);
3267         return parsed;
3268     };
3269     /**
3270-     * Register a cell in the matrix, and calculate its formula if it has one.
3271-     * @param cell to register
3272+     * Add a cell to the data-store, recording and updating dependencies if necessary.
3273+     * @param {Cell} cell
3274      */
3275-    var registerCellInMatrix = function (cell) {
3276-        instance.matrix.addCell(cell);
3277+    Sheet.prototype.registerCellInDataStore = function (cell) {
3278+        this.dataStore.addCell(cell);
3279         if (cell.hasFormula()) {
3280-            calculateCellFormula(cell);
3281-        }
3282-    };
3283-    var utils = {
3284-        isArray: function (value) {
3285-            return value instanceof Array;
3286-        },
3287-        isFunction: function (value) {
3288-            return value instanceof Function;
3289-        },
3290-        toNum: function (chr) {
3291-            chr = utils.clearFormula(chr);
3292-            var base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', i, j, result = 0;
3293-            for (i = 0, j = chr.length - 1; i < chr.length; i += 1, j -= 1) {
3294-                result += Math.pow(base.length, j) * (base.indexOf(chr[i]) + 1);
3295-            }
3296-            if (result) {
3297-                --result;
3298-            }
3299-            return result;
3300-        },
3301-        toChar: function (num) {
3302-            var s = '';
3303-            while (num >= 0) {
3304-                s = String.fromCharCode(num % 26 + 97) + s;
3305-                num = Math.floor(num / 26) - 1;
3306-            }
3307-            return s.toUpperCase();
3308-        },
3309-        XYtoA1: function (x, y) {
3310-            function numberToLetters(num) {
3311-                var mod = num % 26, pow = num / 26 | 0, out = mod ? String.fromCharCode(64 + mod) : (--pow, 'Z');
3312-                return pow ? numberToLetters(pow) + out : out;
3313-            }
3314-            return numberToLetters(x + 1) + (y + 1).toString();
3315-        },
3316-        cellCoords: function (cell) {
3317-            var num = cell.match(/\d+$/), alpha = cell.replace(num, '');
3318-            return {
3319-                row: parseInt(num[0], 10) - 1,
3320-                col: utils.toNum(alpha)
3321-            };
3322-        },
3323-        clearFormula: function (formula) {
3324-            return formula.replace(/\$/g, '');
3325-        },
3326-        iterateCells: function (startCell, endCell, callback) {
3327-            var result = {
3328-                index: [],
3329-                value: [] // list of cell value
3330-            };
3331-            var cols = {
3332-                start: 0,
3333-                end: 0
3334-            };
3335-            if (endCell.col >= startCell.col) {
3336-                cols = {
3337-                    start: startCell.col,
3338-                    end: endCell.col
3339-                };
3340-            }
3341-            else {
3342-                cols = {
3343-                    start: endCell.col,
3344-                    end: startCell.col
3345-                };
3346-            }
3347-            var rows = {
3348-                start: 0,
3349-                end: 0
3350-            };
3351-            if (endCell.row >= startCell.row) {
3352-                rows = {
3353-                    start: startCell.row,
3354-                    end: endCell.row
3355-                };
3356-            }
3357-            else {
3358-                rows = {
3359-                    start: endCell.row,
3360-                    end: startCell.row
3361-                };
3362-            }
3363-            for (var column = cols.start; column <= cols.end; column++) {
3364-                for (var row = rows.start; row <= rows.end; row++) {
3365-                    var cellIndex = utils.toChar(column) + (row + 1), cellValue = instance.helper.cellValue.call(this, cellIndex);
3366-                    result.index.push(cellIndex);
3367-                    result.value.push(cellValue);
3368-                }
3369-            }
3370-            if (utils.isFunction(callback)) {
3371-                return callback.apply(callback, [result]);
3372-            }
3373-            else {
3374-                return result;
3375-            }
3376-        },
3377-        sort: function (rev) {
3378-            return function (a, b) {
3379-                return ((a < b) ? -1 : ((a > b) ? 1 : 0)) * (rev ? -1 : 1);
3380-            };
3381-        }
3382-    };
3383-    var helper = {
3384-        /**
3385-         * Is the value a number or can the value be interpreted as a number
3386-         */
3387-        number: function (x) {
3388-            return TypeConverter_1.TypeConverter.valueToNumber(x);
3389-        },
3390-        string: function (str) {
3391-            return str.substring(1, str.length - 1);
3392-        },
3393-        numberInverted: function (num) {
3394-            return this.number(num) * (-1);
3395-        },
3396-        specialMatch: function (type, exp1, exp2) {
3397-            var result;
3398-            switch (type) {
3399-                case '&':
3400-                    result = exp1.toString() + exp2.toString();
3401-                    break;
3402-            }
3403-            return result;
3404-        },
3405-        logicMatch: function (type, exp1, exp2) {
3406-            var result;
3407-            switch (type) {
3408-                case '=':
3409-                    result = (exp1 === exp2);
3410-                    break;
3411-                case '>':
3412-                    result = (exp1 > exp2);
3413-                    break;
3414-                case '<':
3415-                    result = (exp1 < exp2);
3416-                    break;
3417-                case '>=':
3418-                    result = (exp1 >= exp2);
3419-                    break;
3420-                case '<=':
3421-                    result = (exp1 === exp2);
3422-                    break;
3423-                case '<>':
3424-                    result = (exp1 != exp2);
3425-                    break;
3426-                case 'NOT':
3427-                    result = (exp1 != exp2);
3428-                    break;
3429-            }
3430-            return result;
3431-        },
3432-        mathMatch: function (type, number1, number2) {
3433-            var result;
3434-            number1 = helper.number(number1);
3435-            number2 = helper.number(number2);
3436-            switch (type) {
3437-                case '+':
3438-                    result = number1 + number2;
3439-                    break;
3440-                case '-':
3441-                    result = number1 - number2;
3442-                    break;
3443-                case '/':
3444-                    if (number2 === 0) {
3445-                        throw new Errors_1.DivZeroError("Evaluation caused divide by zero error.");
3446-                    }
3447-                    if (number2 !== 0 && number1 === 0) {
3448-                        result = 0;
3449-                    }
3450-                    result = number1 / number2;
3451-                    if (result == Infinity) {
3452-                        throw new Errors_1.DivZeroError("Evaluation caused divide by zero error.");
3453-                    }
3454-                    else if (isNaN(result)) {
3455-                        throw new Errors_1.DivZeroError("Evaluation caused divide by zero error.");
3456-                    }
3457-                    break;
3458-                case '*':
3459-                    result = number1 * number2;
3460-                    break;
3461-                case '^':
3462-                    result = Math.pow(number1, number2);
3463-                    break;
3464-            }
3465-            return result;
3466-        },
3467-        callFunction: function (fn, args) {
3468-            fn = fn.toUpperCase();
3469-            args = args || [];
3470-            if (Formulas_1.Formulas.exists(fn)) {
3471-                return Formulas_1.Formulas.get(fn).apply(this, args);
3472-            }
3473-            throw new Errors_1.NameError("Unknown function: '" + fn + "'.");
3474-        },
3475-        callVariable: function (args) {
3476-            args = args || [];
3477-            var str = args.shift(); // the first in args is the name of the function to call.
3478-            if (str) {
3479-                str = str.toUpperCase();
3480-                if (Formulas_1.Formulas.exists(str)) {
3481-                    return Formulas_1.Formulas.get(str).apply(this, args);
3482-                }
3483-            }
3484-            throw new Errors_1.NameError("Unknown variable: '" + str + "'.");
3485-        },
3486-        cellValue: function (cellId) {
3487-            var origin = this, cell = instance.matrix.getCell(cellId);
3488-            //update dependencies
3489-            instance.matrix.getCell(origin).updateDependencies([cellId]);
3490-            // check references error
3491-            if (cell && cell.getDependencies()) {
3492-                if (cell.getDependencies().indexOf(cellId) !== -1) {
3493-                    throw new Errors_1.RefError("Reference does not exist.");
3494-                }
3495-            }
3496-            return cell;
3497-        },
3498-        cellRangeValue: function (start, end) {
3499-            var coordsStart = utils.cellCoords(start), coordsEnd = utils.cellCoords(end), origin = this;
3500-            // iterate cells to get values and indexes
3501-            var cells = instance.utils.iterateCells.call(this, coordsStart, coordsEnd), result = [];
3502-            //update dependencies
3503-            instance.matrix.getCell(origin).updateDependencies(cells.index);
3504-            result.push(cells.value);
3505-            return result;
3506-        },
3507-        fixedCellValue: function (id) {
3508-            id = id.replace(/\$/g, '');
3509-            return instance.helper.cellValue.call(this, id);
3510-        },
3511-        fixedCellRangeValue: function (start, end) {
3512-            start = start.replace(/\$/g, '');
3513-            end = end.replace(/\$/g, '');
3514-            return instance.helper.cellRangeValue.call(this, start, end);
3515+            this.calculateCellFormula(cell);
3516         }
3517     };
3518     /**
3519-     * Parse a formula for a particular cell. Involves calculating all dependencies and potentially updating them as well.
3520-     * @param formula to parse
3521-     * @param cellId necessary for dependency access
3522-     * @returns {{error: null, result: null}} a parsed value including an error, and potential resulting value
3523+     * Parse a formula for a given cellId. This involves all calculations and look-ups.
3524+     * @param formula
3525+     * @param cellId
3526+     * @returns {any}
3527      */
3528-    var parse = function (formula, cellId) {
3529+    Sheet.prototype.parse = function (formula, cellId) {
3530         var result = null;
3531         var error = null;
3532         try {
3533-            parser.setObj(cellId);
3534-            result = parser.parse(formula);
3535-            var deps = instance.matrix.getDependencies(cellId);
3536+            this.parser.yy.originCellId = cellId;
3537+            result = this.parser.parse(formula);
3538+            var deps = this.dataStore.getDependencies(cellId);
3539             if (deps.indexOf(cellId) !== -1) {
3540                 result = null;
3541-                deps.forEach(function (id) {
3542-                    instance.matrix.getCell(id).setError(new Errors_1.RefError("Reference does not exist"));
3543-                    instance.matrix.getCell(id).clearValue();
3544-                });
3545+                for (var _i = 0, deps_1 = deps; _i < deps_1.length; _i++) {
3546+                    var id = deps_1[_i];
3547+                    this.dataStore.getCell(id).setError(new Errors_1.RefError("Reference does not exist"));
3548+                    this.dataStore.getCell(id).clearValue();
3549+                }
3550                 error = new Errors_1.RefError("Reference does not exist.");
3551             }
3552         }
3553@@ -447,55 +230,42 @@ var Sheet = (function () {
3554         };
3555     };
3556     /**
3557-     * Set a cell value by A1-format cell ID
3558-     * @param id of cel to set
3559-     * @param value raw input to update the cell with
3560+     * Set a cell's value, by id.
3561+     * @param {string} id
3562+     * @param {string} value
3563      */
3564-    var setCell = function (id, value) {
3565-        instance.matrix.setCell(id, value.toString());
3566+    Sheet.prototype.setCell = function (id, value) {
3567+        var cell = new Cell_1.Cell(id);
3568+        cell.setValue(value.toString());
3569+        this.registerCellInDataStore(cell);
3570+        this.recalculateCellDependencies(cell);
3571     };
3572     /**
3573-     * Get a cell by A1-format cell ID, if it exists in the Sheet. If not return null.
3574-     * @param id to lookup the cell
3575-     * @returns {Cell} cell found, or null.
3576+     * Get a cell from the data-store, returning null if a cell is undefined.
3577+     * @param {string} id
3578+     * @returns {Cell}
3579      */
3580-    var getCell = function (id) {
3581-        var cell = instance.matrix.getCell(id);
3582+    Sheet.prototype.getCell = function (id) {
3583+        var cell = this.dataStore.getCell(id);
3584         if (cell === undefined) {
3585             return null;
3586         }
3587         return cell;
3588     };
3589     /**
3590-     * Load a matrix into this sheet. Matrix values can be of any type, as long as they have a toString()
3591-     * @param input matrix
3592+     * Load an a matrix of cells into the data-store.
3593+     * @param {Array<Array<any>>} input
3594      */
3595-    this.load = function (input) {
3596+    Sheet.prototype.load = function (input) {
3597         for (var y = 0; y < input.length; y++) {
3598             for (var x = 0; x < input[0].length; x++) {
3599                 // set the cell here
3600-                var id = utils.XYtoA1(x, y);
3601+                var id = MoreUtils_1.convertXYtoA1Coordinates(x, y);
3602                 this.setCell(id, input[y][x].toString());
3603             }
3604         }
3605     };
3606-    /**
3607-     * Render this Sheet as a string in which each row is a cell.
3608-     * @returns {string}
3609-     */
3610-    this.toString = function () {
3611-        var toReturn = "";
3612-        for (var key in this.matrix.data) {
3613-            toReturn += this.matrix.data[key].toString() + "\n";
3614-        }
3615-        return toReturn;
3616-    };
3617-    parser = FormulaParser(instance);
3618-    instance.matrix = new Matrix();
3619-    this.utils = utils;
3620-    this.helper = helper;
3621-    this.parse = parse;
3622-    this.setCell = setCell;
3623-    this.getCell = getCell;
3624-});
3625+    ;
3626+    return Sheet;
3627+}());
3628 exports.Sheet = Sheet;
3629diff --git a/dist/Utilities/ArgsChecker.js b/dist/Utilities/ArgsChecker.js
3630index ff7c368..c7e9bb6 100644
3631--- a/dist/Utilities/ArgsChecker.js
3632+++ b/dist/Utilities/ArgsChecker.js
3633@@ -4,7 +4,7 @@ var Errors_1 = require("../Errors");
3634 /**
3635  * Static class to check argument length within expected ranges when calling functions.
3636  */
3637-var ArgsChecker = (function () {
3638+var ArgsChecker = /** @class */ (function () {
3639     function ArgsChecker() {
3640     }
3641     /**
3642diff --git a/dist/Utilities/CriteriaFunctionFactory.js b/dist/Utilities/CriteriaFunctionFactory.js
3643index a1519ca..e2651ff 100644
3644--- a/dist/Utilities/CriteriaFunctionFactory.js
3645+++ b/dist/Utilities/CriteriaFunctionFactory.js
3646@@ -23,7 +23,7 @@ function wildCardRegex(c) {
3647 /**
3648  * Creates a criteria function to evaluate elements in a range in an *IF function.
3649  */
3650-var CriteriaFunctionFactory = (function () {
3651+var CriteriaFunctionFactory = /** @class */ (function () {
3652     function CriteriaFunctionFactory() {
3653     }
3654     /**
3655diff --git a/dist/Utilities/DateRegExBuilder.js b/dist/Utilities/DateRegExBuilder.js
3656index 33f8a2b..46385ef 100644
3657--- a/dist/Utilities/DateRegExBuilder.js
3658+++ b/dist/Utilities/DateRegExBuilder.js
3659@@ -3,7 +3,7 @@ exports.__esModule = true;
3660 /**
3661  * Build a regular expression step by step, to make it easier to build and read the resulting regular expressions.
3662  */
3663-var DateRegExBuilder = (function () {
3664+var DateRegExBuilder = /** @class */ (function () {
3665     function DateRegExBuilder() {
3666         this.regexString = "";
3667     }
3668@@ -182,7 +182,7 @@ var DateRegExBuilder = (function () {
3669     DateRegExBuilder.prototype.build = function () {
3670         return new RegExp(this.regexString, 'i');
3671     };
3672+    DateRegExBuilder.ZERO_OR_MORE_SPACES = "\\s*";
3673     return DateRegExBuilder;
3674 }());
3675-DateRegExBuilder.ZERO_OR_MORE_SPACES = "\\s*";
3676 exports.DateRegExBuilder = DateRegExBuilder;
3677diff --git a/dist/Utilities/Filter.js b/dist/Utilities/Filter.js
3678index 48ce227..4560421 100644
3679--- a/dist/Utilities/Filter.js
3680+++ b/dist/Utilities/Filter.js
3681@@ -4,7 +4,7 @@ var Errors_1 = require("../Errors");
3682 /**
3683  * Static class to help filter down Arrays
3684  */
3685-var Filter = (function () {
3686+var Filter = /** @class */ (function () {
3687     function Filter() {
3688     }
3689     /**
3690diff --git a/dist/Utilities/MoreUtils.js b/dist/Utilities/MoreUtils.js
3691index 8516678..c9c8639 100644
3692--- a/dist/Utilities/MoreUtils.js
3693+++ b/dist/Utilities/MoreUtils.js
3694@@ -18,11 +18,87 @@ function isDefined(value) {
3695     return value !== undefined;
3696 }
3697 exports.isDefined = isDefined;
3698+/**
3699+ * Returns true if value is an instance of a Array.
3700+ * @param value
3701+ * @returns {boolean}
3702+ */
3703+function isArray(value) {
3704+    return value instanceof Array;
3705+}
3706+exports.isArray = isArray;
3707+/**
3708+ * Alphabetical character to number.
3709+ * @param chr
3710+ * @returns {number}
3711+ */
3712+function characterToNumber(chr) {
3713+    chr = chr.replace(/\$/g, '');
3714+    var base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', i, j, result = 0;
3715+    for (i = 0, j = chr.length - 1; i < chr.length; i += 1, j -= 1) {
3716+        result += Math.pow(base.length, j) * (base.indexOf(chr[i]) + 1);
3717+    }
3718+    if (result) {
3719+        --result;
3720+    }
3721+    return result;
3722+}
3723+exports.characterToNumber = characterToNumber;
3724+/**
3725+ * Converts a number to an alphabetical character.
3726+ * @param num
3727+ * @returns {string}
3728+ */
3729+function numberToCharacter(num) {
3730+    var s = '';
3731+    while (num >= 0) {
3732+        s = String.fromCharCode(num % 26 + 97) + s;
3733+        num = Math.floor(num / 26) - 1;
3734+    }
3735+    return s.toUpperCase();
3736+}
3737+exports.numberToCharacter = numberToCharacter;
3738+/**
3739+ * Converts a quoted string to an un-quoted string: `"hey"` to `hey`
3740+ * @param str
3741+ * @returns {string}
3742+ */
3743+function string(str) {
3744+    return str.substring(1, str.length - 1);
3745+}
3746+exports.string = string;
3747+/**
3748+ * Converts XY coordinates (eg {0, 0}) to A1 coordinates (eg {A1}).
3749+ * @param x
3750+ * @param y
3751+ * @returns {string}
3752+ */
3753+function convertXYtoA1Coordinates(x, y) {
3754+    function numberToLetters(num) {
3755+        var mod = num % 26, pow = num / 26 | 0, out = mod ? String.fromCharCode(64 + mod) : (--pow, 'Z');
3756+        return pow ? numberToLetters(pow) + out : out;
3757+    }
3758+    return numberToLetters(x + 1) + (y + 1).toString();
3759+}
3760+exports.convertXYtoA1Coordinates = convertXYtoA1Coordinates;
3761+/**
3762+ * Returns RowCol coordinates of an A1 cellId
3763+ * @param cellId
3764+ * @returns {Object}
3765+ */
3766+function A1toRowColCoordinates(cellId) {
3767+    var num = cellId.match(/\d+$/), alpha = cellId.replace(num, '');
3768+    return {
3769+        row: parseInt(num[0], 10) - 1,
3770+        col: characterToNumber(alpha)
3771+    };
3772+}
3773+exports.A1toRowColCoordinates = A1toRowColCoordinates;
3774 /**
3775  * Class for building formatted strings with commas, forced number of leading and trailing zeros, and arbitrary leading
3776  * and trailing strings.
3777  */
3778-var NumberStringBuilder = (function () {
3779+var NumberStringBuilder = /** @class */ (function () {
3780     function NumberStringBuilder() {
3781         this.shouldUseComma = false;
3782         this.integerZeroCount = 1; // e.g. default to "0.1"
3783diff --git a/dist/Utilities/ObjectBuilder.js b/dist/Utilities/ObjectBuilder.js
3784new file mode 100644
3785index 0000000..261aecc
3786--- /dev/null
3787+++ b/dist/Utilities/ObjectBuilder.js
3788@@ -0,0 +1,25 @@
3789+"use strict";
3790+exports.__esModule = true;
3791+/**
3792+ * Utility class to help build objects programmatically. Basically this allows me to have source code where constants
3793+ * are keys in objects.
3794+ */
3795+var ObjectBuilder = /** @class */ (function () {
3796+    function ObjectBuilder() {
3797+        this.o = {};
3798+    }
3799+    ObjectBuilder.add = function (k, v) {
3800+        var m = new ObjectBuilder();
3801+        m.o[k.toString()] = v;
3802+        return m;
3803+    };
3804+    ObjectBuilder.prototype.add = function (k, v) {
3805+        this.o[k.toString()] = v;
3806+        return this;
3807+    };
3808+    ObjectBuilder.prototype.build = function () {
3809+        return this.o;
3810+    };
3811+    return ObjectBuilder;
3812+}());
3813+exports.ObjectBuilder = ObjectBuilder;
3814diff --git a/dist/Utilities/Serializer.js b/dist/Utilities/Serializer.js
3815index 7028479..733122d 100644
3816--- a/dist/Utilities/Serializer.js
3817+++ b/dist/Utilities/Serializer.js
3818@@ -3,7 +3,7 @@ exports.__esModule = true;
3819 /**
3820  * Class to hold static methods for serialization.
3821  */
3822-var Serializer = (function () {
3823+var Serializer = /** @class */ (function () {
3824     function Serializer() {
3825     }
3826     Serializer.serialize = function (value) {
3827diff --git a/dist/Utilities/TypeConverter.js b/dist/Utilities/TypeConverter.js
3828index 7cde98a..c662e41 100644
3829--- a/dist/Utilities/TypeConverter.js
3830+++ b/dist/Utilities/TypeConverter.js
3831@@ -1,6 +1,5 @@
3832 "use strict";
3833 exports.__esModule = true;
3834-/// <reference path="../../node_modules/moment/moment.d.ts"/>
3835 var moment = require("moment");
3836 var Errors_1 = require("../Errors");
3837 var DateRegExBuilder_1 = require("./DateRegExBuilder");
3838@@ -137,7 +136,7 @@ function matchTimestampAndMutateMoment(timestampString, momentToMutate) {
3839 /**
3840  * Static class of helpers used to convert let ious types to each other.
3841  */
3842-var TypeConverter = (function () {
3843+var TypeConverter = /** @class */ (function () {
3844     function TypeConverter() {
3845     }
3846     /**
3847@@ -444,6 +443,14 @@ var TypeConverter = (function () {
3848             }
3849         }
3850     };
3851+    /**
3852+     * Converts any value to an inverted number or throws an error if it cannot coerce it to the number type
3853+     * @param value to convert
3854+     * @returns {number} to return. Will always return a number or throw an error. Never returns undefined.
3855+     */
3856+    TypeConverter.valueToInvertedNumber = function (value) {
3857+        return TypeConverter.valueToNumber(value) * (-1);
3858+    };
3859     /**
3860      * Converts any value to a number or throws an error if it cannot coerce it to the number type
3861      * @param value to convert
3862@@ -775,10 +782,10 @@ var TypeConverter = (function () {
3863         var v = (((hours % 24) * 60 * 60) + ((minutes) * 60) + (seconds)) / 86400;
3864         return v % 1;
3865     };
3866+    TypeConverter.ORIGIN_MOMENT = moment.utc([1899, 11, 30]).startOf("day");
3867+    TypeConverter.SECONDS_IN_DAY = 86400;
3868     return TypeConverter;
3869 }());
3870-TypeConverter.ORIGIN_MOMENT = moment.utc([1899, 11, 30]).startOf("day");
3871-TypeConverter.SECONDS_IN_DAY = 86400;
3872 exports.TypeConverter = TypeConverter;
3873 /**
3874  * Catches divide by zero situations and throws them as errors
3875diff --git a/src/Parser/Parser.ts b/src/Parser/Parser.ts
3876index c74eb42..96b407d 100644
3877--- a/src/Parser/Parser.ts
3878+++ b/src/Parser/Parser.ts
3879@@ -917,8 +917,8 @@ let Parser = (function () {
3880             return Symbol.EQUALS;
3881           case RuleIndex.PERCENT_SIGN:
3882             return Symbol.PERCENT;
3883-          case RuleIndex.POUND_SIGN:
3884-            return Symbol.POUND;
3885+          case RuleIndex.FULL_ERROR:
3886+            return Symbol.FULL_ERROR;
3887           case RuleIndex.END_OF_STRING:
3888             return Symbol.EOF;
3889         }
3890@@ -958,7 +958,7 @@ let Parser = (function () {
3891             RuleIndex.EXCLAMATION_POINT_RULE,
3892             RuleIndex.EQUALS_SIGN,
3893             RuleIndex.PERCENT_SIGN,
3894-            RuleIndex.POUND_SIGN,
3895+            RuleIndex.FULL_ERROR,
3896             RuleIndex.END_OF_STRING,
3897             37
3898           ],
3899diff --git a/src/Parser/ParserConstants.ts b/src/Parser/ParserConstants.ts
3900index 8ef0f43..4eebf66 100644
3901--- a/src/Parser/ParserConstants.ts
3902+++ b/src/Parser/ParserConstants.ts
3903@@ -35,7 +35,7 @@ const OPEN_SINGLE_QUITE = /^(?:')/;
3904 const EXCLAMATION_POINT_RULE = /^(?:!)/;
3905 const EQUALS_SIGN_RULE = /^(?:=)/;
3906 const PERCENT_SIGN_RULE = /^(?:%)/;
3907-const POUND_SIGN_RULE = /^(?:#N\/A|#NUM\!|#NULL\!|#DIV\/0\!|#VALUE\!|#REF\!|#ERROR)/;
3908+const FULL_ERROR_RULE = /^(?:#N\/A|#NUM\!|#NULL\!|#DIV\/0\!|#VALUE\!|#REF\!|#ERROR)/;
3909 const END_OF_STRING_RULE = /^(?:$)/;
3910 
3911 
3912@@ -72,7 +72,7 @@ const enum RuleIndex {
3913   EXCLAMATION_POINT_RULE = 32,
3914   EQUALS_SIGN = 33,
3915   PERCENT_SIGN = 34,
3916-  POUND_SIGN = 35,
3917+  FULL_ERROR = 35,
3918   END_OF_STRING = 36
3919 };
3920 
3921@@ -111,7 +111,7 @@ RULES[RuleIndex.OPEN_SINGLE_QUITE] = OPEN_SINGLE_QUITE;
3922 RULES[RuleIndex.EXCLAMATION_POINT_RULE] = EXCLAMATION_POINT_RULE;
3923 RULES[RuleIndex.EQUALS_SIGN] = EQUALS_SIGN_RULE;
3924 RULES[RuleIndex.PERCENT_SIGN] = PERCENT_SIGN_RULE;
3925-RULES[RuleIndex.POUND_SIGN] = POUND_SIGN_RULE;
3926+RULES[RuleIndex.FULL_ERROR] = FULL_ERROR_RULE;
3927 RULES[RuleIndex.END_OF_STRING] = END_OF_STRING_RULE;
3928 
3929 
3930@@ -201,7 +201,7 @@ enum Symbol {
3931   DECIMAL = 33,
3932   NUMBER_UPPER = 34,
3933   PERCENT = 35,
3934-  POUND = 36,
3935+  FULL_ERROR = 36,
3936   EXCLAMATION_POINT = 37
3937 }
3938 
3939@@ -319,7 +319,7 @@ const SYMBOL_NAME_TO_INDEX = {
3940   "DECIMAL": Symbol.DECIMAL,
3941   "NUMBER": Symbol.NUMBER_UPPER,
3942   "%": Symbol.PERCENT,
3943-  "#": Symbol.POUND,
3944+  "#": Symbol.FULL_ERROR,
3945   "!": Symbol.EXCLAMATION_POINT
3946 };
3947 let symbolIndexToName = {};
3948@@ -338,13 +338,14 @@ symbolIndexToName[Symbol.DIVIDE] = "/";
3949 symbolIndexToName[Symbol.CARROT] = "^";
3950 symbolIndexToName[Symbol.FUNCTION] = "FUNCTION";
3951 symbolIndexToName[Symbol.FIXEDCELL] = "FIXED_CELL_REF";
3952+symbolIndexToName[Symbol.CELL] = "CELL";
3953 symbolIndexToName[Symbol.COLON] = ";";
3954 symbolIndexToName[Symbol.COMMA] = ",";
3955 symbolIndexToName[Symbol.VARIABLE] = "VARIABLE";
3956 symbolIndexToName[Symbol.DECIMAL] = "DECIMAL";
3957 symbolIndexToName[Symbol.NUMBER_UPPER] = "NUMBER";
3958 symbolIndexToName[Symbol.PERCENT] = "%";
3959-symbolIndexToName[Symbol.POUND] = "#";
3960+symbolIndexToName[Symbol.FULL_ERROR] = "#";
3961 symbolIndexToName[Symbol.ARRAY] = "ARRAY";
3962 symbolIndexToName[Symbol.EXCLAMATION_POINT] = "!";
3963 const SYMBOL_INDEX_TO_NAME = symbolIndexToName;
3964@@ -441,7 +442,7 @@ table[State.Start] = ObjectBuilder
3965   .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
3966   .add(Symbol.VARIABLE, [SHIFT, State.Variable])
3967   .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
3968-  .add(Symbol.POUND, [SHIFT, State.Pound])
3969+  .add(Symbol.FULL_ERROR, [SHIFT, State.Pound])
3970   .build();
3971 table[State.Expressions] = ObjectBuilder
3972   .add(Symbol.END, [ACCEPT])
3973@@ -520,7 +521,7 @@ table[State.LeftParen] = ObjectBuilder
3974   .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
3975   .add(Symbol.VARIABLE, [SHIFT, State.Variable])
3976   .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
3977-  .add(Symbol.POUND, [SHIFT, State.Pound])
3978+  .add(Symbol.FULL_ERROR, [SHIFT, State.Pound])
3979   .build();
3980 table[State.PrefixUnaryMinus] = ObjectBuilder
3981   .add(Symbol.ERROR, State.Error)
3982@@ -537,7 +538,7 @@ table[State.PrefixUnaryMinus] = ObjectBuilder
3983   .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
3984   .add(Symbol.VARIABLE, [SHIFT, State.Variable])
3985   .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
3986-  .add(Symbol.POUND, [SHIFT, State.Pound])
3987+  .add(Symbol.FULL_ERROR, [SHIFT, State.Pound])
3988   .build();
3989 table[State.PrefixUnaryPlus] = ObjectBuilder
3990   .add(Symbol.ERROR, State.Error)
3991@@ -554,7 +555,7 @@ table[State.PrefixUnaryPlus] = ObjectBuilder
3992   .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
3993   .add(Symbol.VARIABLE, [SHIFT, State.Variable])
3994   .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
3995-  .add(Symbol.POUND, [SHIFT, State.Pound])
3996+  .add(Symbol.FULL_ERROR, [SHIFT, State.Pound])
3997   .build();
3998 table[State.Function] = ObjectBuilder
3999   .add(Symbol.LEFT_PAREN, [SHIFT, State.Function_LeftParen])
4000@@ -590,7 +591,7 @@ table[State.Error] = ObjectBuilder
4001   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.ERROR_AND_CONTINUE])
4002   .add(Symbol.COMMA, [REDUCE, ReduceActions.ERROR_AND_CONTINUE])
4003   .add(Symbol.VARIABLE, [SHIFT, 37])
4004-  .add(Symbol.POUND, [SHIFT, 18])
4005+  .add(Symbol.FULL_ERROR, [SHIFT, 18])
4006   .build();
4007 table[State.Variable] = ObjectBuilder
4008   .add(Symbol.EOF, [REDUCE, ReduceActions.WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY])
4009@@ -607,7 +608,7 @@ table[State.Variable] = ObjectBuilder
4010   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY])
4011   .add(Symbol.COMMA, [REDUCE, ReduceActions.WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY])
4012   .add(Symbol.DECIMAL, [REDUCE, ReduceActions.WRAP_CURRENT_INDEX_TOKEN_AS_ARRAY])
4013-  .add(Symbol.POUND, [SHIFT, 38])
4014+  .add(Symbol.FULL_ERROR, [SHIFT, 38])
4015   .build();
4016 table[State.NumberUpper] = ObjectBuilder
4017   .add(Symbol.EOF, [REDUCE, ReduceActions.REFLEXIVE_REDUCE])
4018@@ -683,7 +684,7 @@ table[State.Number_Ampersand] = ObjectBuilder
4019   .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
4020   .add(Symbol.VARIABLE, [SHIFT, State.Variable])
4021   .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
4022-  .add(Symbol.POUND, [SHIFT, 18])
4023+  .add(Symbol.FULL_ERROR, [SHIFT, 18])
4024   .build();
4025 table[State.Start_Equals] = ObjectBuilder
4026   .add(Symbol.ERROR, State.Error)
4027@@ -700,7 +701,7 @@ table[State.Start_Equals] = ObjectBuilder
4028   .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
4029   .add(Symbol.VARIABLE, [SHIFT, State.Variable])
4030   .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
4031-  .add(Symbol.POUND, [SHIFT, State.Pound])
4032+  .add(Symbol.FULL_ERROR, [SHIFT, State.Pound])
4033   .build();
4034 table[State.Number_Plus] = ObjectBuilder
4035   .add(Symbol.ERROR, State.Error)
4036@@ -717,7 +718,7 @@ table[State.Number_Plus] = ObjectBuilder
4037   .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
4038   .add(Symbol.VARIABLE, [SHIFT, State.Variable])
4039   .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
4040-  .add(Symbol.POUND, [SHIFT, State.Pound])
4041+  .add(Symbol.FULL_ERROR, [SHIFT, State.Pound])
4042   .build();
4043 table[State.LessThan] = ObjectBuilder
4044   .add(Symbol.ERROR, State.Error)
4045@@ -736,7 +737,7 @@ table[State.LessThan] = ObjectBuilder
4046   .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
4047   .add(Symbol.VARIABLE, [SHIFT, State.Variable])
4048   .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
4049-  .add(Symbol.POUND, [SHIFT, State.Pound])
4050+  .add(Symbol.FULL_ERROR, [SHIFT, State.Pound])
4051   .build();
4052 table[State.GreaterThan] = ObjectBuilder
4053   .add(Symbol.ERROR, State.Error)
4054@@ -754,7 +755,7 @@ table[State.GreaterThan] = ObjectBuilder
4055   .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
4056   .add(Symbol.VARIABLE, [SHIFT, State.Variable])
4057   .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
4058-  .add(Symbol.POUND, [SHIFT, State.Pound])
4059+  .add(Symbol.FULL_ERROR, [SHIFT, State.Pound])
4060   .build();
4061 table[25] = ObjectBuilder
4062   .add(Symbol.ERROR, State.Error)
4063@@ -771,7 +772,7 @@ table[25] = ObjectBuilder
4064   .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
4065   .add(Symbol.VARIABLE, [SHIFT, State.Variable])
4066   .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
4067-  .add(Symbol.POUND, [SHIFT, State.Pound])
4068+  .add(Symbol.FULL_ERROR, [SHIFT, State.Pound])
4069   .build();
4070 table[State.Number_Minus] = ObjectBuilder
4071   .add(Symbol.ERROR, State.Error)
4072@@ -788,7 +789,7 @@ table[State.Number_Minus] = ObjectBuilder
4073   .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
4074   .add(Symbol.VARIABLE, [SHIFT, State.Variable])
4075   .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
4076-  .add(Symbol.POUND, [SHIFT, State.Pound])
4077+  .add(Symbol.FULL_ERROR, [SHIFT, State.Pound])
4078   .build();
4079 table[State.Number_Asterisk] = ObjectBuilder
4080   .add(Symbol.ERROR, State.Error)
4081@@ -805,7 +806,7 @@ table[State.Number_Asterisk] = ObjectBuilder
4082   .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
4083   .add(Symbol.VARIABLE, [SHIFT, State.Variable])
4084   .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
4085-  .add(Symbol.POUND, [SHIFT, State.Pound])
4086+  .add(Symbol.FULL_ERROR, [SHIFT, State.Pound])
4087   .build();
4088 table[State.Number_Divide] = ObjectBuilder
4089   .add(Symbol.ERROR, State.Error)
4090@@ -822,7 +823,7 @@ table[State.Number_Divide] = ObjectBuilder
4091   .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
4092   .add(Symbol.VARIABLE, [SHIFT, State.Variable])
4093   .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
4094-  .add(Symbol.POUND, [SHIFT, State.Pound])
4095+  .add(Symbol.FULL_ERROR, [SHIFT, State.Pound])
4096   .build();
4097 table[State.Number_Carrot] = ObjectBuilder
4098   .add(Symbol.ERROR, State.Error)
4099@@ -839,7 +840,7 @@ table[State.Number_Carrot] = ObjectBuilder
4100   .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
4101   .add(Symbol.VARIABLE, [SHIFT, State.Variable])
4102   .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
4103-  .add(Symbol.POUND, [SHIFT, State.Pound])
4104+  .add(Symbol.FULL_ERROR, [SHIFT, State.Pound])
4105   .build();
4106 table[State.VariableSeq_Decimal] = ObjectBuilder
4107   .add(Symbol.VARIABLE, [SHIFT, State.VariableSeq_Decimal_Variable])
4108@@ -921,7 +922,7 @@ table[State.Function_LeftParen] = ObjectBuilder
4109   .add(Symbol.ARRAY, [SHIFT, 61])
4110   .add(Symbol.VARIABLE, [SHIFT, State.Variable])
4111   .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
4112-  .add(Symbol.POUND, [SHIFT, State.Pound])
4113+  .add(Symbol.FULL_ERROR, [SHIFT, State.Pound])
4114   .build();
4115 table[State.Error_Error] = ObjectBuilder
4116   .add(Symbol.EOF, [REDUCE, ReduceActions.ERROR_AND_CONTINUE_WITH_OTHER_ERRORS])
4117@@ -939,7 +940,7 @@ table[State.Error_Error] = ObjectBuilder
4118   .add(Symbol.COMMA, [REDUCE, ReduceActions.ERROR_AND_CONTINUE_WITH_OTHER_ERRORS])
4119   .build();
4120 table[37] = ObjectBuilder
4121-  .add(Symbol.POUND, [REDUCE, ReduceActions.AS_ERROR])
4122+  .add(Symbol.FULL_ERROR, [REDUCE, ReduceActions.AS_ERROR])
4123   .build();
4124 table[38] = ObjectBuilder
4125   .add(Symbol.VARIABLE, [SHIFT, 62])
4126@@ -1016,7 +1017,7 @@ table[State.LessThan_Equals] = ObjectBuilder
4127   .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
4128   .add(Symbol.VARIABLE, [SHIFT, State.Variable])
4129   .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
4130-  .add(Symbol.POUND, [SHIFT, State.Pound])
4131+  .add(Symbol.FULL_ERROR, [SHIFT, State.Pound])
4132   .build();
4133 table[State.LessThan_GreaterThan] = ObjectBuilder
4134   .add(Symbol.ERROR, State.Error)
4135@@ -1033,7 +1034,7 @@ table[State.LessThan_GreaterThan] = ObjectBuilder
4136   .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
4137   .add(Symbol.VARIABLE, [SHIFT, State.Variable])
4138   .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
4139-  .add(Symbol.POUND, [SHIFT, State.Pound])
4140+  .add(Symbol.FULL_ERROR, [SHIFT, State.Pound])
4141   .build();
4142 table[State.LessThan_Expression] = ObjectBuilder
4143   .add(Symbol.EOF, [REDUCE, ReduceActions.LT])
4144@@ -1065,7 +1066,7 @@ table[State.GreaterThan_Equals] = ObjectBuilder
4145   .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
4146   .add(Symbol.VARIABLE, [SHIFT, State.Variable])
4147   .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
4148-  .add(Symbol.POUND, [SHIFT, State.Pound])
4149+  .add(Symbol.FULL_ERROR, [SHIFT, State.Pound])
4150   .build();
4151 table[State.GreaterThan_Expression] = ObjectBuilder
4152   .add(Symbol.EOF, [REDUCE, ReduceActions.GT])
4153@@ -1284,7 +1285,7 @@ table[66] = ObjectBuilder
4154   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.REDUCE_LAST_THREE_A])
4155   .add(Symbol.COMMA, [REDUCE, ReduceActions.REDUCE_LAST_THREE_A])
4156   .add(Symbol.VARIABLE, [REDUCE, ReduceActions.REDUCE_LAST_THREE_A])
4157-  .add(Symbol.POUND, [REDUCE, ReduceActions.REDUCE_LAST_THREE_A]).build();
4158+  .add(Symbol.FULL_ERROR, [REDUCE, ReduceActions.REDUCE_LAST_THREE_A]).build();
4159 table[67] = ObjectBuilder
4160   .add(Symbol.EOF, [REDUCE, ReduceActions.LTE])
4161   .add(Symbol.AMPERSAND, [SHIFT, State.Number_Ampersand])
4162@@ -1359,7 +1360,7 @@ table[State.Variable_SemiColon] = ObjectBuilder
4163   .add(Symbol.CELL_UPPER, [SHIFT, State.CellUpper])
4164   .add(Symbol.VARIABLE, [SHIFT, State.Variable])
4165   .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
4166-  .add(Symbol.POUND, [SHIFT, State.Pound])
4167+  .add(Symbol.FULL_ERROR, [SHIFT, State.Pound])
4168   .build();
4169 table[State.Variable_Comma] = ObjectBuilder
4170   .add(Symbol.ERROR, State.Error)
4171@@ -1378,7 +1379,7 @@ table[State.Variable_Comma] = ObjectBuilder
4172   .add(Symbol.VARIABLE, [SHIFT, State.Variable])
4173   .add(Symbol.NUMBER_UPPER, [SHIFT, State.NumberUpper])
4174   .add(Symbol.ARRAY, [SHIFT, 61])
4175-  .add(Symbol.POUND, [SHIFT, State.Pound])
4176+  .add(Symbol.FULL_ERROR, [SHIFT, State.Pound])
4177   .build();
4178 table[73] = ObjectBuilder
4179   .add(Symbol.EOF, [REDUCE, ReduceActions.REDUCE_LAST_THREE_B])
4180@@ -1395,7 +1396,7 @@ table[73] = ObjectBuilder
4181   .add(Symbol.SEMI_COLON, [REDUCE, ReduceActions.REDUCE_LAST_THREE_B])
4182   .add(Symbol.COMMA, [REDUCE, ReduceActions.REDUCE_LAST_THREE_B])
4183   .add(Symbol.VARIABLE, [REDUCE, ReduceActions.REDUCE_LAST_THREE_B])
4184-  .add(Symbol.POUND, [REDUCE, ReduceActions.REDUCE_LAST_THREE_B])
4185+  .add(Symbol.FULL_ERROR, [REDUCE, ReduceActions.REDUCE_LAST_THREE_B])
4186   .build();
4187 table[74] = ObjectBuilder
4188   .add(Symbol.AMPERSAND, [SHIFT, State.Number_Ampersand])