-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlexer.l
More file actions
57 lines (53 loc) · 1.07 KB
/
lexer.l
File metadata and controls
57 lines (53 loc) · 1.07 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
%option noyywrap
%option yylineno
%{
#include<stdio.h>
#include<string.h>
#include "ast.h"
%}
%%
"int" {return INT;}
"void" {return VOID;}
"return" { return RETURN; }
"if" {return IF;}
"else" {return ELSE;}
"while" {return WHILE;}
"break" {return BREAK;}
"continue" {return CONTINUE;}
"(" { return LP; }
")" { return RP; }
"{" { return LC; }
"}" { return RC; }
"," { return COMMA; }
";" { return SEMICOLON; }
"+" { return PLUS; }
"-" { return MINUS; }
"!" { return NOT; }
"=" { return ASSIGN; }
"*" { return MUL; }
"/" { return DIV; }
"%" { return MOD; }
"&&" { return AND; }
"||" { return OR; }
"==" { return EQ; }
"!=" { return NE; }
"<" { return LT; }
"<=" { return LE; }
">" { return GT; }
">=" { return GE; }
"~" {return BITWISE_NOT;}
"&" { return BITWISE_AND; }
"|" { return BITWISE_OR; }
"^" { return BITWISE_XOR; }
[a-zA-Z_][a-zA-Z0-9_]* {
yylval.str_val = (char *)malloc(strlen(yytext) + 1);
strcpy(yylval.str_val, yytext);
yylval.str_val[strlen(yytext)] = '\0';
return ID;
}
[1-9][0-9]*|0 {
yylval.int_val = atoi(yytext);
return INT_LIT;
}
. {}
%%