forked from bhargavkulk/CSF363-baseline
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlexer.lex
49 lines (40 loc) · 1.26 KB
/
lexer.lex
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
%option noyywrap
%{
#include "parser.hh"
#include <string>
extern int yyerror(std::string msg);
%}
%%
"+" { return TPLUS; }
"-" { return TDASH; }
"*" { return TSTAR; }
"/" { return TSLASH; }
";" { return TSCOL; }
"(" { return TLPAREN; }
")" { return TRPAREN; }
"=" { return TEQUAL; }
"dbg" { return TDBG; }
"let" { return TLET; }
[0-9]+ { yylval.lexeme = std::string(yytext); return TINT_LIT; }
[a-zA-Z]+ { yylval.lexeme = std::string(yytext); return TIDENT; }
[ \t\n] { /* skip */ }
. { yyerror("unknown char"); }
%%
std::string token_to_string(int token, const char *lexeme) {
std::string s;
switch (token) {
case TPLUS: s = "TPLUS"; break;
case TDASH: s = "TDASH"; break;
case TSTAR: s = "TSTAR"; break;
case TSLASH: s = "TSLASH"; break;
case TSCOL: s = "TSCOL"; break;
case TLPAREN: s = "TLPAREN"; break;
case TRPAREN: s = "TRPAREN"; break;
case TEQUAL: s = "TEQUAL"; break;
case TDBG: s = "TDBG"; break;
case TLET: s = "TLET"; break;
case TINT_LIT: s = "TINT_LIT"; s.append(" ").append(lexeme); break;
case TIDENT: s = "TIDENT"; s.append(" ").append(lexeme); break;
}
return s;
}