]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLParser.java
(refs #7377) Refactoring CHR query parsing
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / parsing / parser / SCLParser.java
index 612b118ad3d7a3053b11a72d12e52e8fda90bdf5..3e857b7f1bc8192ef7dc0fe55c80fcdc78f66ab5 100644 (file)
@@ -13,18 +13,18 @@ public abstract class SCLParser {
     public static final boolean TRACE = false;
 
     private static final int INITIAL_CAPACITY = 16;
-    private static final int STATE_COUNT = 357;
+    private static final int STATE_COUNT = 362;
     private static final int TERMINAL_COUNT = 85;
-    private static final int NONTERMINAL_COUNT = 51;
-    private static final int PRODUCT_COUNT = 135;
+    private static final int NONTERMINAL_COUNT = 52;
+    private static final int PRODUCT_COUNT = 138;
     
     private static final int[] ACTION_ROW_ID = new int[STATE_COUNT];
     private static final int[] ACTION_COLUMN_ID = new int[TERMINAL_COUNT];
-    private static final short[] ACTION_TABLE = new short[6765];
-    private static final int[] ERROR_TABLE = new int[949];
+    private static final short[] ACTION_TABLE = new short[6832];
+    private static final int[] ERROR_TABLE = new int[962];
     private static final int[] GOTO_ROW_ID = new int[STATE_COUNT];
     private static final int[] GOTO_COLUMN_ID = new int[NONTERMINAL_COUNT];
-    private static final short[] GOTO_TABLE = new short[1647];
+    private static final short[] GOTO_TABLE = new short[1953];
     private static final int[] PRODUCT_LHS = new int[PRODUCT_COUNT];
 
     private static final short STATE_MASK = (short)0x0fff;
@@ -162,6 +162,7 @@ public abstract class SCLParser {
         "symbolWithoutMinus",
         "listQualifier",
         "chrQuery",
+        "chrQueryPart",
         "caseRhs",
         "guardedExpArrow",
         "equation",
@@ -395,19 +396,19 @@ public abstract class SCLParser {
         return parse(0);
     }
     public Object parseCommands() {
-        return parse(341);
+        return parse(346);
     }
     public Object parseImport() {
-        return parse(349);
+        return parse(354);
     }
     public Object parseType() {
-        return parse(351);
+        return parse(356);
     }
     public Object parseExp() {
-        return parse(353);
+        return parse(358);
     }
     public Object parseEquationBlock() {
-        return parse(355);
+        return parse(360);
     }
 
 
@@ -629,7 +630,7 @@ public abstract class SCLParser {
         case 106:
             return reduceQueryBlock();
         case 107:
-            return reduceVerboseCHRQuery();
+            return reduceVerboseCHRConjunction();
         case 108:
             return reduceStringLiteral();
         case 109:
@@ -651,26 +652,32 @@ public abstract class SCLParser {
         case 117:
             return reduceThenQualifier();
         case 118:
-            return reduceCHRQuery();
+            return reduceCHRConjunction();
         case 119:
-            return reduceSimpleCaseRhs();
+            return reduceCHRAtom();
         case 120:
-            return reduceGuardedCaseRhs();
+            return reduceCHREquals();
         case 121:
-            return reduceGuardedExpArrow();
+            return reduceCHRBinds();
         case 122:
-            return reduceGuardEquation();
+            return reduceSimpleCaseRhs();
         case 123:
-            return reduceBasicEquation();
+            return reduceGuardedCaseRhs();
         case 124:
-            return reduceEffect();
+            return reduceGuardedExpArrow();
         case 125:
-            return reduceJustEtype();
+            return reduceGuardEquation();
         case 126:
-            return reduceForAll();
+            return reduceBasicEquation();
         case 127:
-            return reduceApplyType();
+            return reduceEffect();
         case 128:
+            return reduceJustEtype();
+        case 129:
+            return reduceForAll();
+        case 130:
+            return reduceApplyType();
+        case 131:
             return reduceDummy();
 
         default:
@@ -1116,9 +1123,9 @@ public abstract class SCLParser {
      */
     protected abstract Object reduceQueryBlock();
     /**
-     * verboseChrQuery ::= LBRACE listQualifier (SEMICOLON listQualifier)* RBRACE
+     * verboseChrQuery ::= LBRACE chrQuery (SEMICOLON chrQuery)* RBRACE
      */
-    protected abstract Object reduceVerboseCHRQuery();
+    protected abstract Object reduceVerboseCHRConjunction();
     /**
      * stringLiteral ::= BEGIN_STRING (SUSPEND_STRING exp CONTINUE_STRING)* END_STRING
      */
@@ -1140,9 +1147,21 @@ public abstract class SCLParser {
      */
     protected abstract Object reduceThenQualifier();
     /**
-     * chrQuery ::= (listQualifier COMMA)* listQualifier
+     * chrQuery ::= (chrQueryPart COMMA)* chrQueryPart
+     */
+    protected abstract Object reduceCHRConjunction();
+    /**
+     * chrQueryPart ::= exp
+     */
+    protected abstract Object reduceCHRAtom();
+    /**
+     * chrQueryPart ::= exp EQUALS exp
+     */
+    protected abstract Object reduceCHREquals();
+    /**
+     * chrQueryPart ::= exp BINDS exp
      */
-    protected abstract Object reduceCHRQuery();
+    protected abstract Object reduceCHRBinds();
     /**
      * caseRhs ::= ARROW exp (WHERE statements)?
      */