-
Notifications
You must be signed in to change notification settings - Fork 0
/
calculator.l
38 lines (28 loc) · 912 Bytes
/
calculator.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
/*token recognition*/
%{
# include "ast.h"
# include "calculator.tab.h"
%}
%%
[-+*/=|,;(){}] {return yytext[0];}
">" { yylval.fn = 1; return CMP; }/*compare operation*/
"<" { yylval.fn = 2; return CMP; }
"<>" { yylval.fn = 3; return CMP; }
"!=" { yylval.fn = 3; return CMP; }
"==" { yylval.fn = 4; return CMP; }
">=" { yylval.fn = 5; return CMP; }
"<=" { yylval.fn = 6; return CMP; }
"if" { return IF; }/*control flow*/
"then" { return THEN; }
"else" { return ELSE; }
"while" { return WHILE; }
"do" { return DO; }
"sqrt" { yylval.fn = my_sqrt; return FUNC; }/*built in functions*/
"print" { yylval.fn = print; return FUNC; }
[a-zA-Z][a-zA-Z0-9]* { yylval.s = lookup(yytext); return VAR; }/*Var. Decleration*/
[0-9]+"."[0-9]*? |
"."?[0-9]+? { yylval.d = atof(yytext); return NUMBER; }
[ \t] {}
"\n" { return EOL; }
. { yyerror("Unknown Char %c\n", *yytext); }
%%