]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLParserImpl.java
(refs #7377) Refactoring CHR query parsing
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / parsing / parser / SCLParserImpl.java
index 34f8d6a9f0da95e4e6a01a95021d82f893176ca8..bda298bd661afd593eb59fc5766f9a6b72ba46da 100644 (file)
@@ -11,6 +11,11 @@ import org.simantics.scl.compiler.common.precedence.Precedence;
 import org.simantics.scl.compiler.compilation.CompilationContext;
 import org.simantics.scl.compiler.constants.CharacterConstant;
 import org.simantics.scl.compiler.constants.StringConstant;
+import org.simantics.scl.compiler.elaboration.chr.ast.CHRAstAtom;
+import org.simantics.scl.compiler.elaboration.chr.ast.CHRAstBinds;
+import org.simantics.scl.compiler.elaboration.chr.ast.CHRAstConjunction;
+import org.simantics.scl.compiler.elaboration.chr.ast.CHRAstEquals;
+import org.simantics.scl.compiler.elaboration.chr.ast.CHRAstQuery;
 import org.simantics.scl.compiler.elaboration.equation.EqBasic;
 import org.simantics.scl.compiler.elaboration.equation.EqGuard;
 import org.simantics.scl.compiler.elaboration.equation.Equation;
@@ -31,6 +36,7 @@ import org.simantics.scl.compiler.elaboration.expressions.EListComprehension;
 import org.simantics.scl.compiler.elaboration.expressions.EListLiteral;
 import org.simantics.scl.compiler.elaboration.expressions.ELiteral;
 import org.simantics.scl.compiler.elaboration.expressions.EMatch;
+import org.simantics.scl.compiler.elaboration.expressions.EPreCHRSelect;
 import org.simantics.scl.compiler.elaboration.expressions.ERange;
 import org.simantics.scl.compiler.elaboration.expressions.ERealLiteral;
 import org.simantics.scl.compiler.elaboration.expressions.ERecord;
@@ -1246,25 +1252,12 @@ public class SCLParserImpl extends SCLParser {
         return new EViewPattern((Expression)get(1), (Expression)get(3));
     }
 
-    @Override
-    protected Object reduceCHRStatement() {
-        return new CHRStatement((ListQualifier[])get(0), (ListQualifier[])get(2));
-    }
-
     @Override
     protected Object reduceConstraintStatement() {
         ConstructorAst constructor = (ConstructorAst)get(1);
         return new ConstraintStatement(constructor.name, constructor.parameters, constructor.fieldNames, constructor.annotations);
     }
 
-    @Override
-    protected Object reduceCHRQuery() {
-        ListQualifier[] query = new ListQualifier[(length()+1)/2];
-        for(int i=0;i<query.length;++i)
-            query[i] = (ListQualifier)get(i*2);
-        return query;
-    }
-
     /*
     @Override
     protected Object reduceWhen() {
@@ -1272,19 +1265,6 @@ public class SCLParserImpl extends SCLParser {
                 new QConjunction((Query[])get(1)),
                 (Expression)get(3));
     }*/
-    
-    @Override
-    protected Object reduceVerboseCHRQuery() {
-        ListQualifier[] query = new ListQualifier[(length()-1)/2];
-        for(int i=0;i<query.length;++i)
-            query[i] = (ListQualifier)get(i*2+1);
-        return query;
-    }
-    
-    @Override
-    protected Object reduceVerboseCHRStatement() {
-        return new CHRStatement((ListQualifier[])get(1), (ListQualifier[])get(3));
-    }
 
     @Override
     protected Object reduceDummy() {
@@ -1305,12 +1285,58 @@ public class SCLParserImpl extends SCLParser {
         return new IncludeStatement(name, value);
     }
 
-    @Override
+    /*@Override
     protected Object reduceConstraintSpec() {
         Expression[] expressions = new Expression[length()/2-1];
         for(int i=0;i<expressions.length;++i)
             expressions[i] = (Expression)get(2*i+1);
         return expressions;
+    }*/
+
+    @Override
+    protected Object reduceCHRSelect() {
+        return new EPreCHRSelect((CHRAstQuery)get(3), (Expression)get(1));
+    }
+
+    @Override
+    protected Object reduceCHRAtom() {
+        return CHRAstAtom.atom((Expression)get(0));
+    }
+
+    @Override
+    protected Object reduceCHREquals() {
+        return new CHRAstEquals((Expression)get(0), (Expression)get(2));
+    }
+
+    @Override
+    protected Object reduceCHRBinds() {
+        return new CHRAstBinds((Expression)get(0), (Expression)get(2));
+    }
+
+    @Override
+    protected Object reduceCHRConjunction() {
+        CHRAstQuery[] conjuncts = new CHRAstQuery[(length()+1)/2];
+        for(int i=0;i<conjuncts.length;++i)
+            conjuncts[i] = (CHRAstQuery)get(i*2);
+        return CHRAstConjunction.conjunction(conjuncts);
+    }
+    
+    @Override
+    protected Object reduceVerboseCHRConjunction() {
+        CHRAstQuery[] conjuncts = new CHRAstQuery[(length()-1)/2];
+        for(int i=0;i<conjuncts.length;++i)
+            conjuncts[i] = (CHRAstQuery)get(i*2+1);
+        return CHRAstConjunction.conjunction(conjuncts);
+    }
+    
+    @Override
+    protected Object reduceVerboseCHRStatement() {
+        return new CHRStatement((CHRAstQuery)get(1), (CHRAstQuery)get(3));
+    }
+
+    @Override
+    protected Object reduceCHRStatement() {
+        return new CHRStatement((CHRAstQuery)get(0), (CHRAstQuery)get(2));
     }
 
 }