-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscan.l
54 lines (40 loc) · 863 Bytes
/
scan.l
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
%option noyywrap nodefault yylineno
%x COMMENT
%{
#include "globals.h"
%}
%%
"/*" { BEGIN(COMMENT); }
<COMMENT>"*/" { BEGIN(INITIAL); }
<COMMENT>([^*]|\en)+|.
<COMMENT><<EOF>> { error(LexicalError, "unterminated comment"); return 0; }
"if" { return IF; }
"else" { return ELSE; }
"while" { return WHILE; }
"return" { return RETURN; }
"int" { return INT; }
"void" { return VOID; }
"+" |
"-" |
"*" |
"/" |
"=" |
";" |
"," |
"(" |
")" |
"[" |
"]" |
"{" |
"}" { return yytext[0]; }
"<" { return LT; }
">" { return GT; }
"<=" { return LE; }
">=" { return GE; }
"==" { return EQ; }
"!=" { return NE; }
[0-9]+ { yylval.int_value = atoi(yytext); return NUM; }
[_a-zA-Z][_a-zA-Z0-9]* { yylval.str_value = strdup(yytext); return ID; /* extension */ }
[ \t\n] { }
. { error(LexicalError, "illegal character \"%s\"", yytext); }
%%