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