--- /dev/null
+package org.simantics.scl.compiler.internal.parsing.parser;\r
+\r
+import java.io.DataInputStream;\r
+import java.io.IOException;\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.Collections;\r
+import org.simantics.scl.compiler.internal.parsing.exceptions.SCLSyntaxErrorException;\r
+\r
+import org.simantics.scl.compiler.internal.parsing.Token;\r
+\r
+public abstract class SCLParser { \r
+ public static final boolean TRACE = false;\r
+\r
+ private static final int INITIAL_CAPACITY = 16;\r
+ private static final int STATE_COUNT = 323;\r
+ private static final int TERMINAL_COUNT = 79;\r
+ private static final int NONTERMINAL_COUNT = 49;\r
+ private static final int PRODUCT_COUNT = 126;\r
+ \r
+ private static final int[] ACTION_ROW_ID = new int[STATE_COUNT];\r
+ private static final int[] ACTION_COLUMN_ID = new int[TERMINAL_COUNT];\r
+ private static final short[] ACTION_TABLE = new short[5508];\r
+ private static final int[] ERROR_TABLE = new int[798];\r
+ private static final int[] GOTO_ROW_ID = new int[STATE_COUNT];\r
+ private static final int[] GOTO_COLUMN_ID = new int[NONTERMINAL_COUNT];\r
+ private static final short[] GOTO_TABLE = new short[1620];\r
+ private static final int[] PRODUCT_LHS = new int[PRODUCT_COUNT];\r
+\r
+ private static final short STATE_MASK = (short)0x0fff;\r
+ private static final short REDUCE_MASK = (short)0x8000;\r
+ private static final short POP_MASK = (short)0x4000;\r
+ private static final short PUSH_MASK = (short)0x2000;\r
+ private static final short ERROR_ACTION = (short)0xffff;\r
+ private static final short ACCEPT_ACTION = (short)0xfffe;\r
+ \r
+ public static final String[] TERMINAL_NAMES = new String[] {\r
+ "SEMICOLON",\r
+ "LBRACE",\r
+ "RBRACE",\r
+ "COMMA",\r
+ "HASTYPE",\r
+ "DATA",\r
+ "ID",\r
+ "EQUALS",\r
+ "BAR",\r
+ "TYPE",\r
+ "CLASS",\r
+ "WHERE",\r
+ "INSTANCE",\r
+ "DERIVING",\r
+ "BEGIN_STRING",\r
+ "END_STRING",\r
+ "ANNOTATION_ID",\r
+ "INFIX",\r
+ "INFIXL",\r
+ "INFIXR",\r
+ "INTEGER",\r
+ "IMPORTJAVA",\r
+ "EFFECT",\r
+ "RULE",\r
+ "ABSTRACT_RULE",\r
+ "EXTENDS",\r
+ "MAPPING_RELATION",\r
+ "FOLLOWS",\r
+ "IMPORT",\r
+ "INCLUDE",\r
+ "AS",\r
+ "LPAREN",\r
+ "RPAREN",\r
+ "HIDING",\r
+ "ARROW",\r
+ "COLON",\r
+ "WITH",\r
+ "MINUS",\r
+ "SYMBOL",\r
+ "LESS",\r
+ "GREATER",\r
+ "SEPARATED_DOT",\r
+ "ESCAPED_ID",\r
+ "LAMBDA",\r
+ "LET",\r
+ "IF",\r
+ "MATCH",\r
+ "DO",\r
+ "MDO",\r
+ "ENFORCE",\r
+ "BLANK",\r
+ "FLOAT",\r
+ "LBRACKET",\r
+ "ESCAPED_SYMBOL",\r
+ "CHAR",\r
+ "WHEN",\r
+ "ATTACHED_HASH",\r
+ "SELECT",\r
+ "SELECT_FIRST",\r
+ "SELECT_DISTINCT",\r
+ "TRANSFORMATION",\r
+ "EQ",\r
+ "ATTACHED_DOT",\r
+ "IN",\r
+ "THEN",\r
+ "ELSE",\r
+ "RBRACKET",\r
+ "DOTDOT",\r
+ "AT",\r
+ "SUSPEND_STRING",\r
+ "CONTINUE_STRING",\r
+ "BINDS",\r
+ "BY",\r
+ "QUERY_OP",\r
+ "IMPLIES",\r
+ "FORALL",\r
+ "COMMENT",\r
+ "EOL",\r
+ "EOF"\r
+ };\r
+\r
+ public static final String[] NONTERMINAL_NAMES = new String[] {\r
+ "module",\r
+ "commands",\r
+ "import",\r
+ "type",\r
+ "exp",\r
+ "equationBlock",\r
+ "declaration",\r
+ "command",\r
+ "statement",\r
+ "declarations",\r
+ "var",\r
+ "bexp",\r
+ "rhs",\r
+ "constructor",\r
+ "context",\r
+ "fundeps",\r
+ "atype",\r
+ "aexp",\r
+ "ruleDeclarations",\r
+ "importSpec",\r
+ "importItem",\r
+ "fieldDeclaration",\r
+ "statements",\r
+ "guardedExpEq",\r
+ "fundep",\r
+ "ruleDeclaration",\r
+ "query",\r
+ "queryBlock",\r
+ "lexp",\r
+ "symbol",\r
+ "faexp",\r
+ "accessor",\r
+ "case",\r
+ "stringLiteral",\r
+ "symbolWithoutMinus",\r
+ "listQualifier",\r
+ "field",\r
+ "caseRhs",\r
+ "guardedExpArrow",\r
+ "equation",\r
+ "etype",\r
+ "btype",\r
+ "dummy",\r
+ "init$6",\r
+ "init$5",\r
+ "init$4",\r
+ "init$3",\r
+ "init$2",\r
+ "init$1"\r
+ };\r
+ \r
+ static {\r
+ try {\r
+ DataInputStream input = new DataInputStream(SCLParser.class.getResourceAsStream("SCLParser.dat"));\r
+ for(int i=0;i<ACTION_ROW_ID.length;++i)\r
+ ACTION_ROW_ID[i] = input.readInt();\r
+ for(int i=0;i<ACTION_COLUMN_ID.length;++i)\r
+ ACTION_COLUMN_ID[i] = input.readInt(); \r
+ for(int i=0;i<ACTION_TABLE.length;++i)\r
+ ACTION_TABLE[i] = input.readShort();\r
+ for(int i=0;i<ERROR_TABLE.length;++i)\r
+ ERROR_TABLE[i] = input.readInt();\r
+ for(int i=0;i<GOTO_ROW_ID.length;++i)\r
+ GOTO_ROW_ID[i] = input.readInt();\r
+ for(int i=0;i<GOTO_COLUMN_ID.length;++i)\r
+ GOTO_COLUMN_ID[i] = input.readInt(); \r
+ for(int i=0;i<GOTO_TABLE.length;++i)\r
+ GOTO_TABLE[i] = input.readShort();\r
+ for(int i=0;i<PRODUCT_LHS.length;++i)\r
+ PRODUCT_LHS[i] = input.readInt();\r
+ input.close();\r
+ } catch(IOException e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ \r
+ private static short getAction(int state, int symbol) {\r
+ int id = TERMINAL_COUNT*state + symbol;\r
+ if( ((ERROR_TABLE[id>>5] >> (id&31))&1) != 0 )\r
+ return ERROR_ACTION;\r
+ return ACTION_TABLE[ACTION_ROW_ID[state] + ACTION_COLUMN_ID[symbol]];\r
+ }\r
+ \r
+ private static short getGoto(int state, int symbol) {\r
+ return GOTO_TABLE[GOTO_ROW_ID[state] + GOTO_COLUMN_ID[symbol]];\r
+ }\r
+ \r
+ protected abstract Token nextToken();\r
+ \r
+ private Object[] symbolStack = new Object[INITIAL_CAPACITY];\r
+ private int symbolStackLength = 0;\r
+ \r
+ private int[] stateStack = new int[INITIAL_CAPACITY];\r
+ private int[] symbolStackPositionStack = new int[INITIAL_CAPACITY];\r
+ private int stateStackLength = 0;\r
+ \r
+ // For reduce\r
+ private int reductionLength;\r
+ \r
+ protected int length() {\r
+ return reductionLength;\r
+ }\r
+ \r
+ protected Object get(int i) {\r
+ if(i < 0 || i >= reductionLength)\r
+ throw new IndexOutOfBoundsException();\r
+ return symbolStack[symbolStackLength+i];\r
+ }\r
+ \r
+ private String parseErrorDescription(int state, Token token, int tokenId) {\r
+ StringBuilder b = new StringBuilder();\r
+ b.append("Unexpected token '").append(token)\r
+ .append("' (").append(TERMINAL_NAMES[tokenId])\r
+ .append("). Expected one of ");\r
+ ArrayList<String> possibleTerminals = new ArrayList<String>();\r
+ for(int i=0;i<TERMINAL_COUNT;++i)\r
+ if(getAction(state, i) != ERROR_ACTION)\r
+ possibleTerminals.add(TERMINAL_NAMES[i]);\r
+ Collections.sort(possibleTerminals);\r
+ for(int i=0;i<possibleTerminals.size();++i) {\r
+ if(i > 0)\r
+ b.append(", ");\r
+ b.append(possibleTerminals.get(i));\r
+ }\r
+ b.append('.');\r
+ return b.toString();\r
+ }\r
+ \r
+ protected abstract RuntimeException syntaxError(Token token, String description);\r
+ \r
+ private static String describeAction(int action) {\r
+ if(action == ERROR_ACTION)\r
+ return "ERROR";\r
+ if(action == ACCEPT_ACTION)\r
+ return "ACCEPT";\r
+ StringBuilder b = new StringBuilder();\r
+ if((action & REDUCE_MASK) != 0) {\r
+ action ^= REDUCE_MASK;\r
+ b.append("REDUCE");\r
+ }\r
+ else\r
+ b.append("SHIFT");\r
+ if((action & POP_MASK) != 0) {\r
+ action ^= POP_MASK;\r
+ b.append(" POP");\r
+ }\r
+ if((action & PUSH_MASK) != 0) {\r
+ action ^= PUSH_MASK;\r
+ b.append(" PUSH");\r
+ }\r
+ b.append(' ').append(action);\r
+ return b.toString();\r
+ }\r
+ \r
+ private Object parse(int state) {\r
+ while(true) {\r
+ Token token = nextToken();\r
+ int tokenId = token.id;\r
+ while(true) {\r
+ short action = getAction(state, tokenId);\r
+ if(TRACE) {\r
+ System.out.println("state=" + state + ", tokenId=" + TERMINAL_NAMES[tokenId] + \r
+ ", action=" + describeAction(action));\r
+ System.out.print(" ");\r
+ for(int i=symbolStackLength-1,j=stateStackLength-1;i>=0;--i) { \r
+ Object s = symbolStack[i];\r
+ if(s instanceof Token)\r
+ System.out.print(" " + TERMINAL_NAMES[((Token)s).id]);\r
+ else\r
+ System.out.print(" " + s.getClass().getSimpleName()); \r
+ while(j>=0 && symbolStackPositionStack[j]==i)\r
+ System.out.print(" (" + stateStack[j--] + ")");\r
+ }\r
+ System.out.println();\r
+ }\r
+ //System.out.println(STATE_DESCRIPTIONS[state]);\r
+ if((action & REDUCE_MASK) != 0) {\r
+ if(action == ACCEPT_ACTION)\r
+ return symbolStack[symbolStackLength-1];\r
+ if(action == ERROR_ACTION)\r
+ throw syntaxError(token, parseErrorDescription(state, token, tokenId));\r
+ stateStackLength -= (action >>> 13)&3;\r
+ action &= STATE_MASK;\r
+ \r
+ int reductionBegin = symbolStackPositionStack[--stateStackLength];\r
+ \r
+ reductionLength = symbolStackLength-reductionBegin;\r
+ symbolStackLength = reductionBegin;\r
+ \r
+ if(symbolStackLength == symbolStack.length)\r
+ symbolStack = Arrays.copyOf(symbolStack, symbolStackLength*2);\r
+ Object symbol = reduce(action);\r
+ postReduce(symbol);\r
+ symbolStack[symbolStackLength] = symbol;\r
+ \r
+ state = stateStack[stateStackLength];\r
+ action = getGoto(state, PRODUCT_LHS[action]);\r
+ // Pop state\r
+ if((action & POP_MASK) != 0) {\r
+ --stateStackLength;\r
+ }\r
+ // Push state\r
+ if((action & PUSH_MASK) != 0) {\r
+ if(stateStackLength == stateStack.length) {\r
+ stateStack = Arrays.copyOf(stateStack, stateStackLength*2);\r
+ symbolStackPositionStack = Arrays.copyOf(symbolStackPositionStack, stateStackLength*2);\r
+ }\r
+ symbolStackPositionStack[stateStackLength] = symbolStackLength;\r
+ stateStack[stateStackLength++] = state;\r
+ }\r
+ state = action & STATE_MASK;\r
+ ++symbolStackLength;\r
+ }\r
+ else {\r
+ // Pop state\r
+ if((action & POP_MASK) != 0) {\r
+ --stateStackLength;\r
+ }\r
+ // Push state\r
+ if((action & PUSH_MASK) != 0) {\r
+ if(stateStackLength == stateStack.length) {\r
+ stateStack = Arrays.copyOf(stateStack, stateStackLength*2);\r
+ symbolStackPositionStack = Arrays.copyOf(symbolStackPositionStack, stateStackLength*2);\r
+ }\r
+ symbolStackPositionStack[stateStackLength] = symbolStackLength;\r
+ stateStack[stateStackLength++] = state;\r
+ }\r
+ \r
+ // New state\r
+ state = action & STATE_MASK;\r
+ \r
+ // Push symbol\r
+ if(symbolStackLength == symbolStack.length)\r
+ symbolStack = Arrays.copyOf(symbolStack, symbolStackLength*2);\r
+ symbolStack[symbolStackLength++] = token;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ \r
+ public Object parseModule() {\r
+ return parse(0);\r
+ }\r
+ public Object parseCommands() {\r
+ return parse(308);\r
+ }\r
+ public Object parseImport() {\r
+ return parse(315);\r
+ }\r
+ public Object parseType() {\r
+ return parse(317);\r
+ }\r
+ public Object parseExp() {\r
+ return parse(319);\r
+ }\r
+ public Object parseEquationBlock() {\r
+ return parse(321);\r
+ }\r
+\r
+\r
+ protected Object reduce(int productionId) {\r
+ try {\r
+ switch(productionId) {\r
+ case 0:\r
+ return reduceModule();\r
+ case 1:\r
+ return reduceOneCommand();\r
+ case 2:\r
+ return reduceManyCommands();\r
+ case 3:\r
+ return reduceImport();\r
+ case 4:\r
+ return reduceArrow();\r
+ case 5:\r
+ return reduceLocalTypeAnnotation();\r
+ case 6:\r
+ return reduceEntityTypeAnnotation();\r
+ case 7:\r
+ return reduceEquationBlock();\r
+ case 8:\r
+ return reduceTypeAnnotation();\r
+ case 9:\r
+ return reduceValueDefinition();\r
+ case 10:\r
+ return reduceDataDefinition();\r
+ case 11:\r
+ return reduceTypeDefinition();\r
+ case 12:\r
+ return reduceClassDefinition();\r
+ case 13:\r
+ return reduceInstanceDefinition();\r
+ case 14:\r
+ return reduceDerivingInstanceDefinition();\r
+ case 15:\r
+ return reduceDocumentationString();\r
+ case 16:\r
+ return reduceAnnotation();\r
+ case 17:\r
+ return reducePrecedenceDefinition();\r
+ case 18:\r
+ return reduceJustImport();\r
+ case 19:\r
+ return reduceImportJava();\r
+ case 20:\r
+ return reduceEffectDefinition();\r
+ case 21:\r
+ return reduceRuleDefinition();\r
+ case 22:\r
+ return reduceMappingRelationDefinition();\r
+ case 23:\r
+ return reduceRelationDefinition();\r
+ case 24:\r
+ return reduceStatementCommand();\r
+ case 25:\r
+ return reduceImportCommand();\r
+ case 26:\r
+ return reduceGuardStatement();\r
+ case 27:\r
+ return reduceLetStatement();\r
+ case 28:\r
+ return reduceBindStatement();\r
+ case 29:\r
+ return reduceRuleStatement();\r
+ case 30:\r
+ return reduceDeclarations();\r
+ case 31:\r
+ return reduceVarId();\r
+ case 32:\r
+ return reduceEscapedSymbol();\r
+ case 33:\r
+ return reduceTupleConstructor();\r
+ case 34:\r
+ return reduceBinary();\r
+ case 35:\r
+ return reduceSimpleRhs();\r
+ case 36:\r
+ return reduceGuardedRhs();\r
+ case 37:\r
+ return reduceConstructor();\r
+ case 38:\r
+ return reduceRecordConstructor();\r
+ case 39:\r
+ return reduceContext();\r
+ case 40:\r
+ return reduceFundeps();\r
+ case 41:\r
+ return reduceTypeVar();\r
+ case 42:\r
+ return reduceTupleType();\r
+ case 43:\r
+ return reduceListType();\r
+ case 44:\r
+ return reduceListTypeConstructor();\r
+ case 45:\r
+ return reduceTupleTypeConstructor();\r
+ case 46:\r
+ return reduceLambda();\r
+ case 47:\r
+ return reduceLet();\r
+ case 48:\r
+ return reduceIf();\r
+ case 49:\r
+ return reduceMatch();\r
+ case 50:\r
+ return reduceDo();\r
+ case 51:\r
+ return reduceSelect();\r
+ case 52:\r
+ return reduceEnforce();\r
+ case 53:\r
+ return reduceWhen();\r
+ case 54:\r
+ return reduceVar();\r
+ case 55:\r
+ return reduceHashedId();\r
+ case 56:\r
+ return reduceBlank();\r
+ case 57:\r
+ return reduceInteger();\r
+ case 58:\r
+ return reduceFloat();\r
+ case 59:\r
+ return reduceString();\r
+ case 60:\r
+ return reduceChar();\r
+ case 61:\r
+ return reduceTuple();\r
+ case 62:\r
+ return reduceRightSection();\r
+ case 63:\r
+ return reduceLeftSection();\r
+ case 64:\r
+ return reduceListLiteral();\r
+ case 65:\r
+ return reduceRange();\r
+ case 66:\r
+ return reduceListComprehension();\r
+ case 67:\r
+ return reduceAs();\r
+ case 68:\r
+ return reduceRecord();\r
+ case 69:\r
+ return reduceTransformation();\r
+ case 70:\r
+ return reduceEq();\r
+ case 71:\r
+ return reduceRuleDeclarations();\r
+ case 72:\r
+ return reduceImportShowing();\r
+ case 73:\r
+ return reduceImportHiding();\r
+ case 74:\r
+ return reduceImportValueItem();\r
+ case 75:\r
+ return reduceFieldDescription();\r
+ case 76:\r
+ return reduceStatements();\r
+ case 77:\r
+ return reduceGuardedExpEq();\r
+ case 78:\r
+ return reduceFundep();\r
+ case 79:\r
+ return reduceQueryRuleDeclaration();\r
+ case 80:\r
+ return reduceAnnotation();\r
+ case 81:\r
+ return reduceGuardQuery();\r
+ case 82:\r
+ return reduceEqualsQuery();\r
+ case 83:\r
+ return reduceBindQuery();\r
+ case 84:\r
+ return reduceCompositeQuery();\r
+ case 85:\r
+ return reduceQueryBlock();\r
+ case 86:\r
+ return reduceApply();\r
+ case 87:\r
+ return reduceSymbol();\r
+ case 88:\r
+ return reduceEscapedId();\r
+ case 89:\r
+ return reduceMinus();\r
+ case 90:\r
+ return reduceLess();\r
+ case 91:\r
+ return reduceGreater();\r
+ case 92:\r
+ return reduceDot();\r
+ case 93:\r
+ return reduceFieldAccess();\r
+ case 94:\r
+ return reduceIdAccessor();\r
+ case 95:\r
+ return reduceStringAccessor();\r
+ case 96:\r
+ return reduceExpAccessor();\r
+ case 97:\r
+ return reduceCase();\r
+ case 98:\r
+ return reduceStringLiteral();\r
+ case 99:\r
+ return reduceSymbol();\r
+ case 100:\r
+ return reduceEscapedId();\r
+ case 101:\r
+ return reduceLess();\r
+ case 102:\r
+ return reduceGreater();\r
+ case 103:\r
+ return reduceDot();\r
+ case 104:\r
+ return reduceGuardQualifier();\r
+ case 105:\r
+ return reduceLetQualifier();\r
+ case 106:\r
+ return reduceBindQualifier();\r
+ case 107:\r
+ return reduceThenQualifier();\r
+ case 108:\r
+ return reduceField();\r
+ case 109:\r
+ return reduceFieldShorthand();\r
+ case 110:\r
+ return reduceSimpleCaseRhs();\r
+ case 111:\r
+ return reduceGuardedCaseRhs();\r
+ case 112:\r
+ return reduceGuardedExpArrow();\r
+ case 113:\r
+ return reduceGuardEquation();\r
+ case 114:\r
+ return reduceBasicEquation();\r
+ case 115:\r
+ return reduceEffect();\r
+ case 116:\r
+ return reduceJustEtype();\r
+ case 117:\r
+ return reduceForAll();\r
+ case 118:\r
+ return reduceApplyType();\r
+ case 119:\r
+ return reduceDummy1();\r
+\r
+ default:\r
+ throw new RuntimeException("Internal parser error.");\r
+ }\r
+ } catch(SCLSyntaxErrorException e) {\r
+ StringBuilder b = new StringBuilder();\r
+ b.append("Failed to reduce");\r
+ for(int i=0;i<length();++i) {\r
+ Object obj = get(i);\r
+ b.append("\n (").append(i).append(") \"").append(obj).append('\"');\r
+ if(obj instanceof Token)\r
+ b.append(" (").append(TERMINAL_NAMES[((Token)obj).id]).append(")");\r
+ else\r
+ b.append(" [").append(obj.getClass().getSimpleName()).append("]");\r
+ }\r
+ throw new RuntimeException(b.toString(), e);\r
+ } \r
+ }\r
+\r
+ /**\r
+ * module ::= (declaration (SEMICOLON declaration)*)?\r
+ */\r
+ protected abstract Object reduceModule();\r
+ /**\r
+ * commands ::= command?\r
+ */\r
+ protected abstract Object reduceOneCommand();\r
+ /**\r
+ * commands ::= commands SEMICOLON command\r
+ */\r
+ protected abstract Object reduceManyCommands();\r
+ /**\r
+ * import ::= (IMPORT | INCLUDE) BEGIN_STRING END_STRING (AS ID)? importSpec?\r
+ */\r
+ protected abstract Object reduceImport();\r
+ /**\r
+ * type ::= (etype (ARROW | IMPLIES))* etype\r
+ */\r
+ protected abstract Object reduceArrow();\r
+ /**\r
+ * exp ::= bexp (HASTYPE type)?\r
+ */\r
+ protected abstract Object reduceLocalTypeAnnotation();\r
+ /**\r
+ * exp ::= bexp COLON ID (queryBlock | WITH queryBlock?)?\r
+ */\r
+ protected abstract Object reduceEntityTypeAnnotation();\r
+ /**\r
+ * equationBlock ::= (equation (SEMICOLON equation)*)?\r
+ */\r
+ protected abstract Object reduceEquationBlock();\r
+ /**\r
+ * declaration ::= (var COMMA)* var HASTYPE type\r
+ */\r
+ protected abstract Object reduceTypeAnnotation();\r
+ /**\r
+ * declaration ::= bexp rhs\r
+ */\r
+ protected abstract Object reduceValueDefinition();\r
+ /**\r
+ * declaration ::= DATA ID ID* (EQUALS (constructor BAR)* constructor)?\r
+ */\r
+ protected abstract Object reduceDataDefinition();\r
+ /**\r
+ * declaration ::= TYPE ID ID* EQUALS type\r
+ */\r
+ protected abstract Object reduceTypeDefinition();\r
+ /**\r
+ * declaration ::= CLASS context? ID ID* (BAR fundeps | (BAR fundeps)? WHERE declarations)?\r
+ */\r
+ protected abstract Object reduceClassDefinition();\r
+ /**\r
+ * declaration ::= INSTANCE context? ID atype atype* (WHERE declarations)?\r
+ */\r
+ protected abstract Object reduceInstanceDefinition();\r
+ /**\r
+ * declaration ::= DERIVING INSTANCE context? ID atype atype*\r
+ */\r
+ protected abstract Object reduceDerivingInstanceDefinition();\r
+ /**\r
+ * declaration ::= BEGIN_STRING END_STRING\r
+ */\r
+ protected abstract Object reduceDocumentationString();\r
+ /**\r
+ * declaration ::= ANNOTATION_ID aexp*\r
+ */\r
+ protected abstract Object reduceAnnotation();\r
+ /**\r
+ * declaration ::= (INFIX | INFIXL | INFIXR) INTEGER (var COMMA)* var\r
+ */\r
+ protected abstract Object reducePrecedenceDefinition();\r
+ /**\r
+ * declaration ::= import\r
+ */\r
+ protected abstract Object reduceJustImport();\r
+ /**\r
+ * declaration ::= IMPORTJAVA BEGIN_STRING END_STRING WHERE declarations\r
+ */\r
+ protected abstract Object reduceImportJava();\r
+ /**\r
+ * declaration ::= EFFECT ID BEGIN_STRING END_STRING BEGIN_STRING END_STRING\r
+ */\r
+ protected abstract Object reduceEffectDefinition();\r
+ /**\r
+ * declaration ::= (RULE | ABSTRACT_RULE) ID (EXTENDS (ID COMMA)* ID)? WHERE ruleDeclarations\r
+ */\r
+ protected abstract Object reduceRuleDefinition();\r
+ /**\r
+ * declaration ::= MAPPING_RELATION ID atype*\r
+ */\r
+ protected abstract Object reduceMappingRelationDefinition();\r
+ /**\r
+ * declaration ::= bexp FOLLOWS ruleDeclarations\r
+ */\r
+ protected abstract Object reduceRelationDefinition();\r
+ /**\r
+ * command ::= statement\r
+ */\r
+ protected abstract Object reduceStatementCommand();\r
+ /**\r
+ * command ::= import\r
+ */\r
+ protected abstract Object reduceImportCommand();\r
+ /**\r
+ * statement ::= exp\r
+ */\r
+ protected abstract Object reduceGuardStatement();\r
+ /**\r
+ * statement ::= exp rhs\r
+ */\r
+ protected abstract Object reduceLetStatement();\r
+ /**\r
+ * statement ::= exp BINDS exp\r
+ */\r
+ protected abstract Object reduceBindStatement();\r
+ /**\r
+ * statement ::= exp FOLLOWS queryBlock\r
+ */\r
+ protected abstract Object reduceRuleStatement();\r
+ /**\r
+ * declarations ::= LBRACE (declaration (SEMICOLON (declaration SEMICOLON)* declaration)?)? RBRACE\r
+ */\r
+ protected abstract Object reduceDeclarations();\r
+ /**\r
+ * var ::= ID\r
+ */\r
+ protected abstract Object reduceVarId();\r
+ /**\r
+ * var ::= ESCAPED_SYMBOL\r
+ */\r
+ protected abstract Object reduceEscapedSymbol();\r
+ /**\r
+ * var ::= LPAREN COMMA COMMA* RPAREN\r
+ */\r
+ protected abstract Object reduceTupleConstructor();\r
+ /**\r
+ * bexp ::= MINUS? lexp (symbol lexp)*\r
+ */\r
+ protected abstract Object reduceBinary();\r
+ /**\r
+ * rhs ::= EQUALS exp (WHERE statements)?\r
+ */\r
+ protected abstract Object reduceSimpleRhs();\r
+ /**\r
+ * rhs ::= guardedExpEq guardedExpEq* (WHERE statements)?\r
+ */\r
+ protected abstract Object reduceGuardedRhs();\r
+ /**\r
+ * constructor ::= (ANNOTATION_ID aexp)* ID atype*\r
+ */\r
+ protected abstract Object reduceConstructor();\r
+ /**\r
+ * constructor ::= (ANNOTATION_ID aexp)* ID LBRACE fieldDeclaration (COMMA fieldDeclaration)* RBRACE\r
+ */\r
+ protected abstract Object reduceRecordConstructor();\r
+ /**\r
+ * context ::= LPAREN type (COMMA type)* RPAREN IMPLIES\r
+ */\r
+ protected abstract Object reduceContext();\r
+ /**\r
+ * fundeps ::= (fundep COMMA)* fundep\r
+ */\r
+ protected abstract Object reduceFundeps();\r
+ /**\r
+ * atype ::= ID\r
+ */\r
+ protected abstract Object reduceTypeVar();\r
+ /**\r
+ * atype ::= LPAREN (type (COMMA (type COMMA)* type)?)? RPAREN\r
+ */\r
+ protected abstract Object reduceTupleType();\r
+ /**\r
+ * atype ::= LBRACKET type RBRACKET\r
+ */\r
+ protected abstract Object reduceListType();\r
+ /**\r
+ * atype ::= LBRACKET RBRACKET\r
+ */\r
+ protected abstract Object reduceListTypeConstructor();\r
+ /**\r
+ * atype ::= LPAREN COMMA COMMA* RPAREN\r
+ */\r
+ protected abstract Object reduceTupleTypeConstructor();\r
+ /**\r
+ * aexp ::= LAMBDA aexp aexp* ARROW exp\r
+ */\r
+ protected abstract Object reduceLambda();\r
+ /**\r
+ * aexp ::= LET statements IN exp\r
+ */\r
+ protected abstract Object reduceLet();\r
+ /**\r
+ * aexp ::= IF exp THEN exp ELSE exp\r
+ */\r
+ protected abstract Object reduceIf();\r
+ /**\r
+ * aexp ::= MATCH exp WITH LBRACE case (SEMICOLON case)* RBRACE\r
+ */\r
+ protected abstract Object reduceMatch();\r
+ /**\r
+ * aexp ::= (DO | MDO) statements\r
+ */\r
+ protected abstract Object reduceDo();\r
+ /**\r
+ * aexp ::= (SELECT | SELECT_FIRST | SELECT_DISTINCT) exp WHERE queryBlock\r
+ */\r
+ protected abstract Object reduceSelect();\r
+ /**\r
+ * aexp ::= ENFORCE queryBlock\r
+ */\r
+ protected abstract Object reduceEnforce();\r
+ /**\r
+ * aexp ::= WHEN queryBlock SEMICOLON exp\r
+ */\r
+ protected abstract Object reduceWhen();\r
+ /**\r
+ * aexp ::= var\r
+ */\r
+ protected abstract Object reduceVar();\r
+ /**\r
+ * aexp ::= ATTACHED_HASH ID\r
+ */\r
+ protected abstract Object reduceHashedId();\r
+ /**\r
+ * aexp ::= BLANK\r
+ */\r
+ protected abstract Object reduceBlank();\r
+ /**\r
+ * aexp ::= INTEGER\r
+ */\r
+ protected abstract Object reduceInteger();\r
+ /**\r
+ * aexp ::= FLOAT\r
+ */\r
+ protected abstract Object reduceFloat();\r
+ /**\r
+ * aexp ::= stringLiteral\r
+ */\r
+ protected abstract Object reduceString();\r
+ /**\r
+ * aexp ::= CHAR\r
+ */\r
+ protected abstract Object reduceChar();\r
+ /**\r
+ * aexp ::= LPAREN (exp (COMMA (exp COMMA)* exp)?)? RPAREN\r
+ */\r
+ protected abstract Object reduceTuple();\r
+ /**\r
+ * aexp ::= LPAREN symbolWithoutMinus lexp RPAREN\r
+ */\r
+ protected abstract Object reduceRightSection();\r
+ /**\r
+ * aexp ::= LPAREN lexp symbol RPAREN\r
+ */\r
+ protected abstract Object reduceLeftSection();\r
+ /**\r
+ * aexp ::= LBRACKET (exp (COMMA (exp COMMA)* exp)?)? RBRACKET\r
+ */\r
+ protected abstract Object reduceListLiteral();\r
+ /**\r
+ * aexp ::= LBRACKET exp DOTDOT exp RBRACKET\r
+ */\r
+ protected abstract Object reduceRange();\r
+ /**\r
+ * aexp ::= LBRACKET exp BAR listQualifier (COMMA listQualifier)* RBRACKET\r
+ */\r
+ protected abstract Object reduceListComprehension();\r
+ /**\r
+ * aexp ::= ID AT aexp\r
+ */\r
+ protected abstract Object reduceAs();\r
+ /**\r
+ * aexp ::= ID LBRACE (field (COMMA field)*)? RBRACE\r
+ */\r
+ protected abstract Object reduceRecord();\r
+ /**\r
+ * aexp ::= TRANSFORMATION ID WHERE queryBlock\r
+ */\r
+ protected abstract Object reduceTransformation();\r
+ /**\r
+ * aexp ::= EQ LBRACE equationBlock RBRACE\r
+ */\r
+ protected abstract Object reduceEq();\r
+ /**\r
+ * ruleDeclarations ::= LBRACE (ruleDeclaration (SEMICOLON (ruleDeclaration SEMICOLON)* ruleDeclaration)?)? RBRACE\r
+ */\r
+ protected abstract Object reduceRuleDeclarations();\r
+ /**\r
+ * importSpec ::= LPAREN (importItem (COMMA (importItem COMMA)* importItem)?)? RPAREN\r
+ */\r
+ protected abstract Object reduceImportShowing();\r
+ /**\r
+ * importSpec ::= HIDING LPAREN (importItem (COMMA importItem)*)? RPAREN\r
+ */\r
+ protected abstract Object reduceImportHiding();\r
+ /**\r
+ * importItem ::= ID\r
+ */\r
+ protected abstract Object reduceImportValueItem();\r
+ /**\r
+ * fieldDeclaration ::= ID HASTYPE type\r
+ */\r
+ protected abstract Object reduceFieldDescription();\r
+ /**\r
+ * statements ::= LBRACE statement (SEMICOLON statement)* RBRACE\r
+ */\r
+ protected abstract Object reduceStatements();\r
+ /**\r
+ * guardedExpEq ::= BAR exp (COMMA exp)* EQUALS exp\r
+ */\r
+ protected abstract Object reduceGuardedExpEq();\r
+ /**\r
+ * fundep ::= ID ID* ARROW ID\r
+ */\r
+ protected abstract Object reduceFundep();\r
+ /**\r
+ * ruleDeclaration ::= query\r
+ */\r
+ protected abstract Object reduceQueryRuleDeclaration();\r
+ /**\r
+ * query ::= exp\r
+ */\r
+ protected abstract Object reduceGuardQuery();\r
+ /**\r
+ * query ::= exp EQUALS exp\r
+ */\r
+ protected abstract Object reduceEqualsQuery();\r
+ /**\r
+ * query ::= exp BINDS exp\r
+ */\r
+ protected abstract Object reduceBindQuery();\r
+ /**\r
+ * query ::= QUERY_OP queryBlock\r
+ */\r
+ protected abstract Object reduceCompositeQuery();\r
+ /**\r
+ * queryBlock ::= LBRACE (query (SEMICOLON (query SEMICOLON)* query)?)? RBRACE\r
+ */\r
+ protected abstract Object reduceQueryBlock();\r
+ /**\r
+ * lexp ::= faexp faexp*\r
+ */\r
+ protected abstract Object reduceApply();\r
+ /**\r
+ * symbol ::= SYMBOL\r
+ */\r
+ protected abstract Object reduceSymbol();\r
+ /**\r
+ * symbol ::= ESCAPED_ID\r
+ */\r
+ protected abstract Object reduceEscapedId();\r
+ /**\r
+ * symbol ::= MINUS\r
+ */\r
+ protected abstract Object reduceMinus();\r
+ /**\r
+ * symbol ::= LESS\r
+ */\r
+ protected abstract Object reduceLess();\r
+ /**\r
+ * symbol ::= GREATER\r
+ */\r
+ protected abstract Object reduceGreater();\r
+ /**\r
+ * symbol ::= SEPARATED_DOT\r
+ */\r
+ protected abstract Object reduceDot();\r
+ /**\r
+ * faexp ::= aexp ((ATTACHED_HASH | ATTACHED_DOT) accessor)*\r
+ */\r
+ protected abstract Object reduceFieldAccess();\r
+ /**\r
+ * accessor ::= ID\r
+ */\r
+ protected abstract Object reduceIdAccessor();\r
+ /**\r
+ * accessor ::= BEGIN_STRING END_STRING\r
+ */\r
+ protected abstract Object reduceStringAccessor();\r
+ /**\r
+ * accessor ::= LPAREN exp RPAREN\r
+ */\r
+ protected abstract Object reduceExpAccessor();\r
+ /**\r
+ * case ::= exp caseRhs\r
+ */\r
+ protected abstract Object reduceCase();\r
+ /**\r
+ * stringLiteral ::= BEGIN_STRING (SUSPEND_STRING exp CONTINUE_STRING)* END_STRING\r
+ */\r
+ protected abstract Object reduceStringLiteral();\r
+ /**\r
+ * listQualifier ::= exp\r
+ */\r
+ protected abstract Object reduceGuardQualifier();\r
+ /**\r
+ * listQualifier ::= exp EQUALS exp\r
+ */\r
+ protected abstract Object reduceLetQualifier();\r
+ /**\r
+ * listQualifier ::= exp BINDS exp\r
+ */\r
+ protected abstract Object reduceBindQualifier();\r
+ /**\r
+ * listQualifier ::= THEN exp (BY exp)?\r
+ */\r
+ protected abstract Object reduceThenQualifier();\r
+ /**\r
+ * field ::= ID EQUALS exp\r
+ */\r
+ protected abstract Object reduceField();\r
+ /**\r
+ * field ::= ID\r
+ */\r
+ protected abstract Object reduceFieldShorthand();\r
+ /**\r
+ * caseRhs ::= ARROW exp (WHERE statements)?\r
+ */\r
+ protected abstract Object reduceSimpleCaseRhs();\r
+ /**\r
+ * caseRhs ::= guardedExpArrow guardedExpArrow* (WHERE statements)?\r
+ */\r
+ protected abstract Object reduceGuardedCaseRhs();\r
+ /**\r
+ * guardedExpArrow ::= BAR exp (COMMA exp)* ARROW exp\r
+ */\r
+ protected abstract Object reduceGuardedExpArrow();\r
+ /**\r
+ * equation ::= exp\r
+ */\r
+ protected abstract Object reduceGuardEquation();\r
+ /**\r
+ * equation ::= exp EQUALS exp\r
+ */\r
+ protected abstract Object reduceBasicEquation();\r
+ /**\r
+ * etype ::= LESS ID (COMMA ID)* GREATER btype\r
+ */\r
+ protected abstract Object reduceEffect();\r
+ /**\r
+ * etype ::= btype\r
+ */\r
+ protected abstract Object reduceJustEtype();\r
+ /**\r
+ * etype ::= FORALL ID ID* (SEPARATED_DOT | ATTACHED_DOT) type\r
+ */\r
+ protected abstract Object reduceForAll();\r
+ /**\r
+ * btype ::= atype atype*\r
+ */\r
+ protected abstract Object reduceApplyType();\r
+ /**\r
+ * dummy ::= COMMENT EOL\r
+ */\r
+ protected abstract Object reduceDummy1();\r
+\r
+ protected void postReduce(Object reduced) {\r
+ }\r
+\r
+}\r