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=08e6a4f2de709096da22ab086c24473ff059ec86;hp=bbf944f1e28b8c84cf78b00895fbca516158e8e4;hb=a88529426319d66aa668882d767efb3f58a1a629;hpb=7a7c389f2ffddb4e4170098e4f5facca1fa8b633 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 bbf944f1e..08e6a4f2d 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 @@ -21,7 +21,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; @@ -41,7 +40,7 @@ import org.simantics.scl.compiler.elaboration.expressions.ETransformation; import org.simantics.scl.compiler.elaboration.expressions.ETypeAnnotation; import org.simantics.scl.compiler.elaboration.expressions.EVar; import org.simantics.scl.compiler.elaboration.expressions.EVariable; -import org.simantics.scl.compiler.elaboration.expressions.EWhen; +import org.simantics.scl.compiler.elaboration.expressions.EViewPattern; import org.simantics.scl.compiler.elaboration.expressions.Expression; import org.simantics.scl.compiler.elaboration.expressions.GuardedExpression; import org.simantics.scl.compiler.elaboration.expressions.GuardedExpressionGroup; @@ -51,6 +50,8 @@ 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.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.LetStatement; import org.simantics.scl.compiler.elaboration.expressions.block.RuleStatement; @@ -85,6 +86,7 @@ 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.DTypeAst; @@ -153,10 +155,22 @@ public class SCLParserImpl extends SCLParser { @Override protected Object reduceModule() { ArrayList declarations = new ArrayList(length()/2+1); - for(int i=0;i)get(4)); @@ -686,6 +704,14 @@ public class SCLParserImpl extends SCLParser { case_.setLhs(Locations.combine(patterns[0].location, patterns[patterns.length-1].location)); return new ELambda(case_); } + + @Override + protected Object reduceLambdaMatch() { + Case[] cases = new Case[length()/2-1]; + for(int i=0;i ll = (List)first; + first = ll.get(0); + } + else { + Object[] ll = (Object[])first; + if(ll.length > 0) + first = ll[0]; + else + first = get(1); + } + } Object last = get(length()-1); if(!(last instanceof Symbol)) { if(last instanceof List) { @@ -901,7 +930,7 @@ public class SCLParserImpl extends SCLParser { last = get(length()-2); } } - sym.location = (((Symbol)get(0)).location & 0xffffffff00000000L) + sym.location = (((Symbol)first).location & 0xffffffff00000000L) | (((Symbol)last).location & 0xffffffffL); /*for(int i=0;i 3 - ? new QConjunction((Query[])get(length()-1)) - : null); - } @Override protected Object reduceHashedId() { @@ -1078,6 +1099,7 @@ public class SCLParserImpl extends SCLParser { private static final String[] EMPTY_STRING_ARRAY = new String[0]; + @SuppressWarnings("unchecked") @Override protected Object reduceRuleDefinition() { String[] extendsNames = EMPTY_STRING_ARRAY; @@ -1134,6 +1156,7 @@ public class SCLParserImpl extends SCLParser { ); } + @SuppressWarnings("unchecked") @Override protected Object reduceRelationDefinition() { return new DRelationAst((Expression)get(0), @@ -1207,4 +1230,69 @@ public class SCLParserImpl extends SCLParser { protected Object reduceBasicEquation() { return new EqBasic((Expression)get(0), (Expression)get(2)); } + + @Override + protected Object reduceViewPattern() { + 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() { + TypeAst[] parameterTypes = new TypeAst[length()-2]; + for(int i=0;i