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=08e6a4f2de709096da22ab086c24473ff059ec86;hpb=a88529426319d66aa668882d767efb3f58a1a629;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 08e6a4f2d..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 @@ -8,8 +8,14 @@ import java.util.List; import org.simantics.scl.compiler.common.exceptions.InternalCompilerError; import org.simantics.scl.compiler.common.precedence.Associativity; 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; @@ -30,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; @@ -50,9 +57,11 @@ 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; +import org.simantics.scl.compiler.elaboration.expressions.block.IncludeStatement; import org.simantics.scl.compiler.elaboration.expressions.block.LetStatement; import org.simantics.scl.compiler.elaboration.expressions.block.RuleStatement; import org.simantics.scl.compiler.elaboration.expressions.block.Statement; @@ -73,6 +82,7 @@ import org.simantics.scl.compiler.elaboration.query.pre.QPreBinds; import org.simantics.scl.compiler.elaboration.query.pre.QPreEquals; import org.simantics.scl.compiler.elaboration.query.pre.QPreGuard; import org.simantics.scl.compiler.errors.Locations; +import org.simantics.scl.compiler.internal.header.ModuleHeader; import org.simantics.scl.compiler.internal.parsing.Symbol; import org.simantics.scl.compiler.internal.parsing.Token; import org.simantics.scl.compiler.internal.parsing.declarations.ConstructorAst; @@ -86,9 +96,9 @@ 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.DRulesetAst; import org.simantics.scl.compiler.internal.parsing.declarations.DTypeAst; import org.simantics.scl.compiler.internal.parsing.declarations.DValueAst; import org.simantics.scl.compiler.internal.parsing.declarations.DValueTypeAst; @@ -101,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; @@ -113,9 +124,19 @@ public class SCLParserImpl extends SCLParser { private final SCLPostLexer lexer; private SCLParserOptions options; + private CompilationContext context; public SCLParserImpl(Reader reader) { - lexer = new SCLPostLexer(reader); + this.lexer = new SCLPostLexer(reader); + } + + public SCLPostLexer getLexer() { + return lexer; + } + + public void setCompilationContext(CompilationContext context) { + this.context = context; + lexer.setCompilationContext(context); } public void setParserOptions(SCLParserOptions options) { @@ -158,7 +179,7 @@ public class SCLParserImpl extends SCLParser { for(int i=0;i)get(i++); Token nameToken = (Token)get(i++); - EVar name = new EVar(nameToken.location, nameToken.text); + EVar name = new EVar(nameToken); ArrayList parameters = new ArrayList(); while(i < length()) { Object symbol = get(i++); @@ -324,7 +346,7 @@ public class SCLParserImpl extends SCLParser { else context = (ArrayList)get(i++); Token nameToken = (Token)get(i++); - EVar name = new EVar(nameToken.location, nameToken.text); + EVar name = new EVar(nameToken); ArrayList parameters = new ArrayList(); while(i < length()) { Object symbol = get(i++); @@ -414,12 +436,12 @@ public class SCLParserImpl extends SCLParser { @Override protected Object reduceVarId() { - return new EVar(((Token)get(0)).text); + return new EVar((Token)get(0)); } @Override protected Object reduceEscapedSymbol() { - return new EVar(((Token)get(0)).text); + return new EVar((Token)get(0)); } @Override @@ -450,7 +472,7 @@ public class SCLParserImpl extends SCLParser { EVar negation = null; if(get(i) instanceof Token) { Token token = (Token)get(i++); - negation = new EVar(token.location, token.text); + negation = new EVar(token); } EBinary binary = new EBinary((Expression)get(i++), negation); while(i < length()) { @@ -517,7 +539,7 @@ public class SCLParserImpl extends SCLParser { TypeAst[] parameters = new TypeAst[length()-idPos-1]; for(int i=0;i effects = new ArrayList(length()/2); + for(int i=1;i