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%2FSCLLexer.flex;h=0f45c2511b297a3e6575c7a953c6cd5e9f752c34;hp=ecae4e5a54a36b288e0bc6cfff737aec8f16cc8e;hb=78f577368ba4c71ad6fb3d9f16c03c634585cf7b;hpb=969bd23cab98a79ca9101af33334000879fb60c5 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 ecae4e5a5..0f45c2511 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,13 +36,19 @@ 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_] digit = [0-9] hexDigit = [0-9a-fA-F] id_char = {letter} | {digit} | "'" -ord_symbol_char = [!$%&*+\/<=>?@\\\^|\-:~] +ord_symbol_char = [!$%&*+\/<=>@\\\^|\-:~] symbol_char = {ord_symbol_char} | "#" prefix = {letter} {id_char}* "." @@ -84,11 +92,12 @@ char_literal = "'" ([^'\\\ufffd] | "\\" [^\ufffd]) "'" else { return sym(SCLTerminals.ELSE); } where { return sym(SCLTerminals.WHERE); } when { return sym(SCLTerminals.WHEN); } - 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); } @@ -116,6 +125,7 @@ char_literal = "'" ([^'\\\ufffd] | "\\" [^\ufffd]) "'" // relation { return sym(SCLTerminals.RELATION); } as { return sym(SCLTerminals.AS); } by { return sym(SCLTerminals.BY); } + constraint { return sym(SCLTerminals.CONSTRAINT); } {queryOp} { return sym(SCLTerminals.QUERY_OP); } "@" { return sym(SCLTerminals.AT); } "{" { return sym(SCLTerminals.LBRACE); } @@ -143,7 +153,7 @@ char_literal = "'" ([^'\\\ufffd] | "\\" [^\ufffd]) "'" {separatedDot} { return sym(SCLTerminals.SEPARATED_DOT, "."); } "." { return sym(SCLTerminals.ATTACHED_DOT, "."); } "-" { return sym(SCLTerminals.MINUS, "-"); } -// "<" existentialVar ">" { yybegin(XML); return sym(SCLTerminals.XML_BEGIN); } +// "<" {existentialVar} ">" { yybegin(XML); return sym(SCLTerminals.XML_BEGIN); } "<" { return sym(SCLTerminals.LESS, "<"); } ">" { return sym(SCLTerminals.GREATER, ">"); } ";" { return sym(SCLTerminals.SEMICOLON); } @@ -151,6 +161,7 @@ char_literal = "'" ([^'\\\ufffd] | "\\" [^\ufffd]) "'" "=" { return sym(SCLTerminals.EQUALS); } "::" { return sym(SCLTerminals.HASTYPE); } ":" { return sym(SCLTerminals.COLON); } + "\\" " "* match { return sym(SCLTerminals.LAMBDA_MATCH); } "\\" { return sym(SCLTerminals.LAMBDA); } "\"\"\"" { string.setLength(0); stringStart=yychar; yybegin(LONG_STRING); return sym(SCLTerminals.BEGIN_STRING); } "\"" { string.setLength(0); stringStart=yychar; yybegin(STRING); return sym(SCLTerminals.BEGIN_STRING); }