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%2FSCLLexer.flex;h=1277ffe7b373ff03b30da9f46c49541f7094aae3;hb=d9a283acefae11c2cc094ed1c7b74759f8166f17;hp=e673b294b94b5e8170e6960778a0176b1c37dcb9;hpb=a88529426319d66aa668882d767efb3f58a1a629;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLLexer.flex b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLLexer.flex index e673b294b..1277ffe7b 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLLexer.flex +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLLexer.flex @@ -1,5 +1,6 @@ package org.simantics.scl.compiler.internal.parsing.parser; +import org.simantics.scl.compiler.compilation.CompilationContext; import org.simantics.scl.compiler.internal.parsing.Token; import org.simantics.scl.compiler.errors.Locations; import org.simantics.scl.compiler.internal.parsing.exceptions.SCLSyntaxErrorException; @@ -27,6 +28,7 @@ import gnu.trove.list.array.TIntArrayList; TIntArrayList stateStack = new TIntArrayList(2); StringBuffer string = new StringBuffer(); + CompilationContext context; private Token sym(int id) { return new Token(id, yychar, yychar+yylength(), yytext()); @@ -34,6 +36,12 @@ import gnu.trove.list.array.TIntArrayList; private Token sym(int id, String text) { return new Token(id, yychar, yychar+yylength(), text); } + public void setCompilationContext(CompilationContext context) { + this.context = context; + } + public boolean supportCHR() { + return context.header == null ? false : context.header.chr; + } %} letter = [a-zA-Z_] @@ -84,15 +92,15 @@ char_literal = "'" ([^'\\\ufffd] | "\\" [^\ufffd]) "'" else { return sym(SCLTerminals.ELSE); } where { return sym(SCLTerminals.WHERE); } when { return sym(SCLTerminals.WHEN); } - ruleset { return sym(SCLTerminals.RULESET); } - rule { return sym(SCLTerminals.RULE); } + ruleset { return sym(supportCHR() ? SCLTerminals.RULESET : SCLTerminals.ID); } + rule { return sym(supportCHR() ? SCLTerminals.ID : SCLTerminals.RULE); } abstract{whitespace}rule { return sym(SCLTerminals.ABSTRACT_RULE); } extends { return sym(SCLTerminals.EXTENDS); } mapping{whitespace}relation { return sym(SCLTerminals.MAPPING_RELATION); } - transformation { return sym(SCLTerminals.TRANSFORMATION); } + transformation { return sym(supportCHR() ? SCLTerminals.ID : SCLTerminals.TRANSFORMATION); } select{whitespace}first { return sym(SCLTerminals.SELECT_FIRST); } select{whitespace}distinct { return sym(SCLTerminals.SELECT_DISTINCT); } - select { return sym(SCLTerminals.SELECT); } + select { return sym(supportCHR() ? SCLTerminals.CHR_SELECT : SCLTerminals.SELECT); } enforce { return sym(SCLTerminals.ENFORCE); } do { return sym(SCLTerminals.DO); } eq { return sym(options.supportEq ? SCLTerminals.EQ : SCLTerminals.ID); }