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