]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.basicexpression/src/org/simantics/basicexpression/parser/Parser.java b/bundles/org.simantics.basicexpression/src/org/simantics/basicexpression/parser/Parser.java
new file mode 100644 (file)
index 0000000..7fe8f4a
--- /dev/null
@@ -0,0 +1,994 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */\r
+\r
+package org.simantics.basicexpression.parser;\r
+\r
+import org.simantics.basicexpression.lexer.*;\r
+import org.simantics.basicexpression.node.*;\r
+import org.simantics.basicexpression.analysis.*;\r
+import java.util.*;\r
+\r
+import java.io.DataInputStream;\r
+import java.io.BufferedInputStream;\r
+import java.io.IOException;\r
+\r
+@SuppressWarnings("nls")\r
+public class Parser\r
+{\r
+    public final Analysis ignoredTokens = new AnalysisAdapter();\r
+\r
+    protected ArrayList nodeList;\r
+\r
+    private final Lexer lexer;\r
+    private final ListIterator stack = new LinkedList().listIterator();\r
+    private int last_pos;\r
+    private int last_line;\r
+    private Token last_token;\r
+    private final TokenIndex converter = new TokenIndex();\r
+    private final int[] action = new int[2];\r
+\r
+    private final static int SHIFT = 0;\r
+    private final static int REDUCE = 1;\r
+    private final static int ACCEPT = 2;\r
+    private final static int ERROR = 3;\r
+\r
+    public Parser(@SuppressWarnings("hiding") Lexer lexer)\r
+    {\r
+        this.lexer = lexer;\r
+    }\r
+\r
+    protected void filter() throws ParserException, LexerException, IOException\r
+    {\r
+        // Empty body\r
+    }\r
+\r
+    private void push(int numstate, ArrayList listNode, boolean hidden) throws ParserException, LexerException, IOException\r
+    {\r
+        this.nodeList = listNode;\r
+\r
+        if(!hidden)\r
+        {\r
+            filter();\r
+        }\r
+\r
+        if(!this.stack.hasNext())\r
+        {\r
+            this.stack.add(new State(numstate, this.nodeList));\r
+            return;\r
+        }\r
+\r
+        State s = (State) this.stack.next();\r
+        s.state = numstate;\r
+        s.nodes = this.nodeList;\r
+    }\r
+\r
+    private int goTo(int index)\r
+    {\r
+        int state = state();\r
+        int low = 1;\r
+        int high = gotoTable[index].length - 1;\r
+        int value = gotoTable[index][0][1];\r
+\r
+        while(low <= high)\r
+        {\r
+            int middle = (low + high) / 2;\r
+\r
+            if(state < gotoTable[index][middle][0])\r
+            {\r
+                high = middle - 1;\r
+            }\r
+            else if(state > gotoTable[index][middle][0])\r
+            {\r
+                low = middle + 1;\r
+            }\r
+            else\r
+            {\r
+                value = gotoTable[index][middle][1];\r
+                break;\r
+            }\r
+        }\r
+\r
+        return value;\r
+    }\r
+\r
+    private int state()\r
+    {\r
+        State s = (State) this.stack.previous();\r
+        this.stack.next();\r
+        return s.state;\r
+    }\r
+\r
+    private ArrayList pop()\r
+    {\r
+        return ((State) this.stack.previous()).nodes;\r
+    }\r
+\r
+    private int index(Switchable token)\r
+    {\r
+        this.converter.index = -1;\r
+        token.apply(this.converter);\r
+        return this.converter.index;\r
+    }\r
+\r
+    @SuppressWarnings("unchecked")\r
+    public Start parse() throws ParserException, LexerException, IOException\r
+    {\r
+        push(0, null, true);\r
+        List<Node> ign = null;\r
+        while(true)\r
+        {\r
+            while(index(this.lexer.peek()) == -1)\r
+            {\r
+                if(ign == null)\r
+                {\r
+                    ign = new LinkedList<Node>();\r
+                }\r
+\r
+                ign.add(this.lexer.next());\r
+            }\r
+\r
+            if(ign != null)\r
+            {\r
+                this.ignoredTokens.setIn(this.lexer.peek(), ign);\r
+                ign = null;\r
+            }\r
+\r
+            this.last_pos = this.lexer.peek().getPos();\r
+            this.last_line = this.lexer.peek().getLine();\r
+            this.last_token = this.lexer.peek();\r
+\r
+            int index = index(this.lexer.peek());\r
+            this.action[0] = Parser.actionTable[state()][0][1];\r
+            this.action[1] = Parser.actionTable[state()][0][2];\r
+\r
+            int low = 1;\r
+            int high = Parser.actionTable[state()].length - 1;\r
+\r
+            while(low <= high)\r
+            {\r
+                int middle = (low + high) / 2;\r
+\r
+                if(index < Parser.actionTable[state()][middle][0])\r
+                {\r
+                    high = middle - 1;\r
+                }\r
+                else if(index > Parser.actionTable[state()][middle][0])\r
+                {\r
+                    low = middle + 1;\r
+                }\r
+                else\r
+                {\r
+                    this.action[0] = Parser.actionTable[state()][middle][1];\r
+                    this.action[1] = Parser.actionTable[state()][middle][2];\r
+                    break;\r
+                }\r
+            }\r
+\r
+            switch(this.action[0])\r
+            {\r
+                case SHIFT:\r
+                   {\r
+                       ArrayList list = new ArrayList();\r
+                       list.add(this.lexer.next());\r
+                        push(this.action[1], list, false);\r
+                    }\r
+                   break;\r
+                case REDUCE:\r
+                    switch(this.action[1])\r
+                    {\r
+                    case 0: /* reduce AMultExpression */\r
+                   {\r
+                       ArrayList list = new0();\r
+                       push(goTo(0), list, false);\r
+                   }\r
+                   break;\r
+                    case 1: /* reduce APlusExpression */\r
+                   {\r
+                       ArrayList list = new1();\r
+                       push(goTo(0), list, false);\r
+                   }\r
+                   break;\r
+                    case 2: /* reduce AMinusExpression */\r
+                   {\r
+                       ArrayList list = new2();\r
+                       push(goTo(0), list, false);\r
+                   }\r
+                   break;\r
+                    case 3: /* reduce AUnaryMultiplicative */\r
+                   {\r
+                       ArrayList list = new3();\r
+                       push(goTo(1), list, false);\r
+                   }\r
+                   break;\r
+                    case 4: /* reduce AMultMultiplicative */\r
+                   {\r
+                       ArrayList list = new4();\r
+                       push(goTo(1), list, false);\r
+                   }\r
+                   break;\r
+                    case 5: /* reduce ADivMultiplicative */\r
+                   {\r
+                       ArrayList list = new5();\r
+                       push(goTo(1), list, false);\r
+                   }\r
+                   break;\r
+                    case 6: /* reduce APrimaryUnary */\r
+                   {\r
+                       ArrayList list = new6();\r
+                       push(goTo(2), list, false);\r
+                   }\r
+                   break;\r
+                    case 7: /* reduce AUnaryplusUnary */\r
+                   {\r
+                       ArrayList list = new7();\r
+                       push(goTo(2), list, false);\r
+                   }\r
+                   break;\r
+                    case 8: /* reduce AUnaryminusUnary */\r
+                   {\r
+                       ArrayList list = new8();\r
+                       push(goTo(2), list, false);\r
+                   }\r
+                   break;\r
+                    case 9: /* reduce ASingleArgList */\r
+                   {\r
+                       ArrayList list = new9();\r
+                       push(goTo(3), list, false);\r
+                   }\r
+                   break;\r
+                    case 10: /* reduce ASequenceArgList */\r
+                   {\r
+                       ArrayList list = new10();\r
+                       push(goTo(3), list, false);\r
+                   }\r
+                   break;\r
+                    case 11: /* reduce AValuePrimary */\r
+                   {\r
+                       ArrayList list = new11();\r
+                       push(goTo(4), list, false);\r
+                   }\r
+                   break;\r
+                    case 12: /* reduce AVariablePrimary */\r
+                   {\r
+                       ArrayList list = new12();\r
+                       push(goTo(4), list, false);\r
+                   }\r
+                   break;\r
+                    case 13: /* reduce AAfunctionprimary1Primary */\r
+                   {\r
+                       ArrayList list = new13();\r
+                       push(goTo(4), list, false);\r
+                   }\r
+                   break;\r
+                    case 14: /* reduce AAfunctionprimary2Primary */\r
+                   {\r
+                       ArrayList list = new14();\r
+                       push(goTo(4), list, false);\r
+                   }\r
+                   break;\r
+                    case 15: /* reduce ASingleRange */\r
+                   {\r
+                       ArrayList list = new15();\r
+                       push(goTo(5), list, false);\r
+                   }\r
+                   break;\r
+                    case 16: /* reduce AMultiRange */\r
+                   {\r
+                       ArrayList list = new16();\r
+                       push(goTo(5), list, false);\r
+                   }\r
+                   break;\r
+                    case 17: /* reduce ARviValue */\r
+                   {\r
+                       ArrayList list = new17();\r
+                       push(goTo(6), list, false);\r
+                   }\r
+                   break;\r
+                    case 18: /* reduce AStringValue */\r
+                   {\r
+                       ArrayList list = new18();\r
+                       push(goTo(6), list, false);\r
+                   }\r
+                   break;\r
+                    case 19: /* reduce AConstantValue */\r
+                   {\r
+                       ArrayList list = new19();\r
+                       push(goTo(6), list, false);\r
+                   }\r
+                   break;\r
+                    case 20: /* reduce ARangeValue */\r
+                   {\r
+                       ArrayList list = new20();\r
+                       push(goTo(6), list, false);\r
+                   }\r
+                   break;\r
+                    case 21: /* reduce AAddressValue */\r
+                   {\r
+                       ArrayList list = new21();\r
+                       push(goTo(6), list, false);\r
+                   }\r
+                   break;\r
+                    case 22: /* reduce AExprValue */\r
+                   {\r
+                       ArrayList list = new22();\r
+                       push(goTo(6), list, false);\r
+                   }\r
+                   break;\r
+                    }\r
+                    break;\r
+                case ACCEPT:\r
+                    {\r
+                        EOF node2 = (EOF) this.lexer.next();\r
+                        PExpression node1 = (PExpression) pop().get(0);\r
+                        Start node = new Start(node1, node2);\r
+                        return node;\r
+                    }\r
+                case ERROR:\r
+                    throw new ParserException(this.last_token,\r
+                        "[" + this.last_line + "," + this.last_pos + "] " +\r
+                        Parser.errorMessages[Parser.errors[this.action[1]]]);\r
+            }\r
+        }\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new0() /* reduce AMultExpression */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PExpression pexpressionNode1;\r
+        {\r
+            // Block\r
+        PMultiplicative pmultiplicativeNode2;\r
+        pmultiplicativeNode2 = (PMultiplicative)nodeArrayList1.get(0);\r
+\r
+        pexpressionNode1 = new AMultExpression(pmultiplicativeNode2);\r
+        }\r
+       nodeList.add(pexpressionNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new1() /* reduce APlusExpression */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList3 = pop();\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PExpression pexpressionNode1;\r
+        {\r
+            // Block\r
+        PExpression pexpressionNode2;\r
+        TPlus tplusNode3;\r
+        PMultiplicative pmultiplicativeNode4;\r
+        pexpressionNode2 = (PExpression)nodeArrayList1.get(0);\r
+        tplusNode3 = (TPlus)nodeArrayList2.get(0);\r
+        pmultiplicativeNode4 = (PMultiplicative)nodeArrayList3.get(0);\r
+\r
+        pexpressionNode1 = new APlusExpression(pexpressionNode2, tplusNode3, pmultiplicativeNode4);\r
+        }\r
+       nodeList.add(pexpressionNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new2() /* reduce AMinusExpression */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList3 = pop();\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PExpression pexpressionNode1;\r
+        {\r
+            // Block\r
+        PExpression pexpressionNode2;\r
+        TMinus tminusNode3;\r
+        PMultiplicative pmultiplicativeNode4;\r
+        pexpressionNode2 = (PExpression)nodeArrayList1.get(0);\r
+        tminusNode3 = (TMinus)nodeArrayList2.get(0);\r
+        pmultiplicativeNode4 = (PMultiplicative)nodeArrayList3.get(0);\r
+\r
+        pexpressionNode1 = new AMinusExpression(pexpressionNode2, tminusNode3, pmultiplicativeNode4);\r
+        }\r
+       nodeList.add(pexpressionNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new3() /* reduce AUnaryMultiplicative */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PMultiplicative pmultiplicativeNode1;\r
+        {\r
+            // Block\r
+        PUnary punaryNode2;\r
+        punaryNode2 = (PUnary)nodeArrayList1.get(0);\r
+\r
+        pmultiplicativeNode1 = new AUnaryMultiplicative(punaryNode2);\r
+        }\r
+       nodeList.add(pmultiplicativeNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new4() /* reduce AMultMultiplicative */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList3 = pop();\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PMultiplicative pmultiplicativeNode1;\r
+        {\r
+            // Block\r
+        PMultiplicative pmultiplicativeNode2;\r
+        TMult tmultNode3;\r
+        PUnary punaryNode4;\r
+        pmultiplicativeNode2 = (PMultiplicative)nodeArrayList1.get(0);\r
+        tmultNode3 = (TMult)nodeArrayList2.get(0);\r
+        punaryNode4 = (PUnary)nodeArrayList3.get(0);\r
+\r
+        pmultiplicativeNode1 = new AMultMultiplicative(pmultiplicativeNode2, tmultNode3, punaryNode4);\r
+        }\r
+       nodeList.add(pmultiplicativeNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new5() /* reduce ADivMultiplicative */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList3 = pop();\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PMultiplicative pmultiplicativeNode1;\r
+        {\r
+            // Block\r
+        PMultiplicative pmultiplicativeNode2;\r
+        TDiv tdivNode3;\r
+        PUnary punaryNode4;\r
+        pmultiplicativeNode2 = (PMultiplicative)nodeArrayList1.get(0);\r
+        tdivNode3 = (TDiv)nodeArrayList2.get(0);\r
+        punaryNode4 = (PUnary)nodeArrayList3.get(0);\r
+\r
+        pmultiplicativeNode1 = new ADivMultiplicative(pmultiplicativeNode2, tdivNode3, punaryNode4);\r
+        }\r
+       nodeList.add(pmultiplicativeNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new6() /* reduce APrimaryUnary */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PUnary punaryNode1;\r
+        {\r
+            // Block\r
+        PPrimary pprimaryNode2;\r
+        pprimaryNode2 = (PPrimary)nodeArrayList1.get(0);\r
+\r
+        punaryNode1 = new APrimaryUnary(pprimaryNode2);\r
+        }\r
+       nodeList.add(punaryNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new7() /* reduce AUnaryplusUnary */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PUnary punaryNode1;\r
+        {\r
+            // Block\r
+        TPlus tplusNode2;\r
+        PUnary punaryNode3;\r
+        tplusNode2 = (TPlus)nodeArrayList1.get(0);\r
+        punaryNode3 = (PUnary)nodeArrayList2.get(0);\r
+\r
+        punaryNode1 = new AUnaryplusUnary(tplusNode2, punaryNode3);\r
+        }\r
+       nodeList.add(punaryNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new8() /* reduce AUnaryminusUnary */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PUnary punaryNode1;\r
+        {\r
+            // Block\r
+        TMinus tminusNode2;\r
+        PUnary punaryNode3;\r
+        tminusNode2 = (TMinus)nodeArrayList1.get(0);\r
+        punaryNode3 = (PUnary)nodeArrayList2.get(0);\r
+\r
+        punaryNode1 = new AUnaryminusUnary(tminusNode2, punaryNode3);\r
+        }\r
+       nodeList.add(punaryNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new9() /* reduce ASingleArgList */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PArgList parglistNode1;\r
+        {\r
+            // Block\r
+        PExpression pexpressionNode2;\r
+        pexpressionNode2 = (PExpression)nodeArrayList1.get(0);\r
+\r
+        parglistNode1 = new ASingleArgList(pexpressionNode2);\r
+        }\r
+       nodeList.add(parglistNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new10() /* reduce ASequenceArgList */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList3 = pop();\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PArgList parglistNode1;\r
+        {\r
+            // Block\r
+        PArgList parglistNode2;\r
+        TComma tcommaNode3;\r
+        PExpression pexpressionNode4;\r
+        parglistNode2 = (PArgList)nodeArrayList1.get(0);\r
+        tcommaNode3 = (TComma)nodeArrayList2.get(0);\r
+        pexpressionNode4 = (PExpression)nodeArrayList3.get(0);\r
+\r
+        parglistNode1 = new ASequenceArgList(parglistNode2, tcommaNode3, pexpressionNode4);\r
+        }\r
+       nodeList.add(parglistNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new11() /* reduce AValuePrimary */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PPrimary pprimaryNode1;\r
+        {\r
+            // Block\r
+        PValue pvalueNode2;\r
+        pvalueNode2 = (PValue)nodeArrayList1.get(0);\r
+\r
+        pprimaryNode1 = new AValuePrimary(pvalueNode2);\r
+        }\r
+       nodeList.add(pprimaryNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new12() /* reduce AVariablePrimary */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PPrimary pprimaryNode1;\r
+        {\r
+            // Block\r
+        TVariable tvariableNode2;\r
+        tvariableNode2 = (TVariable)nodeArrayList1.get(0);\r
+\r
+        pprimaryNode1 = new AVariablePrimary(tvariableNode2);\r
+        }\r
+       nodeList.add(pprimaryNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new13() /* reduce AAfunctionprimary1Primary */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PPrimary pprimaryNode1;\r
+        {\r
+            // Block\r
+        TFunc tfuncNode2;\r
+        @SuppressWarnings("unused") Object nullNode3 = null;\r
+        TRPar trparNode4;\r
+        tfuncNode2 = (TFunc)nodeArrayList1.get(0);\r
+        trparNode4 = (TRPar)nodeArrayList2.get(0);\r
+\r
+        pprimaryNode1 = new AFunctionPrimary(tfuncNode2, null, trparNode4);\r
+        }\r
+       nodeList.add(pprimaryNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new14() /* reduce AAfunctionprimary2Primary */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList3 = pop();\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PPrimary pprimaryNode1;\r
+        {\r
+            // Block\r
+        TFunc tfuncNode2;\r
+        PArgList parglistNode3;\r
+        TRPar trparNode4;\r
+        tfuncNode2 = (TFunc)nodeArrayList1.get(0);\r
+        parglistNode3 = (PArgList)nodeArrayList2.get(0);\r
+        trparNode4 = (TRPar)nodeArrayList3.get(0);\r
+\r
+        pprimaryNode1 = new AFunctionPrimary(tfuncNode2, parglistNode3, trparNode4);\r
+        }\r
+       nodeList.add(pprimaryNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new15() /* reduce ASingleRange */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PRange prangeNode1;\r
+        {\r
+            // Block\r
+        TCell tcellNode2;\r
+        tcellNode2 = (TCell)nodeArrayList1.get(0);\r
+\r
+        prangeNode1 = new ASingleRange(tcellNode2);\r
+        }\r
+       nodeList.add(prangeNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new16() /* reduce AMultiRange */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList3 = pop();\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PRange prangeNode1;\r
+        {\r
+            // Block\r
+        TCell tcellNode2;\r
+        TColon tcolonNode3;\r
+        TCell tcellNode4;\r
+        tcellNode2 = (TCell)nodeArrayList1.get(0);\r
+        tcolonNode3 = (TColon)nodeArrayList2.get(0);\r
+        tcellNode4 = (TCell)nodeArrayList3.get(0);\r
+\r
+        prangeNode1 = new AMultiRange(tcellNode2, tcolonNode3, tcellNode4);\r
+        }\r
+       nodeList.add(prangeNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new17() /* reduce ARviValue */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PValue pvalueNode1;\r
+        {\r
+            // Block\r
+        TRvi trviNode2;\r
+        trviNode2 = (TRvi)nodeArrayList1.get(0);\r
+\r
+        pvalueNode1 = new ARviValue(trviNode2);\r
+        }\r
+       nodeList.add(pvalueNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new18() /* reduce AStringValue */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PValue pvalueNode1;\r
+        {\r
+            // Block\r
+        TString tstringNode2;\r
+        tstringNode2 = (TString)nodeArrayList1.get(0);\r
+\r
+        pvalueNode1 = new AStringValue(tstringNode2);\r
+        }\r
+       nodeList.add(pvalueNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new19() /* reduce AConstantValue */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PValue pvalueNode1;\r
+        {\r
+            // Block\r
+        TNumber tnumberNode2;\r
+        tnumberNode2 = (TNumber)nodeArrayList1.get(0);\r
+\r
+        pvalueNode1 = new AConstantValue(tnumberNode2);\r
+        }\r
+       nodeList.add(pvalueNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new20() /* reduce ARangeValue */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PValue pvalueNode1;\r
+        {\r
+            // Block\r
+        PRange prangeNode2;\r
+        prangeNode2 = (PRange)nodeArrayList1.get(0);\r
+\r
+        pvalueNode1 = new ARangeValue(prangeNode2);\r
+        }\r
+       nodeList.add(pvalueNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new21() /* reduce AAddressValue */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PValue pvalueNode1;\r
+        {\r
+            // Block\r
+        TAmpersand tampersandNode2;\r
+        PRange prangeNode3;\r
+        tampersandNode2 = (TAmpersand)nodeArrayList1.get(0);\r
+        prangeNode3 = (PRange)nodeArrayList2.get(0);\r
+\r
+        pvalueNode1 = new AAddressValue(tampersandNode2, prangeNode3);\r
+        }\r
+       nodeList.add(pvalueNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    @SuppressWarnings("unchecked")\r
+    ArrayList new22() /* reduce AExprValue */\r
+    {\r
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();\r
+\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList3 = pop();\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList2 = pop();\r
+        @SuppressWarnings("unused") ArrayList nodeArrayList1 = pop();\r
+        PValue pvalueNode1;\r
+        {\r
+            // Block\r
+        TLPar tlparNode2;\r
+        PExpression pexpressionNode3;\r
+        TRPar trparNode4;\r
+        tlparNode2 = (TLPar)nodeArrayList1.get(0);\r
+        pexpressionNode3 = (PExpression)nodeArrayList2.get(0);\r
+        trparNode4 = (TRPar)nodeArrayList3.get(0);\r
+\r
+        pvalueNode1 = new AExprValue(tlparNode2, pexpressionNode3, trparNode4);\r
+        }\r
+       nodeList.add(pvalueNode1);\r
+        return nodeList;\r
+    }\r
+\r
+\r
+\r
+    private static int[][][] actionTable;\r
+/*      {\r
+                       {{-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
+                       {{-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
+                       {{-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
+                       {{-1, ERROR, 3}, {14, SHIFT, 7}, },\r
+                       {{-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
+                       {{-1, REDUCE, 12}, },\r
+                       {{-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
+                       {{-1, REDUCE, 15}, {9, SHIFT, 24}, },\r
+                       {{-1, REDUCE, 17}, },\r
+                       {{-1, REDUCE, 19}, },\r
+                       {{-1, REDUCE, 18}, },\r
+                       {{-1, ERROR, 11}, {3, SHIFT, 25}, {4, SHIFT, 26}, {19, ACCEPT, -1}, },\r
+                       {{-1, REDUCE, 0}, {5, SHIFT, 27}, {6, SHIFT, 28}, },\r
+                       {{-1, REDUCE, 3}, },\r
+                       {{-1, REDUCE, 6}, },\r
+                       {{-1, REDUCE, 20}, },\r
+                       {{-1, REDUCE, 11}, },\r
+                       {{-1, REDUCE, 7}, },\r
+                       {{-1, REDUCE, 8}, },\r
+                       {{-1, REDUCE, 21}, },\r
+                       {{-1, ERROR, 20}, {3, SHIFT, 25}, {4, SHIFT, 26}, {11, SHIFT, 29}, },\r
+                       {{-1, REDUCE, 13}, },\r
+                       {{-1, REDUCE, 9}, {3, SHIFT, 25}, {4, SHIFT, 26}, },\r
+                       {{-1, ERROR, 23}, {8, SHIFT, 30}, {11, SHIFT, 31}, },\r
+                       {{-1, ERROR, 24}, {14, SHIFT, 32}, },\r
+                       {{-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
+                       {{-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
+                       {{-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
+                       {{-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
+                       {{-1, REDUCE, 22}, },\r
+                       {{-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
+                       {{-1, REDUCE, 14}, },\r
+                       {{-1, REDUCE, 16}, },\r
+                       {{-1, REDUCE, 1}, {5, SHIFT, 27}, {6, SHIFT, 28}, },\r
+                       {{-1, REDUCE, 2}, {5, SHIFT, 27}, {6, SHIFT, 28}, },\r
+                       {{-1, REDUCE, 4}, },\r
+                       {{-1, REDUCE, 5}, },\r
+                       {{-1, REDUCE, 10}, {3, SHIFT, 25}, {4, SHIFT, 26}, },\r
+        };*/\r
+    private static int[][][] gotoTable;\r
+/*      {\r
+                       {{-1, 11}, {4, 20}, {6, 22}, {30, 37}, },\r
+                       {{-1, 12}, {25, 33}, {26, 34}, },\r
+                       {{-1, 13}, {1, 17}, {2, 18}, {27, 35}, {28, 36}, },\r
+                       {{-1, 23}, },\r
+                       {{-1, 14}, },\r
+                       {{-1, 15}, {3, 19}, },\r
+                       {{-1, 16}, },\r
+        };*/\r
+    private static String[] errorMessages;\r
+/*      {\r
+                       "expecting: '+', '-', '&', '(', variable, func, cell, rvi, number, string",\r
+                       "expecting: cell",\r
+                       "expecting: '+', '-', '*', '/', ',', ')', EOF",\r
+                       "expecting: '+', '-', '&', '(', ')', variable, func, cell, rvi, number, string",\r
+                       "expecting: '+', '-', '*', '/', ',', ':', ')', EOF",\r
+                       "expecting: '+', '-', EOF",\r
+                       "expecting: '+', '-', ')'",\r
+                       "expecting: '+', '-', ',', ')'",\r
+                       "expecting: ',', ')'",\r
+        };*/\r
+    private static int[] errors;\r
+/*      {\r
+                       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
+        };*/\r
+\r
+    static \r
+    {\r
+        try\r
+        {\r
+            DataInputStream s = new DataInputStream(\r
+                new BufferedInputStream(\r
+                Parser.class.getResourceAsStream("parser.dat")));\r
+\r
+            // read actionTable\r
+            int length = s.readInt();\r
+            Parser.actionTable = new int[length][][];\r
+            for(int i = 0; i < Parser.actionTable.length; i++)\r
+            {\r
+                length = s.readInt();\r
+                Parser.actionTable[i] = new int[length][3];\r
+                for(int j = 0; j < Parser.actionTable[i].length; j++)\r
+                {\r
+                for(int k = 0; k < 3; k++)\r
+                {\r
+                    Parser.actionTable[i][j][k] = s.readInt();\r
+                }\r
+                }\r
+            }\r
+\r
+            // read gotoTable\r
+            length = s.readInt();\r
+            gotoTable = new int[length][][];\r
+            for(int i = 0; i < gotoTable.length; i++)\r
+            {\r
+                length = s.readInt();\r
+                gotoTable[i] = new int[length][2];\r
+                for(int j = 0; j < gotoTable[i].length; j++)\r
+                {\r
+                for(int k = 0; k < 2; k++)\r
+                {\r
+                    gotoTable[i][j][k] = s.readInt();\r
+                }\r
+                }\r
+            }\r
+\r
+            // read errorMessages\r
+            length = s.readInt();\r
+            errorMessages = new String[length];\r
+            for(int i = 0; i < errorMessages.length; i++)\r
+            {\r
+                length = s.readInt();\r
+                StringBuffer buffer = new StringBuffer();\r
+\r
+                for(int j = 0; j < length; j++)\r
+                {\r
+                buffer.append(s.readChar());\r
+                }\r
+                errorMessages[i] = buffer.toString();\r
+            }\r
+\r
+            // read errors\r
+            length = s.readInt();\r
+            errors = new int[length];\r
+            for(int i = 0; i < errors.length; i++)\r
+            {\r
+                errors[i] = s.readInt();\r
+            }\r
+\r
+            s.close();\r
+        }\r
+        catch(Exception e)\r
+        {\r
+            throw new RuntimeException("The file \"parser.dat\" is either missing or corrupted.");\r
+        }\r
+    }\r
+}\r