]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLLexer.flex
New SCL syntax <<effects>>
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / parsing / parser / SCLLexer.flex
index 0aafe287261101a5ac1d099ae9b3c988e223a40b..e1abd5fd3051c509d695cd6626b6c3f40b731df3 100644 (file)
@@ -42,6 +42,9 @@ import gnu.trove.list.array.TIntArrayList;
     public boolean supportCHR() {
         return context.header == null ? false : context.header.chr;
     }
+    public boolean supportEDO() {
+        return context.header == null ? false : context.header.edo;
+    }
 %}
 
 letter          = [a-zA-Z_]
@@ -105,7 +108,7 @@ char_literal    = "'" ([^'\\\ufffd] | "\\" [^\ufffd]) "'"
   do              { return sym(SCLTerminals.DO); }
   eq              { return sym(options.supportEq ? SCLTerminals.EQ : SCLTerminals.ID); }
   mdo             { return sym(SCLTerminals.MDO); }
-  edo             { return sym(SCLTerminals.EDO); }
+  edo             { return sym(supportEDO() ? SCLTerminals.EDO : SCLTerminals.ID); }
   class           { return sym(SCLTerminals.CLASS); }
   effect          { return sym(SCLTerminals.EFFECT); }
   match           { return sym(SCLTerminals.MATCH); }
@@ -155,7 +158,9 @@ char_literal    = "'" ([^'\\\ufffd] | "\\" [^\ufffd]) "'"
   "."             { return sym(SCLTerminals.ATTACHED_DOT, "."); }
   "-"             { return sym(SCLTerminals.MINUS, "-"); }
 //  "<" {existentialVar} ">" { yybegin(XML); return sym(SCLTerminals.XML_BEGIN); }
+  "<<"            { return sym(SCLTerminals.DOUBLE_LESS, "<<"); }
   "<"             { return sym(SCLTerminals.LESS, "<"); }
+  ">>"            { return sym(SCLTerminals.DOUBLE_GREATER, ">>"); }
   ">"             { return sym(SCLTerminals.GREATER, ">"); }
   ";"             { return sym(SCLTerminals.SEMICOLON); }
   "|"             { return sym(SCLTerminals.BAR); }