]> 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 syntax <<effects>>
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / parsing / parser / SCLParserImpl.java
index a29368c2af31c33457ba3482cb110aa48fd84c90..08200a44dfd59bd50d5ea788c649abcf7e8ca146 100644 (file)
@@ -111,6 +111,7 @@ import org.simantics.scl.compiler.internal.parsing.types.TEffectAst;
 import org.simantics.scl.compiler.internal.parsing.types.TForAllAst;
 import org.simantics.scl.compiler.internal.parsing.types.TFunctionAst;
 import org.simantics.scl.compiler.internal.parsing.types.TListAst;
+import org.simantics.scl.compiler.internal.parsing.types.TPlainEffectAst;
 import org.simantics.scl.compiler.internal.parsing.types.TPredAst;
 import org.simantics.scl.compiler.internal.parsing.types.TTupleAst;
 import org.simantics.scl.compiler.internal.parsing.types.TVarAst;
@@ -129,6 +130,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);
@@ -818,6 +823,16 @@ public class SCLParserImpl extends SCLParser {
     protected Object reduceGreater() {
         return new EVar(((Token)get(0)).text);
     }
+    
+    @Override
+    protected Object reduceDoubleLess() {
+        return new EVar(((Token)get(0)).text);
+    }
+
+    @Override
+    protected Object reduceDoubleGreater() {
+        return new EVar(((Token)get(0)).text);
+    }
 
     @Override
     protected Object reduceDot() {
@@ -1347,4 +1362,21 @@ public class SCLParserImpl extends SCLParser {
         return new CHRStatement((CHRAstQuery)get(0), (CHRAstQuery)get(2));
     }
 
+    @Override
+    protected Object reduceWildcard() {
+        return new FieldAssignment(FieldAssignment.WILDCARD, null);
+    }
+
+    @Override
+    protected Object reducePlainEffect() {
+        ArrayList<TypeAst> effects = new ArrayList<TypeAst>(length()/2);
+        for(int i=1;i<length();i+=2) {
+            Token token = (Token)get(i);
+            TVarAst ast = new TVarAst(token.text);
+            ast.location = token.location;
+            effects.add(ast);
+        }
+        return new TPlainEffectAst(effects);
+    }
+
 }