forked from joao-frohlich/compiladores
-
Notifications
You must be signed in to change notification settings - Fork 0
/
final.lex
75 lines (66 loc) · 3.78 KB
/
final.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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
%option noyywrap
%{
#include <stdio.h>
#define YY_DECL int yylex()
extern int line;
#include "final.tab.h"
%}
DIGITO [0-9]
DIGITOS {DIGITO}+
INTEIRO [-+]?{DIGITOS}
REAL [-+]?({DIGITO}*\.?{DIGITO}+|{DIGITO}+\.)
IDENT [a-zA-Z][a-zA-Z0-9_]*
CHAR \"{IDENT}*\"
TIPO "int"|"float"|"string"
OP "+"|"-"|"*"|"/"
/* void reportUnrecognizedToken() {
printf("Token não reconhecido na linha %d: %s\n", line, yytext);
exit(1);
} */
%%
[ \t] ; // ignore todos os espaços em branco
"programa" {printf("RESERVADO: %s\n", yytext); return PROG;}
"var" {printf("RESERVADO: %s\n", yytext); return VAR;}
"inicio" {printf("RESERVADO: %s\n", yytext); return START;}
"fim" {printf("RESERVADO: %s\n", yytext); return END;}
"se" {printf("RESERVADO: %s\n", yytext); return IF;}
"senao" {printf("RESERVADO: %s\n", yytext); return ELSE;}
"entao" {printf("RESERVADO: %s\n", yytext); return THEN;}
"faca" {printf("RESERVADO: %s\n", yytext); return DO;}
"enquanto" {printf("RESERVADO: %s\n", yytext); return WHILE;}
"procedimento" {printf("RESERVADO: %s\n", yytext); return FUNC;}
"return" {printf("RESERVADO: %s\n", yytext); return RETURN;}
"print" {printf("RESERVADO: %s\n", yytext); return PRINT;}
"read" {printf("RESERVADO: %s\n", yytext); return READ;}
"void" {printf("RESERVADO: %s\n", yytext); return VOID;}
{DIGITO}+ {printf("INT: %s\n", yytext); return T_INT;}
{DIGITO}+.{DIGITO}+ {printf("FLOAT: %s\n", yytext); return T_REAL;}
{TIPO} {printf("TIPO DA VARIÁVEL: %s\n", yytext); return T_TIPO;}
{CHAR} {printf("String: %s\n", yytext); return T_STRING;}
{IDENT} {printf("IDENTIFICADOR: %s\n", yytext); return IDENT;}
"=" {printf("OPERAÇÃO: %s\n", yytext); return T_ATTR;}
"." {printf("FIM DE PROGRAMA: %s\n", yytext); return T_ENDPROG;}
"," {printf("OPERAÇÃO: %s\n", yytext); return T_ADDON;}
":" {printf("OPERAÇÃO: %s\n", yytext); return T_TATTR;}
";" {printf("FIM DE COMANDO: %s\n", yytext); return SEMICOLON;}
"!" {printf("OPERAÇÃO: %s\n", yytext); return T_NOT;}
"&&" {printf("OPERAÇÃO: %s\n", yytext); return T_AND;}
"||" {printf("OPERAÇÃO: %s\n", yytext); return T_OR;}
"==" {printf("OPERAÇÃO: %s\n", yytext); return T_EQUALS;}
"<" {printf("OPERAÇÃO: %s\n", yytext); return T_LESS;}
">" {printf("OPERAÇÃO: %s\n", yytext); return T_GREATER;}
"!=" {printf("OPERAÇÃO: %s\n", yytext); return T_DIFFERS;}
"<=" {printf("OPERAÇÃO: %s\n", yytext); return T_LESSE;}
">=" {printf("OPERAÇÃO: %s\n", yytext); return T_GREATERE;}
"+" {printf("OPERAÇÃO: %s\n", yytext); return T_PLUS;}
"-" {printf("OPERAÇÃO: %s\n", yytext); return T_MINUS;}
"*" {printf("OPERAÇÃO: %s\n", yytext); return T_MULTIPLY;}
"/" {printf("OPERAÇÃO: %s\n", yytext); return T_DIVIDE;}
"%" {printf("OPERAÇÃO: %s\n", yytext); return T_MOD;}
"(" {printf("OPERAÇÃO: %s\n", yytext); return T_LEFT;}
")" {printf("OPERAÇÃO: %s\n", yytext); return T_RIGHT;}
"{" {printf("CHAVE ESQUERDA: %s\n", yytext); return T_CLEFT;}
"}" {printf("CHAVE DIREITA: %s\n", yytext); return T_CRIGHT;}
\n {line++;}
%%
/* . {reportUnrecognizedToken();} */