-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtranslator.l
53 lines (48 loc) · 1.7 KB
/
translator.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
%{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "translator.tab.h"
// Declarar externamente o yylval
extern YYSTYPE yylval;
%}
/* Regras de expressão regular para tokens */
%%
[0-9]+\.[0-9]+ { yylval.str = strdup(yytext); return FLOAT; }
[0-9]+ { yylval.str = strdup(yytext); return NUMBER; }
"IFIF" { return IF; }
"ELSESE" { return ELSE; }
"WHIWHILE" { return WHILE; }
"FOFOR" { return FOR; }
"PRIPRINT" { return PRINT; }
"FUFUNCTION" { return FUNCTION; }
"RETUTURN" { return RETURN; }
"NONOT" { return NOT; }
"--".* { /* Ignorar comentários */ }
"+" { return PLUS; }
"-" { return MINUS; }
"*" { return TIMES; }
"/" { return DIVIDE; }
"[" { return '['; }
"]" { return ']'; }
"(" { return LPAREN; }
")" { return RPAREN; }
"{" { return LBRACE; }
"}" { return RBRACE; }
";" { return ';'; }
"," { return ','; }
[a-zA-Z_][a-zA-Z0-9_]* { yylval.str = strdup(yytext); return ID; }
"=" { return ASSIGN; }
">" { return '>'; }
"<" { return '<'; }
">=" { return GE; }
"<=" { return LE; }
"==" { return EQ; }
"!=" { return NE; }
\"[^\"]*\" { yylval.str = strndup(yytext + 1, yyleng - 2); return STRING; } // Remover as aspas
[ \t\n]+ { /* Ignorar espaços em branco */ }
. { printf("Caractere desconhecido: %s\n", yytext); exit(1); }
%%
int yywrap() {
return 1;
}