-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcompiler.l
62 lines (52 loc) · 1.65 KB
/
compiler.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
%option noyywrap
%option yylineno
%{
#include <stdlib.h>
#include <string.h>
#include "compiler.tab.h"
%}
%x CMT
%%
"(" { BEGIN(CMT); }
<CMT>")" { BEGIN(INITIAL); }
<CMT>(\n|.)
<CMT><<EOF>> { printf("Błąd: niezakończony komentarz.\n"); yyterminate(); }
"VAR" { return VAR; }
"BEGIN" { return BEG; }
"END" { return END; }
":=" { return ASG; }
"IF" { return IF; }
"THEN" { return THEN; }
"ELSE" { return ELSE; }
"WHILE" { return WHILE; }
"FOR" { return FOR; }
"FROM" { return FROM; }
"TO" { return TO; }
"DOWNTO" { return DOWNTO; }
"ENDIF" { return ENDIF; }
"ENDWHILE" { return ENDWHILE; }
"ENDFOR" { return ENDFOR; }
"DO" { return DO; }
"WRITE" { return WRITE; }
"READ" { return READ; }
"=" { return EQ; }
"<" { return LT; }
">" { return GT; }
"<=" { return LE; }
">=" { return GE; }
"<>" { return NE; }
"+" { return ADD; }
"-" { return SUB; }
"*" { return MUL; }
"/" { return DIV; }
"%" { return MOD; }
"[" { return LB; }
"]" { return RB; }
[0-9]+ { yylval.str = (char *)strdup(yytext);
return NUM; }
[_a-z]+ { yylval.str = (char *)strdup(yytext);
return IDE; }
";" { return SEM; }
[ \t\r\n]+
.
%%