1 | /* this is the scanner example from the JLex website
|
---|
2 | (with small modifications to make it more readable) */
|
---|
3 |
|
---|
4 | %%
|
---|
5 |
|
---|
6 | %{
|
---|
7 | private int comment_count = 0;
|
---|
8 | %}
|
---|
9 |
|
---|
10 | %line
|
---|
11 | %char
|
---|
12 | %state COMMENT
|
---|
13 | %full
|
---|
14 |
|
---|
15 | %debug
|
---|
16 |
|
---|
17 | ALPHA=[A-Za-z]
|
---|
18 | DIGIT=[0-9]
|
---|
19 | NONNEWLINE_WHITE_SPACE_CHAR=[\ \t\b\012]
|
---|
20 | NEWLINE=\r|\n|\r\n
|
---|
21 | WHITE_SPACE_CHAR=[\n\r\ \t\b\012]
|
---|
22 | STRING_TEXT=(\\\"|[^\n\r\"]|\\{WHITE_SPACE_CHAR}+\\)*
|
---|
23 | COMMENT_TEXT=([^*/\n]|[^*\n]"/"[^*\n]|[^/\n]"*"[^/\n]|"*"[^/\n]|"/"[^*\n])*
|
---|
24 | Ident = {ALPHA}({ALPHA}|{DIGIT}|_)*
|
---|
25 |
|
---|
26 | %%
|
---|
27 |
|
---|
28 | <YYINITIAL> {
|
---|
29 | "," { return (new Yytoken(0,yytext(),yyline,yychar,yychar+1)); }
|
---|
30 | ":" { return (new Yytoken(1,yytext(),yyline,yychar,yychar+1)); }
|
---|
31 | ";" { return (new Yytoken(2,yytext(),yyline,yychar,yychar+1)); }
|
---|
32 | "(" { return (new Yytoken(3,yytext(),yyline,yychar,yychar+1)); }
|
---|
33 | ")" { return (new Yytoken(4,yytext(),yyline,yychar,yychar+1)); }
|
---|
34 | "[" { return (new Yytoken(5,yytext(),yyline,yychar,yychar+1)); }
|
---|
35 | "]" { return (new Yytoken(6,yytext(),yyline,yychar,yychar+1)); }
|
---|
36 | "{" { return (new Yytoken(7,yytext(),yyline,yychar,yychar+1)); }
|
---|
37 | "}" { return (new Yytoken(8,yytext(),yyline,yychar,yychar+1)); }
|
---|
38 | "." { return (new Yytoken(9,yytext(),yyline,yychar,yychar+1)); }
|
---|
39 | "+" { return (new Yytoken(10,yytext(),yyline,yychar,yychar+1)); }
|
---|
40 | "-" { return (new Yytoken(11,yytext(),yyline,yychar,yychar+1)); }
|
---|
41 | "*" { return (new Yytoken(12,yytext(),yyline,yychar,yychar+1)); }
|
---|
42 | "/" { return (new Yytoken(13,yytext(),yyline,yychar,yychar+1)); }
|
---|
43 | "=" { return (new Yytoken(14,yytext(),yyline,yychar,yychar+1)); }
|
---|
44 | "<>" { return (new Yytoken(15,yytext(),yyline,yychar,yychar+2)); }
|
---|
45 | "<" { return (new Yytoken(16,yytext(),yyline,yychar,yychar+1)); }
|
---|
46 | "<=" { return (new Yytoken(17,yytext(),yyline,yychar,yychar+2)); }
|
---|
47 | ">" { return (new Yytoken(18,yytext(),yyline,yychar,yychar+1)); }
|
---|
48 | ">=" { return (new Yytoken(19,yytext(),yyline,yychar,yychar+2)); }
|
---|
49 | "&" { return (new Yytoken(20,yytext(),yyline,yychar,yychar+1)); }
|
---|
50 | "|" { return (new Yytoken(21,yytext(),yyline,yychar,yychar+1)); }
|
---|
51 | ":=" { return (new Yytoken(22,yytext(),yyline,yychar,yychar+2)); }
|
---|
52 |
|
---|
53 | {NONNEWLINE_WHITE_SPACE_CHAR}+ { }
|
---|
54 |
|
---|
55 | "/*" { yybegin(COMMENT); comment_count++; }
|
---|
56 |
|
---|
57 | \"{STRING_TEXT}\" {
|
---|
58 | String str = yytext().substring(1,yylength()-1);
|
---|
59 | return (new Yytoken(40,str,yyline,yychar,yychar+yylength()));
|
---|
60 | }
|
---|
61 |
|
---|
62 | \"{STRING_TEXT} {
|
---|
63 | String str = yytext().substring(1,yytext().length());
|
---|
64 | Utility.error(Utility.E_UNCLOSEDSTR);
|
---|
65 | return (new Yytoken(41,str,yyline,yychar,yychar + str.length()));
|
---|
66 | }
|
---|
67 |
|
---|
68 | {DIGIT}+ { return (new Yytoken(42,yytext(),yyline,yychar,yychar+yylength())); }
|
---|
69 |
|
---|
70 | {Ident} { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); }
|
---|
71 | }
|
---|
72 |
|
---|
73 | <COMMENT> {
|
---|
74 | "/*" { comment_count++; }
|
---|
75 | "*/" { if (--comment_count == 0) yybegin(YYINITIAL); }
|
---|
76 | {COMMENT_TEXT} { }
|
---|
77 | }
|
---|
78 |
|
---|
79 |
|
---|
80 | {NEWLINE} { }
|
---|
81 |
|
---|
82 | . {
|
---|
83 | System.out.println("Illegal character: <" + yytext() + ">");
|
---|
84 | Utility.error(Utility.E_UNMATCHED);
|
---|
85 | }
|
---|
86 |
|
---|