]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/parser/grammar/input/GrammarLexer.flex
Moved SCL parser generator to platform repository.
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / parser / grammar / input / GrammarLexer.flex
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/parser/grammar/input/GrammarLexer.flex b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/parser/grammar/input/GrammarLexer.flex
new file mode 100644 (file)
index 0000000..3d1bd8a
--- /dev/null
@@ -0,0 +1,56 @@
+package org.simantics.parser.grammar.input2;
+
+import org.simantics.parser.grammar.input2.Token;
+
+%%
+
+%public
+%char
+%unicode
+%class GrammarLexer
+%function nextToken
+%type Token
+%yylexthrow RuntimeException
+%scanerror RuntimeException
+%eofval{
+    return sym(GrammarTerminals.EOF);
+%eofval}
+
+%{  
+    private Token sym(int id) {
+        return new Token(id, yychar, yychar+yylength(), yytext());
+    }
+%}
+
+
+idChar         = [a-zA-Z0-9_]
+nonterminal    = [a-z]{idChar}*
+terminal       = [A-Z]{idChar}*
+
+whitespace      = [ \n\r\t]+
+c_comment       = "//" [^\n\r]*
+cpp_comment     = "/*" ~"*/"
+
+%%
+
+<YYINITIAL> {
+  {c_comment}     { }
+  {cpp_comment}   { }
+  "="             { return sym(GrammarTerminals.EQUALS); }
+  "|"             { return sym(GrammarTerminals.BAR); }
+  ";"             { return sym(GrammarTerminals.SEMICOLON); }
+  "#"             { return sym(GrammarTerminals.HASH); }
+  ","             { return sym(GrammarTerminals.COMMA); }
+  "("             { return sym(GrammarTerminals.LPAREN); }
+  ")"             { return sym(GrammarTerminals.RPAREN); }
+  "*"             { return sym(GrammarTerminals.STAR); }
+  "+"             { return sym(GrammarTerminals.PLUS); }
+  "?"             { return sym(GrammarTerminals.OPTIONAL); }
+  initial         { return sym(GrammarTerminals.INITIAL); }
+  shift           { return sym(GrammarTerminals.SHIFT); }
+  reduce          { return sym(GrammarTerminals.REDUCE); }
+  {terminal}      { return sym(GrammarTerminals.TERMINAL); }
+  {nonterminal}   { return sym(GrammarTerminals.NONTERMINAL); }
+  {whitespace}    { }
+  .               { throw new RuntimeException("Illegal character '" + yytext() + "'."); }
+}