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