X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Finternal%2Fparsing%2Fparser%2FSCLParserImpl.java;h=08200a44dfd59bd50d5ea788c649abcf7e8ca146;hb=3d043320cdee8dda92758f4ea1c324a82c7d9094;hp=34f8d6a9f0da95e4e6a01a95021d82f893176ca8;hpb=bf5f7cda1b9b64484cc6e53499e38d6785744aec;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLParserImpl.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLParserImpl.java index 34f8d6a9f..08200a44d 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLParserImpl.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLParserImpl.java @@ -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; @@ -51,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; @@ -104,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; @@ -122,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); @@ -755,7 +767,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; } @@ -804,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() { @@ -1246,25 +1275,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 effects = new ArrayList(length()/2); + for(int i=1;i