--- /dev/null
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
+ * in Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ * VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+/* This file was generated by SableCC (http://www.sablecc.org/). */\r
+\r
+package org.simantics.spreadsheet.common.expression.parser;\r
+\r
+import org.simantics.spreadsheet.common.expression.lexer.*;\r
+import org.simantics.spreadsheet.common.expression.node.*;\r
+import org.simantics.spreadsheet.common.expression.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 AAfunctionprimary1Primary */\r
+ {\r
+ ArrayList list = new12();\r
+ push(goTo(4), list, false);\r
+ }\r
+ break;\r
+ case 13: /* reduce AAfunctionprimary2Primary */\r
+ {\r
+ ArrayList list = new13();\r
+ push(goTo(4), list, false);\r
+ }\r
+ break;\r
+ case 14: /* reduce ASingleRange */\r
+ {\r
+ ArrayList list = new14();\r
+ push(goTo(5), list, false);\r
+ }\r
+ break;\r
+ case 15: /* reduce AMultiRange */\r
+ {\r
+ ArrayList list = new15();\r
+ push(goTo(5), list, false);\r
+ }\r
+ break;\r
+ case 16: /* reduce AStringValue */\r
+ {\r
+ ArrayList list = new16();\r
+ push(goTo(6), list, false);\r
+ }\r
+ break;\r
+ case 17: /* reduce AConstantValue */\r
+ {\r
+ ArrayList list = new17();\r
+ push(goTo(6), list, false);\r
+ }\r
+ break;\r
+ case 18: /* reduce ARangeValue */\r
+ {\r
+ ArrayList list = new18();\r
+ push(goTo(6), list, false);\r
+ }\r
+ break;\r
+ case 19: /* reduce AAddressValue */\r
+ {\r
+ ArrayList list = new19();\r
+ push(goTo(6), list, false);\r
+ }\r
+ break;\r
+ case 20: /* reduce AExprValue */\r
+ {\r
+ ArrayList list = new20();\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 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 new13() /* 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 new14() /* 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 new15() /* 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 new16() /* 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 new17() /* 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 new18() /* 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 new19() /* 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 new20() /* 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}, },\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}, },\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}, },\r
+ {{-1, ERROR, 3}, {13, SHIFT, 6}, },\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}, },\r
+ {{-1, ERROR, 5}, {3, SHIFT, 1}, {4, SHIFT, 2}, {7, SHIFT, 3}, {10, SHIFT, 4}, {11, SHIFT, 19}, {12, SHIFT, 5}, {13, SHIFT, 6}, {14, SHIFT, 7}, {15, SHIFT, 8}, },\r
+ {{-1, REDUCE, 14}, {9, SHIFT, 22}, },\r
+ {{-1, REDUCE, 17}, },\r
+ {{-1, REDUCE, 16}, },\r
+ {{-1, ERROR, 9}, {3, SHIFT, 23}, {4, SHIFT, 24}, {17, ACCEPT, -1}, },\r
+ {{-1, REDUCE, 0}, {5, SHIFT, 25}, {6, SHIFT, 26}, },\r
+ {{-1, REDUCE, 3}, },\r
+ {{-1, REDUCE, 6}, },\r
+ {{-1, REDUCE, 18}, },\r
+ {{-1, REDUCE, 11}, },\r
+ {{-1, REDUCE, 7}, },\r
+ {{-1, REDUCE, 8}, },\r
+ {{-1, REDUCE, 19}, },\r
+ {{-1, ERROR, 18}, {3, SHIFT, 23}, {4, SHIFT, 24}, {11, SHIFT, 27}, },\r
+ {{-1, REDUCE, 12}, },\r
+ {{-1, REDUCE, 9}, {3, SHIFT, 23}, {4, SHIFT, 24}, },\r
+ {{-1, ERROR, 21}, {8, SHIFT, 28}, {11, SHIFT, 29}, },\r
+ {{-1, ERROR, 22}, {13, SHIFT, 30}, },\r
+ {{-1, ERROR, 23}, {3, SHIFT, 1}, {4, SHIFT, 2}, {7, SHIFT, 3}, {10, SHIFT, 4}, {12, SHIFT, 5}, {13, SHIFT, 6}, {14, SHIFT, 7}, {15, SHIFT, 8}, },\r
+ {{-1, ERROR, 24}, {3, SHIFT, 1}, {4, SHIFT, 2}, {7, SHIFT, 3}, {10, SHIFT, 4}, {12, SHIFT, 5}, {13, SHIFT, 6}, {14, SHIFT, 7}, {15, SHIFT, 8}, },\r
+ {{-1, ERROR, 25}, {3, SHIFT, 1}, {4, SHIFT, 2}, {7, SHIFT, 3}, {10, SHIFT, 4}, {12, SHIFT, 5}, {13, SHIFT, 6}, {14, SHIFT, 7}, {15, SHIFT, 8}, },\r
+ {{-1, ERROR, 26}, {3, SHIFT, 1}, {4, SHIFT, 2}, {7, SHIFT, 3}, {10, SHIFT, 4}, {12, SHIFT, 5}, {13, SHIFT, 6}, {14, SHIFT, 7}, {15, SHIFT, 8}, },\r
+ {{-1, REDUCE, 20}, },\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}, },\r
+ {{-1, REDUCE, 13}, },\r
+ {{-1, REDUCE, 15}, },\r
+ {{-1, REDUCE, 1}, {5, SHIFT, 25}, {6, SHIFT, 26}, },\r
+ {{-1, REDUCE, 2}, {5, SHIFT, 25}, {6, SHIFT, 26}, },\r
+ {{-1, REDUCE, 4}, },\r
+ {{-1, REDUCE, 5}, },\r
+ {{-1, REDUCE, 10}, {3, SHIFT, 23}, {4, SHIFT, 24}, },\r
+ };*/\r
+ private static int[][][] gotoTable;\r
+/* {\r
+ {{-1, 9}, {4, 18}, {5, 20}, {28, 35}, },\r
+ {{-1, 10}, {23, 31}, {24, 32}, },\r
+ {{-1, 11}, {1, 15}, {2, 16}, {25, 33}, {26, 34}, },\r
+ {{-1, 21}, },\r
+ {{-1, 12}, },\r
+ {{-1, 13}, {3, 17}, },\r
+ {{-1, 14}, },\r
+ };*/\r
+ private static String[] errorMessages;\r
+/* {\r
+ "expecting: '+', '-', '&', '(', func, cell, number, string",\r
+ "expecting: cell",\r
+ "expecting: '+', '-', '&', '(', ')', func, cell, number, string",\r
+ "expecting: '+', '-', '*', '/', ',', ':', ')', EOF",\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, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 6, 4, 7, 8, 1, 0, 0, 0, 0, 4, 0, 4, 4, 4, 4, 4, 4, 7, \r
+ };*/\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