-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathcompiler.l
More file actions
77 lines (68 loc) · 1.25 KB
/
compiler.l
File metadata and controls
77 lines (68 loc) · 1.25 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
76
77
/* Definitions */
%{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "AST.h"
#include "compiler.tab.h"
%}
/* Regular Expression Units */
INTNUM [0-9]+
FLOATNUM [0-9]+\.[0-9]+
ID [A-Za-z][A-Za-z0-9_]*
SPACE [ \t\r\n]
/* Rules */
/* return tokens by Regular Expression(RE) */
%%
int return INT;
float return FLOAT;
main return MAIN;
private return PRIVATE;
public return PUBLIC;
return return RETURN;
while return WHILE;
do return DO;
if return IF;
else return ELSE;
for return FOR;
":" return yytext[0];
";" return yytext[0];
"." return yytext[0];
"," return yytext[0];
"=" return yytext[0];
"!" return yytext[0];
"[" return yytext[0];
"]" return yytext[0];
"{" return yytext[0];
"}" return yytext[0];
"(" return yytext[0];
")" return yytext[0];
"\"" {return DOUBLE_QUO;}
"\'" {return SINGLE_QUO;}
"\&" {return AND;}
"\|" {return OR;}
"+" return PLUS;
"-" return MINUS;
"*" return MULT;
"/" return DIV;
">" return GT;
"<" return LT;
"<=" return LE;
">=" return GE;
"==" return EQ;
"!=" return NE;
{INTNUM} {
yylval.intnum = atoi(yytext);
return INTNUM;
}
{FLOATNUM} {
yylval.floatnum = atof(yytext);
return FLOATNUM;
}
{ID} {
yylval.id = strndup(yytext, yyleng);
return ID;
}
{SPACE} {/*do nothing here*/}
%%
/* User Code */