]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/parser/SheetFormulaParser.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.spreadsheet.graph / src / org / simantics / spreadsheet / graph / parser / SheetFormulaParser.java
1 /* Generated By:JavaCC: Do not edit this line. SheetFormulaParser.java */\r
2 package org.simantics.spreadsheet.graph.parser;\r
3 \r
4 import org.simantics.spreadsheet.graph.parser.ast.*;\r
5 import java.util.ArrayList;\r
6 import java.util.List;\r
7 import java.util.Collections;\r
8 \r
9 /**\r
10  * Parser for spreadsheet formulas\r
11  * @author Antti Villberg\r
12  */\r
13 public class SheetFormulaParser implements SheetFormulaParserConstants {\r
14 \r
15   final public AstValue primary() throws ParseException {\r
16     Token tok;\r
17     AstValue temp;\r
18     AstRange tempRange;\r
19     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {\r
20     case 27:\r
21       jj_consume_token(27);\r
22              {if (true) return AstNull.NULL;}\r
23       break;\r
24     case 25:\r
25       jj_consume_token(25);\r
26              {if (true) return AstBoolean.TRUE;}\r
27       break;\r
28     case 26:\r
29       jj_consume_token(26);\r
30               {if (true) return AstBoolean.FALSE;}\r
31       break;\r
32     case 28:\r
33       jj_consume_token(28);\r
34              {if (true) return AstBoolean.TRUE;}\r
35       break;\r
36     case 29:\r
37       jj_consume_token(29);\r
38               {if (true) return AstBoolean.FALSE;}\r
39       break;\r
40     case STRING:\r
41       jj_consume_token(STRING);\r
42                {if (true) return new AstString(token.image);}\r
43       break;\r
44     case LONG_STRING:\r
45       jj_consume_token(LONG_STRING);\r
46                     {if (true) return new AstString(token.image);}\r
47       break;\r
48     case FLOAT:\r
49       jj_consume_token(FLOAT);\r
50               {if (true) return new AstDouble(token.image);}\r
51       break;\r
52     case INTEGER:\r
53       jj_consume_token(INTEGER);\r
54                 {if (true) return new AstInteger(Integer.parseInt(token.image));}\r
55       break;\r
56     default:\r
57       jj_la1[1] = jj_gen;\r
58       if (jj_2_1(2)) {\r
59         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {\r
60         case IDENT:\r
61           tok = jj_consume_token(IDENT);\r
62           break;\r
63         case SHEET_NAME:\r
64           tok = jj_consume_token(SHEET_NAME);\r
65           break;\r
66         default:\r
67           jj_la1[0] = jj_gen;\r
68           jj_consume_token(-1);\r
69           throw new ParseException();\r
70         }\r
71         jj_consume_token(42);\r
72         tempRange = range();\r
73                                                                                 {if (true) return tempRange.inSheet(tok.image);}\r
74       } else if (jj_2_2(2)) {\r
75         temp = apply();\r
76                                   {if (true) return temp;}\r
77       } else {\r
78         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {\r
79         case 5:\r
80           jj_consume_token(5);\r
81           temp = relation();\r
82           jj_consume_token(6);\r
83                                 {if (true) return temp;}\r
84           break;\r
85         case CELL_SINGLE:\r
86         case CELL_RANGE:\r
87         case 43:\r
88           temp = range();\r
89                      {if (true) return temp;}\r
90           break;\r
91         case 10:\r
92           temp = array();\r
93                      {if (true) return temp;}\r
94           break;\r
95         case IDENT:\r
96           jj_consume_token(IDENT);\r
97               {if (true) return new AstIdentifier(token.image);}\r
98           break;\r
99         default:\r
100           jj_la1[2] = jj_gen;\r
101           jj_consume_token(-1);\r
102           throw new ParseException();\r
103         }\r
104       }\r
105     }\r
106     throw new Error("Missing return statement in function");\r
107   }\r
108 \r
109   final public AstApply apply() throws ParseException {\r
110     AstArgList al;\r
111     Token tok;\r
112     if (jj_2_3(3)) {\r
113       tok = jj_consume_token(IDENT);\r
114       jj_consume_token(5);\r
115       jj_consume_token(6);\r
116                                        {if (true) return new AstApply(tok.image, null);}\r
117     } else {\r
118       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {\r
119       case IDENT:\r
120         tok = jj_consume_token(IDENT);\r
121         jj_consume_token(5);\r
122         al = arglist();\r
123         jj_consume_token(6);\r
124                                          {if (true) return new AstApply(tok.image, al);}\r
125         break;\r
126       default:\r
127         jj_la1[3] = jj_gen;\r
128         jj_consume_token(-1);\r
129         throw new ParseException();\r
130       }\r
131     }\r
132     throw new Error("Missing return statement in function");\r
133   }\r
134 \r
135   final public AstValue array() throws ParseException {\r
136     AstArray arr = new AstArray();\r
137     AstValue temp;\r
138     if (jj_2_4(2)) {\r
139       jj_consume_token(10);\r
140       jj_consume_token(11);\r
141                          {if (true) return new AstArray();}\r
142     } else {\r
143       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {\r
144       case 10:\r
145         jj_consume_token(10);\r
146         temp = relation();\r
147                           arr.add(temp);\r
148         jj_consume_token(18);\r
149         label_1:\r
150         while (true) {\r
151           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {\r
152           case 5:\r
153           case 10:\r
154           case 13:\r
155           case 14:\r
156           case 25:\r
157           case 26:\r
158           case 27:\r
159           case 28:\r
160           case 29:\r
161           case STRING:\r
162           case SHEET_NAME:\r
163           case LONG_STRING:\r
164           case CELL_SINGLE:\r
165           case CELL_RANGE:\r
166           case IDENT:\r
167           case FLOAT:\r
168           case INTEGER:\r
169           case 43:\r
170           case 46:\r
171             ;\r
172             break;\r
173           default:\r
174             jj_la1[4] = jj_gen;\r
175             break label_1;\r
176           }\r
177           temp = relation();\r
178                                                                      arr.add(temp);\r
179         }\r
180         jj_consume_token(11);\r
181                                                                                                {if (true) return arr;}\r
182         break;\r
183       default:\r
184         jj_la1[5] = jj_gen;\r
185         jj_consume_token(-1);\r
186         throw new ParseException();\r
187       }\r
188     }\r
189     throw new Error("Missing return statement in function");\r
190   }\r
191 \r
192   final public AstRange range() throws ParseException {\r
193     Token temp1;\r
194     Token temp2;\r
195     if (jj_2_5(2)) {\r
196       jj_consume_token(CELL_RANGE);\r
197                               {if (true) return new AstRange(token.image);}\r
198     } else {\r
199       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {\r
200       case CELL_SINGLE:\r
201         jj_consume_token(CELL_SINGLE);\r
202                      {if (true) return new AstRange(token.image);}\r
203         break;\r
204       case 43:\r
205         jj_consume_token(43);\r
206                {if (true) return AstRange.REF;}\r
207         break;\r
208       default:\r
209         jj_la1[6] = jj_gen;\r
210         jj_consume_token(-1);\r
211         throw new ParseException();\r
212       }\r
213     }\r
214     throw new Error("Missing return statement in function");\r
215   }\r
216 \r
217   final public AstArgList arglist() throws ParseException {\r
218     AstArgList ret = new AstArgList();\r
219     AstValue temp;\r
220     temp = relation();\r
221                        ret.add(temp);\r
222     label_2:\r
223     while (true) {\r
224       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {\r
225       case 4:\r
226       case 18:\r
227         ;\r
228         break;\r
229       default:\r
230         jj_la1[7] = jj_gen;\r
231         break label_2;\r
232       }\r
233       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {\r
234       case 4:\r
235         jj_consume_token(4);\r
236         break;\r
237       case 18:\r
238         jj_consume_token(18);\r
239         break;\r
240       default:\r
241         jj_la1[8] = jj_gen;\r
242         jj_consume_token(-1);\r
243         throw new ParseException();\r
244       }\r
245                 temp = AstNothing.INSTANCE;\r
246       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {\r
247       case 5:\r
248       case 10:\r
249       case 13:\r
250       case 14:\r
251       case 25:\r
252       case 26:\r
253       case 27:\r
254       case 28:\r
255       case 29:\r
256       case STRING:\r
257       case SHEET_NAME:\r
258       case LONG_STRING:\r
259       case CELL_SINGLE:\r
260       case CELL_RANGE:\r
261       case IDENT:\r
262       case FLOAT:\r
263       case INTEGER:\r
264       case 43:\r
265       case 46:\r
266         temp = relation();\r
267         break;\r
268       default:\r
269         jj_la1[9] = jj_gen;\r
270         ;\r
271       }\r
272                                                                      ret.add(temp);\r
273     }\r
274                                                                                             {if (true) return ret;}\r
275     throw new Error("Missing return statement in function");\r
276   }\r
277 \r
278   final public AstValue relation() throws ParseException {\r
279   AstRelation ret;\r
280   String op;\r
281   AstValue ex;\r
282     ex = arithmetic_expression();\r
283                                         ret = new AstRelation(ex);\r
284     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {\r
285     case 21:\r
286     case 22:\r
287     case 23:\r
288     case 24:\r
289     case 44:\r
290     case 45:\r
291       op = rel_op();\r
292       ex = arithmetic_expression();\r
293                                                                                                                         ret.setRight(op, ex);\r
294       break;\r
295     default:\r
296       jj_la1[10] = jj_gen;\r
297       ;\r
298     }\r
299                                                                                                                                                      {if (true) return ret.simplify();}\r
300     throw new Error("Missing return statement in function");\r
301   }\r
302 \r
303   final public String rel_op() throws ParseException {\r
304     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {\r
305     case 22:\r
306       jj_consume_token(22);\r
307               {if (true) return "< ";}\r
308       break;\r
309     case 44:\r
310       jj_consume_token(44);\r
311                                      {if (true) return "<=";}\r
312       break;\r
313     case 23:\r
314       jj_consume_token(23);\r
315                                                            {if (true) return " >";}\r
316       break;\r
317     case 45:\r
318       jj_consume_token(45);\r
319                                                                                   {if (true) return " >=";}\r
320       break;\r
321     case 21:\r
322       jj_consume_token(21);\r
323                                                                                                          {if (true) return "=";}\r
324       break;\r
325     case 24:\r
326       jj_consume_token(24);\r
327                                                                                                                                {if (true) return "<>";}\r
328       break;\r
329     default:\r
330       jj_la1[11] = jj_gen;\r
331       jj_consume_token(-1);\r
332       throw new ParseException();\r
333     }\r
334     throw new Error("Missing return statement in function");\r
335   }\r
336 \r
337 //   \r
338   final public AstValue arithmetic_expression() throws ParseException {\r
339     AstArithmeticExpression ret;\r
340     String op = null;\r
341     AstValue temp;\r
342     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {\r
343     case 13:\r
344     case 14:\r
345     case 46:\r
346       op = add_op();\r
347       break;\r
348     default:\r
349       jj_la1[12] = jj_gen;\r
350       ;\r
351     }\r
352     temp = term();\r
353                                    ret = new AstArithmeticExpression(op, temp);\r
354     label_3:\r
355     while (true) {\r
356       if (jj_2_6(2)) {\r
357         ;\r
358       } else {\r
359         break label_3;\r
360       }\r
361       op = add_op();\r
362       temp = term();\r
363                                                                                                                                ret.add(op, temp);\r
364     }\r
365                                                                                                                                                          {if (true) return ret.simplify();}\r
366     throw new Error("Missing return statement in function");\r
367   }\r
368 \r
369   final public String add_op() throws ParseException {\r
370     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {\r
371     case 14:\r
372       jj_consume_token(14);\r
373           {if (true) return "+";}\r
374       break;\r
375     case 46:\r
376       jj_consume_token(46);\r
377                                {if (true) return "-";}\r
378       break;\r
379     case 13:\r
380       jj_consume_token(13);\r
381                                                     {if (true) return "&";}\r
382       break;\r
383     default:\r
384       jj_la1[13] = jj_gen;\r
385       jj_consume_token(-1);\r
386       throw new ParseException();\r
387     }\r
388     throw new Error("Missing return statement in function");\r
389   }\r
390 \r
391   final public AstValue term() throws ParseException {\r
392     AstTerm ret;\r
393     String op;\r
394     AstValue temp;\r
395     temp = factor();\r
396                     ret = new AstTerm(temp);\r
397     label_4:\r
398     while (true) {\r
399       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {\r
400       case 15:\r
401       case 16:\r
402         ;\r
403         break;\r
404       default:\r
405         jj_la1[14] = jj_gen;\r
406         break label_4;\r
407       }\r
408       op = mul_op();\r
409       temp = factor();\r
410                                                                                 ret.add(op, temp);\r
411     }\r
412                                                                                                           {if (true) return ret.simplify();}\r
413     throw new Error("Missing return statement in function");\r
414   }\r
415 \r
416   final public String mul_op() throws ParseException {\r
417     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {\r
418     case 15:\r
419       jj_consume_token(15);\r
420           {if (true) return "*";}\r
421       break;\r
422     case 16:\r
423       jj_consume_token(16);\r
424                                {if (true) return "/";}\r
425       break;\r
426     default:\r
427       jj_la1[15] = jj_gen;\r
428       jj_consume_token(-1);\r
429       throw new ParseException();\r
430     }\r
431     throw new Error("Missing return statement in function");\r
432   }\r
433 \r
434   final public AstValue factor() throws ParseException {\r
435     AstFactor ret;\r
436     String op;\r
437     AstValue temp;\r
438     temp = primary();\r
439                      ret = new AstFactor(temp);\r
440     label_5:\r
441     while (true) {\r
442       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {\r
443       case 17:\r
444         ;\r
445         break;\r
446       default:\r
447         jj_la1[16] = jj_gen;\r
448         break label_5;\r
449       }\r
450       op = factor_op();\r
451       temp = primary();\r
452                                                                                        ret.add(op, temp);\r
453     }\r
454                                                                                                                  {if (true) return ret.simplify();}\r
455     throw new Error("Missing return statement in function");\r
456   }\r
457 \r
458   final public String factor_op() throws ParseException {\r
459     jj_consume_token(17);\r
460           {if (true) return "^";}\r
461     throw new Error("Missing return statement in function");\r
462   }\r
463 \r
464   private boolean jj_2_1(int xla) {\r
465     jj_la = xla; jj_lastpos = jj_scanpos = token;\r
466     try { return !jj_3_1(); }\r
467     catch(LookaheadSuccess ls) { return true; }\r
468     finally { jj_save(0, xla); }\r
469   }\r
470 \r
471   private boolean jj_2_2(int xla) {\r
472     jj_la = xla; jj_lastpos = jj_scanpos = token;\r
473     try { return !jj_3_2(); }\r
474     catch(LookaheadSuccess ls) { return true; }\r
475     finally { jj_save(1, xla); }\r
476   }\r
477 \r
478   private boolean jj_2_3(int xla) {\r
479     jj_la = xla; jj_lastpos = jj_scanpos = token;\r
480     try { return !jj_3_3(); }\r
481     catch(LookaheadSuccess ls) { return true; }\r
482     finally { jj_save(2, xla); }\r
483   }\r
484 \r
485   private boolean jj_2_4(int xla) {\r
486     jj_la = xla; jj_lastpos = jj_scanpos = token;\r
487     try { return !jj_3_4(); }\r
488     catch(LookaheadSuccess ls) { return true; }\r
489     finally { jj_save(3, xla); }\r
490   }\r
491 \r
492   private boolean jj_2_5(int xla) {\r
493     jj_la = xla; jj_lastpos = jj_scanpos = token;\r
494     try { return !jj_3_5(); }\r
495     catch(LookaheadSuccess ls) { return true; }\r
496     finally { jj_save(4, xla); }\r
497   }\r
498 \r
499   private boolean jj_2_6(int xla) {\r
500     jj_la = xla; jj_lastpos = jj_scanpos = token;\r
501     try { return !jj_3_6(); }\r
502     catch(LookaheadSuccess ls) { return true; }\r
503     finally { jj_save(5, xla); }\r
504   }\r
505 \r
506   private boolean jj_3R_29() {\r
507     Token xsp;\r
508     xsp = jj_scanpos;\r
509     if (jj_3_4()) {\r
510     jj_scanpos = xsp;\r
511     if (jj_3R_32()) return true;\r
512     }\r
513     return false;\r
514   }\r
515 \r
516   private boolean jj_3_4() {\r
517     if (jj_scan_token(10)) return true;\r
518     if (jj_scan_token(11)) return true;\r
519     return false;\r
520   }\r
521 \r
522   private boolean jj_3R_7() {\r
523     Token xsp;\r
524     xsp = jj_scanpos;\r
525     if (jj_3R_10()) {\r
526     jj_scanpos = xsp;\r
527     if (jj_3R_11()) {\r
528     jj_scanpos = xsp;\r
529     if (jj_3R_12()) return true;\r
530     }\r
531     }\r
532     return false;\r
533   }\r
534 \r
535   private boolean jj_3R_10() {\r
536     if (jj_scan_token(14)) return true;\r
537     return false;\r
538   }\r
539 \r
540   private boolean jj_3R_12() {\r
541     if (jj_scan_token(13)) return true;\r
542     return false;\r
543   }\r
544 \r
545   private boolean jj_3R_9() {\r
546     if (jj_scan_token(IDENT)) return true;\r
547     if (jj_scan_token(5)) return true;\r
548     return false;\r
549   }\r
550 \r
551   private boolean jj_3R_6() {\r
552     Token xsp;\r
553     xsp = jj_scanpos;\r
554     if (jj_3_3()) {\r
555     jj_scanpos = xsp;\r
556     if (jj_3R_9()) return true;\r
557     }\r
558     return false;\r
559   }\r
560 \r
561   private boolean jj_3_3() {\r
562     if (jj_scan_token(IDENT)) return true;\r
563     if (jj_scan_token(5)) return true;\r
564     if (jj_scan_token(6)) return true;\r
565     return false;\r
566   }\r
567 \r
568   private boolean jj_3R_27() {\r
569     if (jj_scan_token(IDENT)) return true;\r
570     return false;\r
571   }\r
572 \r
573   private boolean jj_3R_26() {\r
574     if (jj_3R_29()) return true;\r
575     return false;\r
576   }\r
577 \r
578   private boolean jj_3R_25() {\r
579     if (jj_3R_28()) return true;\r
580     return false;\r
581   }\r
582 \r
583   private boolean jj_3R_24() {\r
584     if (jj_scan_token(5)) return true;\r
585     return false;\r
586   }\r
587 \r
588   private boolean jj_3_2() {\r
589     if (jj_3R_6()) return true;\r
590     return false;\r
591   }\r
592 \r
593   private boolean jj_3_1() {\r
594     Token xsp;\r
595     xsp = jj_scanpos;\r
596     if (jj_scan_token(38)) {\r
597     jj_scanpos = xsp;\r
598     if (jj_scan_token(33)) return true;\r
599     }\r
600     if (jj_scan_token(42)) return true;\r
601     return false;\r
602   }\r
603 \r
604   private boolean jj_3R_23() {\r
605     if (jj_scan_token(INTEGER)) return true;\r
606     return false;\r
607   }\r
608 \r
609   private boolean jj_3_6() {\r
610     if (jj_3R_7()) return true;\r
611     if (jj_3R_8()) return true;\r
612     return false;\r
613   }\r
614 \r
615   private boolean jj_3R_22() {\r
616     if (jj_scan_token(FLOAT)) return true;\r
617     return false;\r
618   }\r
619 \r
620   private boolean jj_3R_21() {\r
621     if (jj_scan_token(LONG_STRING)) return true;\r
622     return false;\r
623   }\r
624 \r
625   private boolean jj_3R_20() {\r
626     if (jj_scan_token(STRING)) return true;\r
627     return false;\r
628   }\r
629 \r
630   private boolean jj_3R_19() {\r
631     if (jj_scan_token(29)) return true;\r
632     return false;\r
633   }\r
634 \r
635   private boolean jj_3R_18() {\r
636     if (jj_scan_token(28)) return true;\r
637     return false;\r
638   }\r
639 \r
640   private boolean jj_3R_17() {\r
641     if (jj_scan_token(26)) return true;\r
642     return false;\r
643   }\r
644 \r
645   private boolean jj_3R_11() {\r
646     if (jj_scan_token(46)) return true;\r
647     return false;\r
648   }\r
649 \r
650   private boolean jj_3R_16() {\r
651     if (jj_scan_token(25)) return true;\r
652     return false;\r
653   }\r
654 \r
655   private boolean jj_3R_13() {\r
656     if (jj_3R_14()) return true;\r
657     return false;\r
658   }\r
659 \r
660   private boolean jj_3R_14() {\r
661     Token xsp;\r
662     xsp = jj_scanpos;\r
663     if (jj_3R_15()) {\r
664     jj_scanpos = xsp;\r
665     if (jj_3R_16()) {\r
666     jj_scanpos = xsp;\r
667     if (jj_3R_17()) {\r
668     jj_scanpos = xsp;\r
669     if (jj_3R_18()) {\r
670     jj_scanpos = xsp;\r
671     if (jj_3R_19()) {\r
672     jj_scanpos = xsp;\r
673     if (jj_3R_20()) {\r
674     jj_scanpos = xsp;\r
675     if (jj_3R_21()) {\r
676     jj_scanpos = xsp;\r
677     if (jj_3R_22()) {\r
678     jj_scanpos = xsp;\r
679     if (jj_3R_23()) {\r
680     jj_scanpos = xsp;\r
681     if (jj_3_1()) {\r
682     jj_scanpos = xsp;\r
683     if (jj_3_2()) {\r
684     jj_scanpos = xsp;\r
685     if (jj_3R_24()) {\r
686     jj_scanpos = xsp;\r
687     if (jj_3R_25()) {\r
688     jj_scanpos = xsp;\r
689     if (jj_3R_26()) {\r
690     jj_scanpos = xsp;\r
691     if (jj_3R_27()) return true;\r
692     }\r
693     }\r
694     }\r
695     }\r
696     }\r
697     }\r
698     }\r
699     }\r
700     }\r
701     }\r
702     }\r
703     }\r
704     }\r
705     }\r
706     return false;\r
707   }\r
708 \r
709   private boolean jj_3R_15() {\r
710     if (jj_scan_token(27)) return true;\r
711     return false;\r
712   }\r
713 \r
714   private boolean jj_3R_31() {\r
715     if (jj_scan_token(43)) return true;\r
716     return false;\r
717   }\r
718 \r
719   private boolean jj_3R_30() {\r
720     if (jj_scan_token(CELL_SINGLE)) return true;\r
721     return false;\r
722   }\r
723 \r
724   private boolean jj_3R_28() {\r
725     Token xsp;\r
726     xsp = jj_scanpos;\r
727     if (jj_3_5()) {\r
728     jj_scanpos = xsp;\r
729     if (jj_3R_30()) {\r
730     jj_scanpos = xsp;\r
731     if (jj_3R_31()) return true;\r
732     }\r
733     }\r
734     return false;\r
735   }\r
736 \r
737   private boolean jj_3_5() {\r
738     if (jj_scan_token(CELL_RANGE)) return true;\r
739     return false;\r
740   }\r
741 \r
742   private boolean jj_3R_8() {\r
743     if (jj_3R_13()) return true;\r
744     return false;\r
745   }\r
746 \r
747   private boolean jj_3R_32() {\r
748     if (jj_scan_token(10)) return true;\r
749     return false;\r
750   }\r
751 \r
752   /** Generated Token Manager. */\r
753   public SheetFormulaParserTokenManager token_source;\r
754   SimpleCharStream jj_input_stream;\r
755   /** Current token. */\r
756   public Token token;\r
757   /** Next token. */\r
758   public Token jj_nt;\r
759   private int jj_ntk;\r
760   private Token jj_scanpos, jj_lastpos;\r
761   private int jj_la;\r
762   private int jj_gen;\r
763   final private int[] jj_la1 = new int[17];\r
764   static private int[] jj_la1_0;\r
765   static private int[] jj_la1_1;\r
766   static {\r
767       jj_la1_init_0();\r
768       jj_la1_init_1();\r
769    }\r
770    private static void jj_la1_init_0() {\r
771       jj_la1_0 = new int[] {0x0,0x3e000000,0x420,0x0,0x3e006420,0x400,0x0,0x40010,0x40010,0x3e006420,0x1e00000,0x1e00000,0x6000,0x6000,0x18000,0x18000,0x20000,};\r
772    }\r
773    private static void jj_la1_init_1() {\r
774       jj_la1_1 = new int[] {0x42,0x305,0x868,0x40,0x4b6f,0x0,0x808,0x0,0x0,0x4b6f,0x3000,0x3000,0x4000,0x4000,0x0,0x0,0x0,};\r
775    }\r
776   final private JJCalls[] jj_2_rtns = new JJCalls[6];\r
777   private boolean jj_rescan = false;\r
778   private int jj_gc = 0;\r
779 \r
780   /** Constructor with InputStream. */\r
781   public SheetFormulaParser(java.io.InputStream stream) {\r
782      this(stream, null);\r
783   }\r
784   /** Constructor with InputStream and supplied encoding */\r
785   public SheetFormulaParser(java.io.InputStream stream, String encoding) {\r
786     try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }\r
787     token_source = new SheetFormulaParserTokenManager(jj_input_stream);\r
788     token = new Token();\r
789     jj_ntk = -1;\r
790     jj_gen = 0;\r
791     for (int i = 0; i < 17; i++) jj_la1[i] = -1;\r
792     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();\r
793   }\r
794 \r
795   /** Reinitialise. */\r
796   public void ReInit(java.io.InputStream stream) {\r
797      ReInit(stream, null);\r
798   }\r
799   /** Reinitialise. */\r
800   public void ReInit(java.io.InputStream stream, String encoding) {\r
801     try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }\r
802     token_source.ReInit(jj_input_stream);\r
803     token = new Token();\r
804     jj_ntk = -1;\r
805     jj_gen = 0;\r
806     for (int i = 0; i < 17; i++) jj_la1[i] = -1;\r
807     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();\r
808   }\r
809 \r
810   /** Constructor. */\r
811   public SheetFormulaParser(java.io.Reader stream) {\r
812     jj_input_stream = new SimpleCharStream(stream, 1, 1);\r
813     token_source = new SheetFormulaParserTokenManager(jj_input_stream);\r
814     token = new Token();\r
815     jj_ntk = -1;\r
816     jj_gen = 0;\r
817     for (int i = 0; i < 17; i++) jj_la1[i] = -1;\r
818     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();\r
819   }\r
820 \r
821   /** Reinitialise. */\r
822   public void ReInit(java.io.Reader stream) {\r
823     jj_input_stream.ReInit(stream, 1, 1);\r
824     token_source.ReInit(jj_input_stream);\r
825     token = new Token();\r
826     jj_ntk = -1;\r
827     jj_gen = 0;\r
828     for (int i = 0; i < 17; i++) jj_la1[i] = -1;\r
829     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();\r
830   }\r
831 \r
832   /** Constructor with generated Token Manager. */\r
833   public SheetFormulaParser(SheetFormulaParserTokenManager tm) {\r
834     token_source = tm;\r
835     token = new Token();\r
836     jj_ntk = -1;\r
837     jj_gen = 0;\r
838     for (int i = 0; i < 17; i++) jj_la1[i] = -1;\r
839     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();\r
840   }\r
841 \r
842   /** Reinitialise. */\r
843   public void ReInit(SheetFormulaParserTokenManager tm) {\r
844     token_source = tm;\r
845     token = new Token();\r
846     jj_ntk = -1;\r
847     jj_gen = 0;\r
848     for (int i = 0; i < 17; i++) jj_la1[i] = -1;\r
849     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();\r
850   }\r
851 \r
852   private Token jj_consume_token(int kind) throws ParseException {\r
853     Token oldToken;\r
854     if ((oldToken = token).next != null) token = token.next;\r
855     else token = token.next = token_source.getNextToken();\r
856     jj_ntk = -1;\r
857     if (token.kind == kind) {\r
858       jj_gen++;\r
859       if (++jj_gc > 100) {\r
860         jj_gc = 0;\r
861         for (int i = 0; i < jj_2_rtns.length; i++) {\r
862           JJCalls c = jj_2_rtns[i];\r
863           while (c != null) {\r
864             if (c.gen < jj_gen) c.first = null;\r
865             c = c.next;\r
866           }\r
867         }\r
868       }\r
869       return token;\r
870     }\r
871     token = oldToken;\r
872     jj_kind = kind;\r
873     throw generateParseException();\r
874   }\r
875 \r
876   static private final class LookaheadSuccess extends java.lang.Error { }\r
877   final private LookaheadSuccess jj_ls = new LookaheadSuccess();\r
878   private boolean jj_scan_token(int kind) {\r
879     if (jj_scanpos == jj_lastpos) {\r
880       jj_la--;\r
881       if (jj_scanpos.next == null) {\r
882         jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();\r
883       } else {\r
884         jj_lastpos = jj_scanpos = jj_scanpos.next;\r
885       }\r
886     } else {\r
887       jj_scanpos = jj_scanpos.next;\r
888     }\r
889     if (jj_rescan) {\r
890       int i = 0; Token tok = token;\r
891       while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }\r
892       if (tok != null) jj_add_error_token(kind, i);\r
893     }\r
894     if (jj_scanpos.kind != kind) return true;\r
895     if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;\r
896     return false;\r
897   }\r
898 \r
899 \r
900 /** Get the next Token. */\r
901   final public Token getNextToken() {\r
902     if (token.next != null) token = token.next;\r
903     else token = token.next = token_source.getNextToken();\r
904     jj_ntk = -1;\r
905     jj_gen++;\r
906     return token;\r
907   }\r
908 \r
909 /** Get the specific Token. */\r
910   final public Token getToken(int index) {\r
911     Token t = token;\r
912     for (int i = 0; i < index; i++) {\r
913       if (t.next != null) t = t.next;\r
914       else t = t.next = token_source.getNextToken();\r
915     }\r
916     return t;\r
917   }\r
918 \r
919   private int jj_ntk() {\r
920     if ((jj_nt=token.next) == null)\r
921       return (jj_ntk = (token.next=token_source.getNextToken()).kind);\r
922     else\r
923       return (jj_ntk = jj_nt.kind);\r
924   }\r
925 \r
926   private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();\r
927   private int[] jj_expentry;\r
928   private int jj_kind = -1;\r
929   private int[] jj_lasttokens = new int[100];\r
930   private int jj_endpos;\r
931 \r
932   private void jj_add_error_token(int kind, int pos) {\r
933     if (pos >= 100) return;\r
934     if (pos == jj_endpos + 1) {\r
935       jj_lasttokens[jj_endpos++] = kind;\r
936     } else if (jj_endpos != 0) {\r
937       jj_expentry = new int[jj_endpos];\r
938       for (int i = 0; i < jj_endpos; i++) {\r
939         jj_expentry[i] = jj_lasttokens[i];\r
940       }\r
941       jj_entries_loop: for (java.util.Iterator<?> it = jj_expentries.iterator(); it.hasNext();) {\r
942         int[] oldentry = (int[])(it.next());\r
943         if (oldentry.length == jj_expentry.length) {\r
944           for (int i = 0; i < jj_expentry.length; i++) {\r
945             if (oldentry[i] != jj_expentry[i]) {\r
946               continue jj_entries_loop;\r
947             }\r
948           }\r
949           jj_expentries.add(jj_expentry);\r
950           break jj_entries_loop;\r
951         }\r
952       }\r
953       if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;\r
954     }\r
955   }\r
956 \r
957   /** Generate ParseException. */\r
958   public ParseException generateParseException() {\r
959     jj_expentries.clear();\r
960     boolean[] la1tokens = new boolean[47];\r
961     if (jj_kind >= 0) {\r
962       la1tokens[jj_kind] = true;\r
963       jj_kind = -1;\r
964     }\r
965     for (int i = 0; i < 17; i++) {\r
966       if (jj_la1[i] == jj_gen) {\r
967         for (int j = 0; j < 32; j++) {\r
968           if ((jj_la1_0[i] & (1<<j)) != 0) {\r
969             la1tokens[j] = true;\r
970           }\r
971           if ((jj_la1_1[i] & (1<<j)) != 0) {\r
972             la1tokens[32+j] = true;\r
973           }\r
974         }\r
975       }\r
976     }\r
977     for (int i = 0; i < 47; i++) {\r
978       if (la1tokens[i]) {\r
979         jj_expentry = new int[1];\r
980         jj_expentry[0] = i;\r
981         jj_expentries.add(jj_expentry);\r
982       }\r
983     }\r
984     jj_endpos = 0;\r
985     jj_rescan_token();\r
986     jj_add_error_token(0, 0);\r
987     int[][] exptokseq = new int[jj_expentries.size()][];\r
988     for (int i = 0; i < jj_expentries.size(); i++) {\r
989       exptokseq[i] = jj_expentries.get(i);\r
990     }\r
991     return new ParseException(token, exptokseq, tokenImage);\r
992   }\r
993 \r
994   /** Enable tracing. */\r
995   final public void enable_tracing() {\r
996   }\r
997 \r
998   /** Disable tracing. */\r
999   final public void disable_tracing() {\r
1000   }\r
1001 \r
1002   private void jj_rescan_token() {\r
1003     jj_rescan = true;\r
1004     for (int i = 0; i < 6; i++) {\r
1005     try {\r
1006       JJCalls p = jj_2_rtns[i];\r
1007       do {\r
1008         if (p.gen > jj_gen) {\r
1009           jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;\r
1010           switch (i) {\r
1011             case 0: jj_3_1(); break;\r
1012             case 1: jj_3_2(); break;\r
1013             case 2: jj_3_3(); break;\r
1014             case 3: jj_3_4(); break;\r
1015             case 4: jj_3_5(); break;\r
1016             case 5: jj_3_6(); break;\r
1017           }\r
1018         }\r
1019         p = p.next;\r
1020       } while (p != null);\r
1021       } catch(LookaheadSuccess ls) { }\r
1022     }\r
1023     jj_rescan = false;\r
1024   }\r
1025 \r
1026   private void jj_save(int index, int xla) {\r
1027     JJCalls p = jj_2_rtns[index];\r
1028     while (p.gen > jj_gen) {\r
1029       if (p.next == null) { p = p.next = new JJCalls(); break; }\r
1030       p = p.next;\r
1031     }\r
1032     p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;\r
1033   }\r
1034 \r
1035   static final class JJCalls {\r
1036     int gen;\r
1037     Token first;\r
1038     int arg;\r
1039     JJCalls next;\r
1040   }\r
1041 \r
1042 }\r