-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpath.flex
More file actions
75 lines (69 loc) · 3.96 KB
/
Copy pathpath.flex
File metadata and controls
75 lines (69 loc) · 3.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import beaver.Symbol;
import beaver.Scanner;
%%
%class Lexer
%extends Scanner
%function nextToken
%type Symbol
%yylexthrow Scanner.Exception
%eofval{
return newToken(Terminals.EOF, "end-of-file");
%eofval}
%unicode
%line
%column
%{
private Symbol newToken(short id)
{
return new Symbol(id, yyline + 1, yycolumn + 1, yylength());
}
private Symbol newToken(short id, Object value)
{
return new Symbol(id, yyline + 1, yycolumn + 1, yylength(), value);
}
%}
LineTerminator = \r|\n|\r\n
WhiteSpace = {LineTerminator} | [ \t\f]
Integer = 0 | [1-9][0-9]*
ID = [A-Za-z_][A-Za-z_0-9]*
%%
<YYINITIAL> {
";" { System.out.print(" ; "); return newToken(Terminals.SEMI); }
"," { System.out.print(" , "); return newToken(Terminals.COMMA); }
"." { System.out.print(" . "); return newToken(Terminals.DOT); }
"&&" { System.out.print(" && "); return newToken(Terminals.AND); }
"!" { System.out.print(" ! "); return newToken(Terminals.NOT); }
"+" { System.out.print(" + "); return newToken(Terminals.PLUS); }
"-" { System.out.print(" - "); return newToken(Terminals.MINUS); }
"*" { System.out.print(" * "); return newToken(Terminals.TIMES); }
"<" { System.out.print(" < "); return newToken(Terminals.LESS); }
"=" { System.out.print(" = "); return newToken(Terminals.EQUALS); }
"(" { System.out.print(" ( "); return newToken(Terminals.LPAREN); }
")" { System.out.print(" ) "); return newToken(Terminals.RPAREN); }
"[" { System.out.print(" [ "); return newToken(Terminals.LBRACK); }
"]" { System.out.print(" ] "); return newToken(Terminals.RBRACK); }
"{" { System.out.print(" { "); return newToken(Terminals.LBRACE); }
"}" { System.out.print(" } "); return newToken(Terminals.RBRACE); }
"class" { System.out.print(" class "); return newToken(Terminals.CLASS); }
"public" { System.out.print(" public "); return newToken(Terminals.PUBLIC); }
"static" { System.out.print(" static "); return newToken(Terminals.STATIC); }
"void" { System.out.print(" void "); return newToken(Terminals.VOID); }
"main" { System.out.print(" main "); return newToken(Terminals.MAIN); }
"return" { System.out.print(" return "); return newToken(Terminals.RETURN); }
"if" { System.out.print(" if "); return newToken(Terminals.IF); }
"else" { System.out.print(" else "); return newToken(Terminals.ELSE); }
"while" { System.out.print(" while "); return newToken(Terminals.WHILE); }
"int" { System.out.print(" int "); return newToken(Terminals.INT); }
"boolean" { System.out.print(" boolean "); return newToken(Terminals.BOOLEAN); }
"String" { System.out.print(" String "); return newToken(Terminals.STRING); }
"true" { System.out.print(" true "); return newToken(Terminals.TRUE); }
"this" { System.out.print(" this "); return newToken(Terminals.THIS); }
"new" { System.out.print(" new "); return newToken(Terminals.NEW); }
"extends" { System.out.print(" extends "); return newToken(Terminals.EXTENDS); }
"System.out.println" { System.out.print(" System.out.println "); return newToken(Terminals.PRINT); }
"length" { System.out.print(" length "); return newToken(Terminals.LENGTH); }
{Integer} { System.out.print(" INT_LIT(" + yytext() + ") "); return newToken(Terminals.INT_LIT); }
{ID} { System.out.print(" ID(" + yytext() + ") "); return newToken(Terminals.ID); }
{WhiteSpace}+ { /* ignore */ }
}
[^] { throw new Scanner.Exception("unexpected character '" + yytext() + "'"); }