X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Finternal%2Fparsing%2Fparser%2FSCLParserImpl.java;h=09fc79e0f531030b8ff2d1dfa720a00c22428dfb;hp=5498b16b5f0552df54669752cd807e6dde64a53b;hb=fad36d463b75c3a9944d875fc627c3533f6da74d;hpb=649890ad306df48440a97893d7d53fb8a6386a4e 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 5498b16b5..09fc79e0f 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,6 +8,7 @@ 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.equation.EqBasic; @@ -21,7 +22,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; @@ -54,6 +54,7 @@ import org.simantics.scl.compiler.elaboration.expressions.block.BindStatement; 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; @@ -74,6 +75,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; @@ -89,6 +91,7 @@ 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.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; @@ -113,9 +116,15 @@ 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 void setCompilationContext(CompilationContext context) { + this.context = context; + lexer.setCompilationContext(context); } public void setParserOptions(SCLParserOptions options) { @@ -155,10 +164,23 @@ public class SCLParserImpl extends SCLParser { @Override protected Object reduceModule() { ArrayList declarations = new ArrayList(length()/2+1); - for(int i=0;i 3 - ? new QConjunction((Query[])get(length()-1)) - : null); - } @Override protected Object reduceHashedId() { @@ -1279,4 +1293,18 @@ public class SCLParserImpl extends SCLParser { throw new UnsupportedOperationException(); } + @Override + protected Object reduceRulesetDefinition() { + Token name = (Token)get(1); + EBlock block = (EBlock)get(3); + return new DRulesetAst(name.text, block); + } + + @Override + protected Object reduceLocalInclude() { + Token name = (Token)get(1); + Expression value = (Expression)get(2); + return new IncludeStatement(name, value); + } + }