-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlexical_analyzer.l
58 lines (51 loc) · 2 KB
/
lexical_analyzer.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
%{
#include "syntaxique_analyzer.tab.h"
#include "symbol_table.h"
#include "types.h"
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
%}
%%
"VAR_GLOBAL" { return VAR_GLOBAL; }
"DECLARATION" { return DECLARATION; }
"INSTRUCTION" { return INSTRUCTION; }
"CONST" { return CONST; }
"INTEGER" { return INTEGER; }
"FLOAT" { return FLOAT; }
"CHAR" { return CHAR; }
"IF" { return IF; }
"ELSE" { return ELSE; }
"FOR" { return FOR; }
"READ" { return READ; }
"WRITE" { return WRITE; }
"&&" { return AND; }
"||" { return OR; }
"!" { return NOT; }
"==" { return EQUAL; }
"!=" { return NOT_EQUAL; }
"<=" { return LESS_EQUAL; }
">=" { return GREATER_EQUAL; }
"+" { return PLUS; }
"-" { return MINUS; }
"*" { return MULTIPLY; }
"/" { return DIVIDE; }
">" { return GREATER; }
"<" { return LESS; }
"++" { return INCREMENT; }
"--" { return DECREMENT; }
[0-9]+ { yylval.intval = atoi(yytext); return INTEGER_CONSTANT; }
[0-9]*"."[0-9]+ { yylval.floatval = atof(yytext); return FLOAT_CONSTANT; }
[A-Z][a-z0-9]{0,7} { yylval.sval = strdup(yytext); return IDENTIFIER; }
"\""[^\"]*"\"" { yylval.sval = strdup(yytext); return STRING_LITERAL; } // Strings for WRITE
"%%"[^\\n]* ; // Single line comment
"=" { return ASSIGN; }
"{" { return LEFT_BRACE; }
"}" { return RIGHT_BRACE; }
"(" { return LEFT_PAREN; }
")" { return RIGHT_PAREN; }
";" { return SEMICOLON; }
[ \t\n]+ ;//
. { printf("Unexpected character: '%s'\n", yytext); }
%%
int yywrap() { return 1; }