-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpas_lex.l
99 lines (98 loc) · 2.53 KB
/
pas_lex.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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
%{
#include <stdio.h>
int lineno = 1;
%}
digit [0-9]
digits {digit}+
number [+-]?{digits}(\.{digits})?(E[+-]?{digits})?
letter_ [a-zA-Z_]
identifier {letter_}({letter_}|{digit})*
literal (\"[^\"]*\")|(\'[^\']*\')
newline \n
whitespace [ \t]+
%%
"auto" { printf("AUTO "); }
"double" { printf("DOUBLE "); }
"int" { printf("INT "); }
"struct" { printf("STRUCT "); }
"break" { printf("BREAK "); }
"else" { printf("ELSE "); }
"long" { printf("LONG "); }
"switch" { printf("SWITCH "); }
"case" { printf("CASE "); }
"enum" { printf("ENUM "); }
"register" { printf("REGISTER "); }
"typedef" { printf("TYPEDEF "); }
"char" { printf("CHAR "); }
"extern" { printf("EXTERN "); }
"return" { printf("RETURN "); }
"union" { printf("UNION "); }
"const" { printf("CONST "); }
"float" { printf("FLOAT "); }
"short" { printf("SHORT "); }
"unsigned" { printf("UNSIGNED "); }
"continue" { printf("CONTINUE "); }
"for" { printf("FOR "); }
"signed" { printf("SIGNED "); }
"void" { printf("VOID "); }
"default" { printf("DEFAULT "); }
"goto" { printf("GOTO "); }
"sizeof" { printf("SIZEOF "); }
"volatile" { printf("VOLATILE "); }
"do" { printf("DO "); }
"if" { printf("IF "); }
"static" { printf("STATIC "); }
"while" { printf("WHILE "); }
"..." { printf("[...] "); }
"<=" { printf("[<=] "); }
">=" { printf("[>=] "); }
"+=" { printf("[+=] "); }
"-=" { printf("[-=] "); }
"*=" { printf("[*=] "); }
"/=" { printf("[/=] "); }
"%=" { printf("[%%=] "); }
"!=" { printf("[!=] "); }
"<<" { printf("[<<] "); }
">>" { printf("[>>] "); }
"&&" { printf("[&&] "); }
"++" { printf("[++] "); }
"––" { printf("[--] "); }
"||" { printf("[||] "); }
"==" { printf("[==] "); }
"+" { printf("[+] "); }
"-" { printf("[-] "); }
"*" { printf("[*] "); }
"/" { printf("[/] "); }
"!" { printf("[!] "); }
">" { printf("[>] "); }
"<" { printf("[<] "); }
"^" { printf("[^] "); }
"&" { printf("[&] "); }
"|" { printf("[|] "); }
"," { printf("[,] "); }
"[" { printf("[[] "); }
"]" { printf("[]] "); }
":" { printf("[:] "); }
"=" { printf("[=] "); }
"~" { printf("[~] "); }
"%" { printf("[%%] "); }
"{" { printf("[{] "); }
"}" { printf("[}] "); }
"(" { printf("[(] "); }
")" { printf("[)] "); }
";" { printf("[;] "); }
"." { printf("[.] "); }
"#" { printf("[#] ");}
{number} { printf("NUM:%s ",yytext); }
{identifier} { printf("ID:%s ",yytext); }
{literal} { printf("STR:%s ",yytext); }
{newline} { lineno++; printf("\n "); }
{whitespace} { /* skip whitescapes */ }
. { printf("<ERROR>"); }
%%
int main() {
yylex();
return 0;
}
int yywrap(void)
{return 1;}