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