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])