]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLParserImpl.java
New SCL completion implementation
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / parsing / parser / SCLParserImpl.java
index bda298bd661afd593eb59fc5766f9a6b72ba46da..9c1a61535531e97b55acf36d0d6830e3b0ec6313 100644 (file)
@@ -57,6 +57,7 @@ import org.simantics.scl.compiler.elaboration.expressions.accessor.FieldAccessor
 import org.simantics.scl.compiler.elaboration.expressions.accessor.IdAccessor;
 import org.simantics.scl.compiler.elaboration.expressions.accessor.StringAccessor;
 import org.simantics.scl.compiler.elaboration.expressions.block.BindStatement;
+import org.simantics.scl.compiler.elaboration.expressions.block.BlockType;
 import org.simantics.scl.compiler.elaboration.expressions.block.CHRStatement;
 import org.simantics.scl.compiler.elaboration.expressions.block.ConstraintStatement;
 import org.simantics.scl.compiler.elaboration.expressions.block.GuardStatement;
@@ -128,6 +129,10 @@ public class SCLParserImpl extends SCLParser {
         this.lexer = new SCLPostLexer(reader);
     }
     
+    public SCLPostLexer getLexer() {
+        return lexer;
+    }
+    
     public void setCompilationContext(CompilationContext context) {
         this.context = context;
         lexer.setCompilationContext(context);
@@ -761,7 +766,14 @@ public class SCLParserImpl extends SCLParser {
     protected Object reduceDo() {
         EBlock block = (EBlock)get(1);
         Token doToken = (Token)get(0);
-        block.setMonadic( doToken.text.equals("mdo") );
+        switch(doToken.text) {
+        case "mdo":
+            block.setBlockType(BlockType.Monad);
+            break;
+        case "edo":
+            block.setBlockType(BlockType.MonadE);
+            break;
+        }
         block.location = Locations.location(Locations.beginOf(doToken.location), Locations.endOf(block.location));
         return block;
     }
@@ -1339,4 +1351,9 @@ public class SCLParserImpl extends SCLParser {
         return new CHRStatement((CHRAstQuery)get(0), (CHRAstQuery)get(2));
     }
 
+    @Override
+    protected Object reduceWildcard() {
+        return new FieldAssignment(FieldAssignment.WILDCARD, null);
+    }
+
 }