]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.spreadsheet.common/src/org/simantics/spreadsheet/common/expression/parser/Parser.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.spreadsheet.common / src / org / simantics / spreadsheet / common / expression / parser / Parser.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 /* This file was generated by SableCC (http://www.sablecc.org/). */\r
13 \r
14 package org.simantics.spreadsheet.common.expression.parser;\r
15 \r
16 import org.simantics.spreadsheet.common.expression.lexer.*;\r
17 import org.simantics.spreadsheet.common.expression.node.*;\r
18 import org.simantics.spreadsheet.common.expression.analysis.*;\r
19 import java.util.*;\r
20 \r
21 import java.io.DataInputStream;\r
22 import java.io.BufferedInputStream;\r
23 import java.io.IOException;\r
24 \r
25 @SuppressWarnings("nls")\r
26 public class Parser\r
27 {\r
28     public final Analysis ignoredTokens = new AnalysisAdapter();\r
29 \r
30     protected ArrayList nodeList;\r
31 \r
32     private final Lexer lexer;\r
33     private final ListIterator stack = new LinkedList().listIterator();\r
34     private int last_pos;\r
35     private int last_line;\r
36     private Token last_token;\r
37     private final TokenIndex converter = new TokenIndex();\r
38     private final int[] action = new int[2];\r
39 \r
40     private final static int SHIFT = 0;\r
41     private final static int REDUCE = 1;\r
42     private final static int ACCEPT = 2;\r
43     private final static int ERROR = 3;\r
44 \r
45     public Parser(@SuppressWarnings("hiding") Lexer lexer)\r
46     {\r
47         this.lexer = lexer;\r
48     }\r
49 \r
50     protected void filter() throws ParserException, LexerException, IOException\r
51     {\r
52         // Empty body\r
53     }\r
54 \r
55     private void push(int numstate, ArrayList listNode, boolean hidden) throws ParserException, LexerException, IOException\r
56     {\r
57         this.nodeList = listNode;\r
58 \r
59         if(!hidden)\r
60         {\r
61             filter();\r
62         }\r
63 \r
64         if(!this.stack.hasNext())\r
65         {\r
66             this.stack.add(new State(numstate, this.nodeList));\r
67             return;\r
68         }\r
69 \r
70         State s = (State) this.stack.next();\r
71         s.state = numstate;\r
72         s.nodes = this.nodeList;\r
73     }\r
74 \r
75     private int goTo(int index)\r
76     {\r
77         int state = state();\r
78         int low = 1;\r
79         int high = gotoTable[index].length - 1;\r
80         int value = gotoTable[index][0][1];\r
81 \r
82         while(low <= high)\r
83         {\r
84             int middle = (low + high) / 2;\r
85 \r
86             if(state < gotoTable[index][middle][0])\r
87             {\r
88                 high = middle - 1;\r
89             }\r
90             else if(state > gotoTable[index][middle][0])\r
91             {\r
92                 low = middle + 1;\r
93             }\r
94             else\r
95             {\r
96                 value = gotoTable[index][middle][1];\r
97                 break;\r
98             }\r
99         }\r
100 \r
101         return value;\r
102     }\r
103 \r
104     private int state()\r
105     {\r
106         State s = (State) this.stack.previous();\r
107         this.stack.next();\r
108         return s.state;\r
109     }\r
110 \r
111     private ArrayList pop()\r
112     {\r
113         return ((State) this.stack.previous()).nodes;\r
114     }\r
115 \r
116     private int index(Switchable token)\r
117     {\r
118         this.converter.index = -1;\r
119         token.apply(this.converter);\r
120         return this.converter.index;\r
121     }\r
122 \r
123     @SuppressWarnings("unchecked")\r
124     public Start parse() throws ParserException, LexerException, IOException\r
125     {\r
126         push(0, null, true);\r
127         List<Node> ign = null;\r
128         while(true)\r
129         {\r
130             while(index(this.lexer.peek()) == -1)\r
131             {\r
132                 if(ign == null)\r
133                 {\r
134                     ign = new LinkedList<Node>();\r
135                 }\r
136 \r
137                 ign.add(this.lexer.next());\r
138             }\r
139 \r
140             if(ign != null)\r
141             {\r
142                 this.ignoredTokens.setIn(this.lexer.peek(), ign);\r
143                 ign = null;\r
144             }\r
145 \r
146             this.last_pos = this.lexer.peek().getPos();\r
147             this.last_line = this.lexer.peek().getLine();\r
148             this.last_token = this.lexer.peek();\r
149 \r
150             int index = index(this.lexer.peek());\r
151             this.action[0] = Parser.actionTable[state()][0][1];\r
152             this.action[1] = Parser.actionTable[state()][0][2];\r
153 \r
154             int low = 1;\r
155             int high = Parser.actionTable[state()].length - 1;\r
156 \r
157             while(low <= high)\r
158             {\r
159                 int middle = (low + high) / 2;\r
160 \r
161                 if(index < Parser.actionTable[state()][middle][0])\r
162                 {\r
163                     high = middle - 1;\r
164                 }\r
165                 else if(index > Parser.actionTable[state()][middle][0])\r
166                 {\r
167                     low = middle + 1;\r
168                 }\r
169                 else\r
170                 {\r
171                     this.action[0] = Parser.actionTable[state()][middle][1];\r
172                     this.action[1] = Parser.actionTable[state()][middle][2];\r
173                     break;\r
174                 }\r
175             }\r
176 \r
177             switch(this.action[0])\r
178             {\r
179                 case SHIFT:\r
180                     {\r
181                         ArrayList list = new ArrayList();\r
182                         list.add(this.lexer.next());\r
183                         push(this.action[1], list, false);\r
184                     }\r
185                     break;\r
186                 case REDUCE:\r
187                     switch(this.action[1])\r
188                     {\r
189                     case 0: /* reduce AMultExpression */\r
190                     {\r
191                         ArrayList list = new0();\r
192                         push(goTo(0), list, false);\r
193                     }\r
194                     break;\r
195                     case 1: /* reduce APlusExpression */\r
196                     {\r
197                         ArrayList list = new1();\r
198                         push(goTo(0), list, false);\r
199                     }\r
200                     break;\r
201                     case 2: /* reduce AMinusExpression */\r
202                     {\r
203                         ArrayList list = new2();\r
204                         push(goTo(0), list, false);\r
205                     }\r
206                     break;\r
207                     case 3: /* reduce AUnaryMultiplicative */\r
208                     {\r
209                         ArrayList list = new3();\r
210                         push(goTo(1), list, false);\r
211                     }\r
212                     break;\r
213                     case 4: /* reduce AMultMultiplicative */\r
214                     {\r
215                         ArrayList list = new4();\r
216                         push(goTo(1), list, false);\r
217                     }\r
218                     break;\r
219                     case 5: /* reduce ADivMultiplicative */\r
220                     {\r
221                         ArrayList list = new5();\r
222                         push(goTo(1), list, false);\r
223                     }\r
224                     break;\r
225                     case 6: /* reduce APrimaryUnary */\r
226                     {\r
227                         ArrayList list = new6();\r
228                         push(goTo(2), list, false);\r
229                     }\r
230                     break;\r
231                     case 7: /* reduce AUnaryplusUnary */\r
232                     {\r
233                         ArrayList list = new7();\r
234                         push(goTo(2), list, false);\r
235                     }\r
236                     break;\r
237                     case 8: /* reduce AUnaryminusUnary */\r
238                     {\r
239                         ArrayList list = new8();\r
240                         push(goTo(2), list, false);\r
241                     }\r
242                     break;\r
243                     case 9: /* reduce ASingleArgList */\r
244                     {\r
245                         ArrayList list = new9();\r
246                         push(goTo(3), list, false);\r
247                     }\r
248                     break;\r
249                     case 10: /* reduce ASequenceArgList */\r
250                     {\r
251                         ArrayList list = new10();\r
252                         push(goTo(3), list, false);\r
253                     }\r
254                     break;\r
255                     case 11: /* reduce AValuePrimary */\r
256                     {\r
257                         ArrayList list = new11();\r
258                         push(goTo(4), list, false);\r
259                     }\r
260                     break;\r
261                     case 12: /* reduce AAfunctionprimary1Primary */\r
262                     {\r
263                         ArrayList list = new12();\r
264                         push(goTo(4), list, false);\r
265                     }\r
266                     break;\r
267                     case 13: /* reduce AAfunctionprimary2Primary */\r
268                     {\r
269                         ArrayList list = new13();\r
270                         push(goTo(4), list, false);\r
271                     }\r
272                     break;\r
273                     case 14: /* reduce ASingleRange */\r
274                     {\r
275                         ArrayList list = new14();\r
276                         push(goTo(5), list, false);\r
277                     }\r
278                     break;\r
279                     case 15: /* reduce AMultiRange */\r
280                     {\r
281                         ArrayList list = new15();\r
282                         push(goTo(5), list, false);\r
283                     }\r
284                     break;\r
285                     case 16: /* reduce AStringValue */\r
286                     {\r
287                         ArrayList list = new16();\r
288                         push(goTo(6), list, false);\r
289                     }\r
290                     break;\r
291                     case 17: /* reduce AConstantValue */\r
292                     {\r
293                         ArrayList list = new17();\r
294                         push(goTo(6), list, false);\r
295                     }\r
296                     break;\r
297                     case 18: /* reduce ARangeValue */\r
298                     {\r
299                         ArrayList list = new18();\r
300                         push(goTo(6), list, false);\r
301                     }\r
302                     break;\r
303                     case 19: /* reduce AAddressValue */\r
304                     {\r
305                         ArrayList list = new19();\r
306                         push(goTo(6), list, false);\r
307                     }\r
308                     break;\r
309                     case 20: /* reduce AExprValue */\r
310                     {\r
311                         ArrayList list = new20();\r
312                         push(goTo(6), list, false);\r
313                     }\r
314                     break;\r
315                     }\r
316                     break;\r
317                 case ACCEPT:\r
318                     {\r
319                         EOF node2 = (EOF) this.lexer.next();\r
320                         PExpression node1 = (PExpression) pop().get(0);\r
321                         Start node = new Start(node1, node2);\r
322                         return node;\r
323                     }\r
324                 case ERROR:\r
325                     throw new ParserException(this.last_token,\r
326                         "[" + this.last_line + "," + this.last_pos + "] " +\r
327                         Parser.errorMessages[Parser.errors[this.action[1]]]);\r
328             }\r
329         }\r
330     }\r
331 \r
332 \r
333 \r
334     @SuppressWarnings("unchecked")\r
335     ArrayList new0() /* reduce AMultExpression */\r
336     {\r
337         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
338 \r
339         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
340         PExpression pexpressionNode1;\r
341         {\r
342             // Block\r
343         PMultiplicative pmultiplicativeNode2;\r
344         pmultiplicativeNode2 = (PMultiplicative)nodeArrayList1.get(0);\r
345 \r
346         pexpressionNode1 = new AMultExpression(pmultiplicativeNode2);\r
347         }\r
348         nodeList.add(pexpressionNode1);\r
349         return nodeList;\r
350     }\r
351 \r
352 \r
353 \r
354     @SuppressWarnings("unchecked")\r
355     ArrayList new1() /* reduce APlusExpression */\r
356     {\r
357         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
358 \r
359         @SuppressWarnings("unused") ArrayList nodeArrayList3 = pop();\r
360         @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
361         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
362         PExpression pexpressionNode1;\r
363         {\r
364             // Block\r
365         PExpression pexpressionNode2;\r
366         TPlus tplusNode3;\r
367         PMultiplicative pmultiplicativeNode4;\r
368         pexpressionNode2 = (PExpression)nodeArrayList1.get(0);\r
369         tplusNode3 = (TPlus)nodeArrayList2.get(0);\r
370         pmultiplicativeNode4 = (PMultiplicative)nodeArrayList3.get(0);\r
371 \r
372         pexpressionNode1 = new APlusExpression(pexpressionNode2, tplusNode3, pmultiplicativeNode4);\r
373         }\r
374         nodeList.add(pexpressionNode1);\r
375         return nodeList;\r
376     }\r
377 \r
378 \r
379 \r
380     @SuppressWarnings("unchecked")\r
381     ArrayList new2() /* reduce AMinusExpression */\r
382     {\r
383         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
384 \r
385         @SuppressWarnings("unused") ArrayList nodeArrayList3 = pop();\r
386         @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
387         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
388         PExpression pexpressionNode1;\r
389         {\r
390             // Block\r
391         PExpression pexpressionNode2;\r
392         TMinus tminusNode3;\r
393         PMultiplicative pmultiplicativeNode4;\r
394         pexpressionNode2 = (PExpression)nodeArrayList1.get(0);\r
395         tminusNode3 = (TMinus)nodeArrayList2.get(0);\r
396         pmultiplicativeNode4 = (PMultiplicative)nodeArrayList3.get(0);\r
397 \r
398         pexpressionNode1 = new AMinusExpression(pexpressionNode2, tminusNode3, pmultiplicativeNode4);\r
399         }\r
400         nodeList.add(pexpressionNode1);\r
401         return nodeList;\r
402     }\r
403 \r
404 \r
405 \r
406     @SuppressWarnings("unchecked")\r
407     ArrayList new3() /* reduce AUnaryMultiplicative */\r
408     {\r
409         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
410 \r
411         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
412         PMultiplicative pmultiplicativeNode1;\r
413         {\r
414             // Block\r
415         PUnary punaryNode2;\r
416         punaryNode2 = (PUnary)nodeArrayList1.get(0);\r
417 \r
418         pmultiplicativeNode1 = new AUnaryMultiplicative(punaryNode2);\r
419         }\r
420         nodeList.add(pmultiplicativeNode1);\r
421         return nodeList;\r
422     }\r
423 \r
424 \r
425 \r
426     @SuppressWarnings("unchecked")\r
427     ArrayList new4() /* reduce AMultMultiplicative */\r
428     {\r
429         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
430 \r
431         @SuppressWarnings("unused") ArrayList nodeArrayList3 = pop();\r
432         @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
433         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
434         PMultiplicative pmultiplicativeNode1;\r
435         {\r
436             // Block\r
437         PMultiplicative pmultiplicativeNode2;\r
438         TMult tmultNode3;\r
439         PUnary punaryNode4;\r
440         pmultiplicativeNode2 = (PMultiplicative)nodeArrayList1.get(0);\r
441         tmultNode3 = (TMult)nodeArrayList2.get(0);\r
442         punaryNode4 = (PUnary)nodeArrayList3.get(0);\r
443 \r
444         pmultiplicativeNode1 = new AMultMultiplicative(pmultiplicativeNode2, tmultNode3, punaryNode4);\r
445         }\r
446         nodeList.add(pmultiplicativeNode1);\r
447         return nodeList;\r
448     }\r
449 \r
450 \r
451 \r
452     @SuppressWarnings("unchecked")\r
453     ArrayList new5() /* reduce ADivMultiplicative */\r
454     {\r
455         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
456 \r
457         @SuppressWarnings("unused") ArrayList nodeArrayList3 = pop();\r
458         @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
459         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
460         PMultiplicative pmultiplicativeNode1;\r
461         {\r
462             // Block\r
463         PMultiplicative pmultiplicativeNode2;\r
464         TDiv tdivNode3;\r
465         PUnary punaryNode4;\r
466         pmultiplicativeNode2 = (PMultiplicative)nodeArrayList1.get(0);\r
467         tdivNode3 = (TDiv)nodeArrayList2.get(0);\r
468         punaryNode4 = (PUnary)nodeArrayList3.get(0);\r
469 \r
470         pmultiplicativeNode1 = new ADivMultiplicative(pmultiplicativeNode2, tdivNode3, punaryNode4);\r
471         }\r
472         nodeList.add(pmultiplicativeNode1);\r
473         return nodeList;\r
474     }\r
475 \r
476 \r
477 \r
478     @SuppressWarnings("unchecked")\r
479     ArrayList new6() /* reduce APrimaryUnary */\r
480     {\r
481         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
482 \r
483         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
484         PUnary punaryNode1;\r
485         {\r
486             // Block\r
487         PPrimary pprimaryNode2;\r
488         pprimaryNode2 = (PPrimary)nodeArrayList1.get(0);\r
489 \r
490         punaryNode1 = new APrimaryUnary(pprimaryNode2);\r
491         }\r
492         nodeList.add(punaryNode1);\r
493         return nodeList;\r
494     }\r
495 \r
496 \r
497 \r
498     @SuppressWarnings("unchecked")\r
499     ArrayList new7() /* reduce AUnaryplusUnary */\r
500     {\r
501         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
502 \r
503         @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
504         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
505         PUnary punaryNode1;\r
506         {\r
507             // Block\r
508         TPlus tplusNode2;\r
509         PUnary punaryNode3;\r
510         tplusNode2 = (TPlus)nodeArrayList1.get(0);\r
511         punaryNode3 = (PUnary)nodeArrayList2.get(0);\r
512 \r
513         punaryNode1 = new AUnaryplusUnary(tplusNode2, punaryNode3);\r
514         }\r
515         nodeList.add(punaryNode1);\r
516         return nodeList;\r
517     }\r
518 \r
519 \r
520 \r
521     @SuppressWarnings("unchecked")\r
522     ArrayList new8() /* reduce AUnaryminusUnary */\r
523     {\r
524         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
525 \r
526         @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
527         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
528         PUnary punaryNode1;\r
529         {\r
530             // Block\r
531         TMinus tminusNode2;\r
532         PUnary punaryNode3;\r
533         tminusNode2 = (TMinus)nodeArrayList1.get(0);\r
534         punaryNode3 = (PUnary)nodeArrayList2.get(0);\r
535 \r
536         punaryNode1 = new AUnaryminusUnary(tminusNode2, punaryNode3);\r
537         }\r
538         nodeList.add(punaryNode1);\r
539         return nodeList;\r
540     }\r
541 \r
542 \r
543 \r
544     @SuppressWarnings("unchecked")\r
545     ArrayList new9() /* reduce ASingleArgList */\r
546     {\r
547         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
548 \r
549         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
550         PArgList parglistNode1;\r
551         {\r
552             // Block\r
553         PExpression pexpressionNode2;\r
554         pexpressionNode2 = (PExpression)nodeArrayList1.get(0);\r
555 \r
556         parglistNode1 = new ASingleArgList(pexpressionNode2);\r
557         }\r
558         nodeList.add(parglistNode1);\r
559         return nodeList;\r
560     }\r
561 \r
562 \r
563 \r
564     @SuppressWarnings("unchecked")\r
565     ArrayList new10() /* reduce ASequenceArgList */\r
566     {\r
567         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
568 \r
569         @SuppressWarnings("unused") ArrayList nodeArrayList3 = pop();\r
570         @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
571         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
572         PArgList parglistNode1;\r
573         {\r
574             // Block\r
575         PArgList parglistNode2;\r
576         TComma tcommaNode3;\r
577         PExpression pexpressionNode4;\r
578         parglistNode2 = (PArgList)nodeArrayList1.get(0);\r
579         tcommaNode3 = (TComma)nodeArrayList2.get(0);\r
580         pexpressionNode4 = (PExpression)nodeArrayList3.get(0);\r
581 \r
582         parglistNode1 = new ASequenceArgList(parglistNode2, tcommaNode3, pexpressionNode4);\r
583         }\r
584         nodeList.add(parglistNode1);\r
585         return nodeList;\r
586     }\r
587 \r
588 \r
589 \r
590     @SuppressWarnings("unchecked")\r
591     ArrayList new11() /* reduce AValuePrimary */\r
592     {\r
593         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
594 \r
595         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
596         PPrimary pprimaryNode1;\r
597         {\r
598             // Block\r
599         PValue pvalueNode2;\r
600         pvalueNode2 = (PValue)nodeArrayList1.get(0);\r
601 \r
602         pprimaryNode1 = new AValuePrimary(pvalueNode2);\r
603         }\r
604         nodeList.add(pprimaryNode1);\r
605         return nodeList;\r
606     }\r
607 \r
608 \r
609 \r
610     @SuppressWarnings("unchecked")\r
611     ArrayList new12() /* reduce AAfunctionprimary1Primary */\r
612     {\r
613         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
614 \r
615         @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
616         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
617         PPrimary pprimaryNode1;\r
618         {\r
619             // Block\r
620         TFunc tfuncNode2;\r
621         @SuppressWarnings("unused") Object nullNode3 = null;\r
622         TRPar trparNode4;\r
623         tfuncNode2 = (TFunc)nodeArrayList1.get(0);\r
624         trparNode4 = (TRPar)nodeArrayList2.get(0);\r
625 \r
626         pprimaryNode1 = new AFunctionPrimary(tfuncNode2, null, trparNode4);\r
627         }\r
628         nodeList.add(pprimaryNode1);\r
629         return nodeList;\r
630     }\r
631 \r
632 \r
633 \r
634     @SuppressWarnings("unchecked")\r
635     ArrayList new13() /* reduce AAfunctionprimary2Primary */\r
636     {\r
637         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
638 \r
639         @SuppressWarnings("unused") ArrayList nodeArrayList3 = pop();\r
640         @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
641         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
642         PPrimary pprimaryNode1;\r
643         {\r
644             // Block\r
645         TFunc tfuncNode2;\r
646         PArgList parglistNode3;\r
647         TRPar trparNode4;\r
648         tfuncNode2 = (TFunc)nodeArrayList1.get(0);\r
649         parglistNode3 = (PArgList)nodeArrayList2.get(0);\r
650         trparNode4 = (TRPar)nodeArrayList3.get(0);\r
651 \r
652         pprimaryNode1 = new AFunctionPrimary(tfuncNode2, parglistNode3, trparNode4);\r
653         }\r
654         nodeList.add(pprimaryNode1);\r
655         return nodeList;\r
656     }\r
657 \r
658 \r
659 \r
660     @SuppressWarnings("unchecked")\r
661     ArrayList new14() /* reduce ASingleRange */\r
662     {\r
663         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
664 \r
665         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
666         PRange prangeNode1;\r
667         {\r
668             // Block\r
669         TCell tcellNode2;\r
670         tcellNode2 = (TCell)nodeArrayList1.get(0);\r
671 \r
672         prangeNode1 = new ASingleRange(tcellNode2);\r
673         }\r
674         nodeList.add(prangeNode1);\r
675         return nodeList;\r
676     }\r
677 \r
678 \r
679 \r
680     @SuppressWarnings("unchecked")\r
681     ArrayList new15() /* reduce AMultiRange */\r
682     {\r
683         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
684 \r
685         @SuppressWarnings("unused") ArrayList nodeArrayList3 = pop();\r
686         @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
687         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
688         PRange prangeNode1;\r
689         {\r
690             // Block\r
691         TCell tcellNode2;\r
692         TColon tcolonNode3;\r
693         TCell tcellNode4;\r
694         tcellNode2 = (TCell)nodeArrayList1.get(0);\r
695         tcolonNode3 = (TColon)nodeArrayList2.get(0);\r
696         tcellNode4 = (TCell)nodeArrayList3.get(0);\r
697 \r
698         prangeNode1 = new AMultiRange(tcellNode2, tcolonNode3, tcellNode4);\r
699         }\r
700         nodeList.add(prangeNode1);\r
701         return nodeList;\r
702     }\r
703 \r
704 \r
705 \r
706     @SuppressWarnings("unchecked")\r
707     ArrayList new16() /* reduce AStringValue */\r
708     {\r
709         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
710 \r
711         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
712         PValue pvalueNode1;\r
713         {\r
714             // Block\r
715         TString tstringNode2;\r
716         tstringNode2 = (TString)nodeArrayList1.get(0);\r
717 \r
718         pvalueNode1 = new AStringValue(tstringNode2);\r
719         }\r
720         nodeList.add(pvalueNode1);\r
721         return nodeList;\r
722     }\r
723 \r
724 \r
725 \r
726     @SuppressWarnings("unchecked")\r
727     ArrayList new17() /* reduce AConstantValue */\r
728     {\r
729         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
730 \r
731         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
732         PValue pvalueNode1;\r
733         {\r
734             // Block\r
735         TNumber tnumberNode2;\r
736         tnumberNode2 = (TNumber)nodeArrayList1.get(0);\r
737 \r
738         pvalueNode1 = new AConstantValue(tnumberNode2);\r
739         }\r
740         nodeList.add(pvalueNode1);\r
741         return nodeList;\r
742     }\r
743 \r
744 \r
745 \r
746     @SuppressWarnings("unchecked")\r
747     ArrayList new18() /* reduce ARangeValue */\r
748     {\r
749         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
750 \r
751         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
752         PValue pvalueNode1;\r
753         {\r
754             // Block\r
755         PRange prangeNode2;\r
756         prangeNode2 = (PRange)nodeArrayList1.get(0);\r
757 \r
758         pvalueNode1 = new ARangeValue(prangeNode2);\r
759         }\r
760         nodeList.add(pvalueNode1);\r
761         return nodeList;\r
762     }\r
763 \r
764 \r
765 \r
766     @SuppressWarnings("unchecked")\r
767     ArrayList new19() /* reduce AAddressValue */\r
768     {\r
769         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
770 \r
771         @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
772         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
773         PValue pvalueNode1;\r
774         {\r
775             // Block\r
776         TAmpersand tampersandNode2;\r
777         PRange prangeNode3;\r
778         tampersandNode2 = (TAmpersand)nodeArrayList1.get(0);\r
779         prangeNode3 = (PRange)nodeArrayList2.get(0);\r
780 \r
781         pvalueNode1 = new AAddressValue(tampersandNode2, prangeNode3);\r
782         }\r
783         nodeList.add(pvalueNode1);\r
784         return nodeList;\r
785     }\r
786 \r
787 \r
788 \r
789     @SuppressWarnings("unchecked")\r
790     ArrayList new20() /* reduce AExprValue */\r
791     {\r
792         @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
793 \r
794         @SuppressWarnings("unused") ArrayList nodeArrayList3 = pop();\r
795         @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
796         @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
797         PValue pvalueNode1;\r
798         {\r
799             // Block\r
800         TLPar tlparNode2;\r
801         PExpression pexpressionNode3;\r
802         TRPar trparNode4;\r
803         tlparNode2 = (TLPar)nodeArrayList1.get(0);\r
804         pexpressionNode3 = (PExpression)nodeArrayList2.get(0);\r
805         trparNode4 = (TRPar)nodeArrayList3.get(0);\r
806 \r
807         pvalueNode1 = new AExprValue(tlparNode2, pexpressionNode3, trparNode4);\r
808         }\r
809         nodeList.add(pvalueNode1);\r
810         return nodeList;\r
811     }\r
812 \r
813 \r
814 \r
815     private static int[][][] actionTable;\r
816 /*      {\r
817                         {{-1, ERROR, 0}, {3, SHIFT, 1}, {4, SHIFT, 2}, {7, SHIFT, 3}, {10, SHIFT, 4}, {12, SHIFT, 5}, {13, SHIFT, 6}, {14, SHIFT, 7}, {15, SHIFT, 8}, },\r
818                         {{-1, ERROR, 1}, {3, SHIFT, 1}, {4, SHIFT, 2}, {7, SHIFT, 3}, {10, SHIFT, 4}, {12, SHIFT, 5}, {13, SHIFT, 6}, {14, SHIFT, 7}, {15, SHIFT, 8}, },\r
819                         {{-1, ERROR, 2}, {3, SHIFT, 1}, {4, SHIFT, 2}, {7, SHIFT, 3}, {10, SHIFT, 4}, {12, SHIFT, 5}, {13, SHIFT, 6}, {14, SHIFT, 7}, {15, SHIFT, 8}, },\r
820                         {{-1, ERROR, 3}, {13, SHIFT, 6}, },\r
821                         {{-1, ERROR, 4}, {3, SHIFT, 1}, {4, SHIFT, 2}, {7, SHIFT, 3}, {10, SHIFT, 4}, {12, SHIFT, 5}, {13, SHIFT, 6}, {14, SHIFT, 7}, {15, SHIFT, 8}, },\r
822                         {{-1, ERROR, 5}, {3, SHIFT, 1}, {4, SHIFT, 2}, {7, SHIFT, 3}, {10, SHIFT, 4}, {11, SHIFT, 19}, {12, SHIFT, 5}, {13, SHIFT, 6}, {14, SHIFT, 7}, {15, SHIFT, 8}, },\r
823                         {{-1, REDUCE, 14}, {9, SHIFT, 22}, },\r
824                         {{-1, REDUCE, 17}, },\r
825                         {{-1, REDUCE, 16}, },\r
826                         {{-1, ERROR, 9}, {3, SHIFT, 23}, {4, SHIFT, 24}, {17, ACCEPT, -1}, },\r
827                         {{-1, REDUCE, 0}, {5, SHIFT, 25}, {6, SHIFT, 26}, },\r
828                         {{-1, REDUCE, 3}, },\r
829                         {{-1, REDUCE, 6}, },\r
830                         {{-1, REDUCE, 18}, },\r
831                         {{-1, REDUCE, 11}, },\r
832                         {{-1, REDUCE, 7}, },\r
833                         {{-1, REDUCE, 8}, },\r
834                         {{-1, REDUCE, 19}, },\r
835                         {{-1, ERROR, 18}, {3, SHIFT, 23}, {4, SHIFT, 24}, {11, SHIFT, 27}, },\r
836                         {{-1, REDUCE, 12}, },\r
837                         {{-1, REDUCE, 9}, {3, SHIFT, 23}, {4, SHIFT, 24}, },\r
838                         {{-1, ERROR, 21}, {8, SHIFT, 28}, {11, SHIFT, 29}, },\r
839                         {{-1, ERROR, 22}, {13, SHIFT, 30}, },\r
840                         {{-1, ERROR, 23}, {3, SHIFT, 1}, {4, SHIFT, 2}, {7, SHIFT, 3}, {10, SHIFT, 4}, {12, SHIFT, 5}, {13, SHIFT, 6}, {14, SHIFT, 7}, {15, SHIFT, 8}, },\r
841                         {{-1, ERROR, 24}, {3, SHIFT, 1}, {4, SHIFT, 2}, {7, SHIFT, 3}, {10, SHIFT, 4}, {12, SHIFT, 5}, {13, SHIFT, 6}, {14, SHIFT, 7}, {15, SHIFT, 8}, },\r
842                         {{-1, ERROR, 25}, {3, SHIFT, 1}, {4, SHIFT, 2}, {7, SHIFT, 3}, {10, SHIFT, 4}, {12, SHIFT, 5}, {13, SHIFT, 6}, {14, SHIFT, 7}, {15, SHIFT, 8}, },\r
843                         {{-1, ERROR, 26}, {3, SHIFT, 1}, {4, SHIFT, 2}, {7, SHIFT, 3}, {10, SHIFT, 4}, {12, SHIFT, 5}, {13, SHIFT, 6}, {14, SHIFT, 7}, {15, SHIFT, 8}, },\r
844                         {{-1, REDUCE, 20}, },\r
845                         {{-1, ERROR, 28}, {3, SHIFT, 1}, {4, SHIFT, 2}, {7, SHIFT, 3}, {10, SHIFT, 4}, {12, SHIFT, 5}, {13, SHIFT, 6}, {14, SHIFT, 7}, {15, SHIFT, 8}, },\r
846                         {{-1, REDUCE, 13}, },\r
847                         {{-1, REDUCE, 15}, },\r
848                         {{-1, REDUCE, 1}, {5, SHIFT, 25}, {6, SHIFT, 26}, },\r
849                         {{-1, REDUCE, 2}, {5, SHIFT, 25}, {6, SHIFT, 26}, },\r
850                         {{-1, REDUCE, 4}, },\r
851                         {{-1, REDUCE, 5}, },\r
852                         {{-1, REDUCE, 10}, {3, SHIFT, 23}, {4, SHIFT, 24}, },\r
853         };*/\r
854     private static int[][][] gotoTable;\r
855 /*      {\r
856                         {{-1, 9}, {4, 18}, {5, 20}, {28, 35}, },\r
857                         {{-1, 10}, {23, 31}, {24, 32}, },\r
858                         {{-1, 11}, {1, 15}, {2, 16}, {25, 33}, {26, 34}, },\r
859                         {{-1, 21}, },\r
860                         {{-1, 12}, },\r
861                         {{-1, 13}, {3, 17}, },\r
862                         {{-1, 14}, },\r
863         };*/\r
864     private static String[] errorMessages;\r
865 /*      {\r
866                         "expecting: '+', '-', '&', '(', func, cell, number, string",\r
867                         "expecting: cell",\r
868                         "expecting: '+', '-', '&', '(', ')', func, cell, number, string",\r
869                         "expecting: '+', '-', '*', '/', ',', ':', ')', EOF",\r
870                         "expecting: '+', '-', '*', '/', ',', ')', EOF",\r
871                         "expecting: '+', '-', EOF",\r
872                         "expecting: '+', '-', ')'",\r
873                         "expecting: '+', '-', ',', ')'",\r
874                         "expecting: ',', ')'",\r
875         };*/\r
876     private static int[] errors;\r
877 /*      {\r
878                         0, 0, 0, 1, 0, 2, 3, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 6, 4, 7, 8, 1, 0, 0, 0, 0, 4, 0, 4, 4, 4, 4, 4, 4, 7, \r
879         };*/\r
880 \r
881     static \r
882     {\r
883         try\r
884         {\r
885             DataInputStream s = new DataInputStream(\r
886                 new BufferedInputStream(\r
887                 Parser.class.getResourceAsStream("parser.dat")));\r
888 \r
889             // read actionTable\r
890             int length = s.readInt();\r
891             Parser.actionTable = new int[length][][];\r
892             for(int i = 0; i < Parser.actionTable.length; i++)\r
893             {\r
894                 length = s.readInt();\r
895                 Parser.actionTable[i] = new int[length][3];\r
896                 for(int j = 0; j < Parser.actionTable[i].length; j++)\r
897                 {\r
898                 for(int k = 0; k < 3; k++)\r
899                 {\r
900                     Parser.actionTable[i][j][k] = s.readInt();\r
901                 }\r
902                 }\r
903             }\r
904 \r
905             // read gotoTable\r
906             length = s.readInt();\r
907             gotoTable = new int[length][][];\r
908             for(int i = 0; i < gotoTable.length; i++)\r
909             {\r
910                 length = s.readInt();\r
911                 gotoTable[i] = new int[length][2];\r
912                 for(int j = 0; j < gotoTable[i].length; j++)\r
913                 {\r
914                 for(int k = 0; k < 2; k++)\r
915                 {\r
916                     gotoTable[i][j][k] = s.readInt();\r
917                 }\r
918                 }\r
919             }\r
920 \r
921             // read errorMessages\r
922             length = s.readInt();\r
923             errorMessages = new String[length];\r
924             for(int i = 0; i < errorMessages.length; i++)\r
925             {\r
926                 length = s.readInt();\r
927                 StringBuffer buffer = new StringBuffer();\r
928 \r
929                 for(int j = 0; j < length; j++)\r
930                 {\r
931                 buffer.append(s.readChar());\r
932                 }\r
933                 errorMessages[i] = buffer.toString();\r
934             }\r
935 \r
936             // read errors\r
937             length = s.readInt();\r
938             errors = new int[length];\r
939             for(int i = 0; i < errors.length; i++)\r
940             {\r
941                 errors[i] = s.readInt();\r
942             }\r
943 \r
944             s.close();\r
945         }\r
946         catch(Exception e)\r
947         {\r
948             throw new RuntimeException("The file \"parser.dat\" is either missing or corrupted.");\r
949         }\r
950     }\r
951 }\r