]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLParserImpl.java
(refs #7250) Added new grammar rules for modular CHR rules
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / parsing / parser / SCLParserImpl.java
index 5498b16b5f0552df54669752cd807e6dde64a53b..08e6a4f2de709096da22ab086c24473ff059ec86 100644 (file)
@@ -21,7 +21,6 @@ import org.simantics.scl.compiler.elaboration.expressions.EBinaryRightSide;
 import org.simantics.scl.compiler.elaboration.expressions.EBlock;
 import org.simantics.scl.compiler.elaboration.expressions.EConstant;
 import org.simantics.scl.compiler.elaboration.expressions.EEnforce;
-import org.simantics.scl.compiler.elaboration.expressions.EEntityTypeAnnotation;
 import org.simantics.scl.compiler.elaboration.expressions.EEquations;
 import org.simantics.scl.compiler.elaboration.expressions.EFieldAccess;
 import org.simantics.scl.compiler.elaboration.expressions.EIf;
@@ -87,6 +86,7 @@ import org.simantics.scl.compiler.internal.parsing.declarations.DFixityAst;
 import org.simantics.scl.compiler.internal.parsing.declarations.DImportJavaAst;
 import org.simantics.scl.compiler.internal.parsing.declarations.DInstanceAst;
 import org.simantics.scl.compiler.internal.parsing.declarations.DMappingRelationAst;
+import org.simantics.scl.compiler.internal.parsing.declarations.DModuleHeader;
 import org.simantics.scl.compiler.internal.parsing.declarations.DRelationAst;
 import org.simantics.scl.compiler.internal.parsing.declarations.DRuleAst;
 import org.simantics.scl.compiler.internal.parsing.declarations.DTypeAst;
@@ -155,10 +155,22 @@ public class SCLParserImpl extends SCLParser {
     @Override
     protected Object reduceModule() {
         ArrayList<DeclarationAst> declarations = new ArrayList<DeclarationAst>(length()/2+1);
-        for(int i=0;i<length();i+=2)
-            declarations.add((DeclarationAst)get(i));
+        for(int i=0;i<length();i+=2) {
+            DeclarationAst declaration = (DeclarationAst)get(i);
+            if(declaration == null)
+                throw new NullPointerException();
+            declarations.add(declaration);
+        }
         return declarations;
     }
+    
+    @Override
+    protected Object reduceModuleHeader() {
+        FieldAssignment[] fields = new FieldAssignment[length()/2-1];
+        for(int i=0;i<fields.length;++i)
+            fields[i] = (FieldAssignment)get(2+i*2);
+        return new DModuleHeader(fields);
+    }
 
     @Override
     protected Object reduceLocalTypeAnnotation() {
@@ -944,30 +956,30 @@ public class SCLParserImpl extends SCLParser {
 
     @Override
     protected Object reduceIdAccessor() {
-        return new IdAccessor(((Token)get(0)).text);
+        return new IdAccessor('.', ((Token)get(0)).text);
     }
 
     @Override
     protected Object reduceStringAccessor() {
-        return new StringAccessor(((Token)get(1)).text);
+        return new StringAccessor('.', ((Token)get(1)).text);
     }
 
     @Override
     protected Object reduceExpAccessor() {
-        return new ExpressionAccessor((Expression)get(1));
+        return new ExpressionAccessor('.', (Expression)get(1));
     }
 
     @Override
     protected Object reduceFieldAccess() {
         if(length() == 1)
             return get(0);
-        FieldAccessor[] accessors = new FieldAccessor[length()/2];
-        for(int i=0;i<accessors.length;++i) {
-            FieldAccessor accessor = (FieldAccessor)get(i*2+2);
-            accessor.accessSeparator = ((Token)get(i*2+1)).text.charAt(0);
-            accessors[i] = accessor;
+        Expression result = (Expression)get(0);
+        for(int i=2;i<length();i+=2) {
+            FieldAccessor accessor = (FieldAccessor)get(i);
+            accessor.accessSeparator = ((Token)get(i-1)).text.charAt(0);
+            result = new EFieldAccess(result, accessor);
         }
-        return new EFieldAccess((Expression)get(0), accessors);
+        return result;
     }
 
     @Override
@@ -1011,14 +1023,6 @@ public class SCLParserImpl extends SCLParser {
     protected Object reduceRuleStatement() {
         return new RuleStatement((Expression)get(0), new QConjunction((Query[])get(2)));
     }
-    
-    @Override
-    protected Object reduceEntityTypeAnnotation() {
-        return new EEntityTypeAnnotation((Expression)get(0), (Token)get(2), 
-                length() > 3 
-                ? new QConjunction((Query[])get(length()-1))
-                : null);
-    }
 
     @Override
     protected Object reduceHashedId() {
@@ -1279,4 +1283,16 @@ public class SCLParserImpl extends SCLParser {
         throw new UnsupportedOperationException();
     }
 
+    @Override
+    protected Object reduceRulesetDefinition() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected Object reduceLocalInclude() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
 }