]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.parser.grammar.input2;
2
3 import org.simantics.parser.grammar.input2.Token;
4
5 %%
6
7 %public
8 %char
9 %unicode
10 %class GrammarLexer
11 %function nextToken
12 %type Token
13 %yylexthrow RuntimeException
14 %scanerror RuntimeException
15 %eofval{
16     return sym(GrammarTerminals.EOF);
17 %eofval}
18
19 %{  
20     private Token sym(int id) {
21         return new Token(id, yychar, yychar+yylength(), yytext());
22     }
23 %}
24
25
26 idChar         = [a-zA-Z0-9_]
27 nonterminal    = [a-z]{idChar}*
28 terminal       = [A-Z]{idChar}*
29
30 whitespace      = [ \n\r\t]+
31 c_comment       = "//" [^\n\r]*
32 cpp_comment     = "/*" ~"*/"
33
34 %%
35
36 <YYINITIAL> {
37   {c_comment}     { }
38   {cpp_comment}   { }
39   "="             { return sym(GrammarTerminals.EQUALS); }
40   "|"             { return sym(GrammarTerminals.BAR); }
41   ";"             { return sym(GrammarTerminals.SEMICOLON); }
42   "#"             { return sym(GrammarTerminals.HASH); }
43   ","             { return sym(GrammarTerminals.COMMA); }
44   "("             { return sym(GrammarTerminals.LPAREN); }
45   ")"             { return sym(GrammarTerminals.RPAREN); }
46   "*"             { return sym(GrammarTerminals.STAR); }
47   "+"             { return sym(GrammarTerminals.PLUS); }
48   "?"             { return sym(GrammarTerminals.OPTIONAL); }
49   initial         { return sym(GrammarTerminals.INITIAL); }
50   shift           { return sym(GrammarTerminals.SHIFT); }
51   reduce          { return sym(GrammarTerminals.REDUCE); }
52   {terminal}      { return sym(GrammarTerminals.TERMINAL); }
53   {nonterminal}   { return sym(GrammarTerminals.NONTERMINAL); }
54   {whitespace}    { }
55   .               { throw new RuntimeException("Illegal character '" + yytext() + "'."); }
56 }