-
Notifications
You must be signed in to change notification settings - Fork 0
/
lex.l
69 lines (48 loc) · 1.71 KB
/
lex.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
58
59
60
61
62
63
64
65
66
67
68
69
/* Especificacoes do lex para a linguagem naive C */
%{
#include "y.tab.h"
%}
/* Declaracao das expressoes regulares */
LETRA [a-zA-Z]
DIGITO [0-9]
%%
/*Este codigo e responsavel por retornar tokens e contar linhas*/
/*O parser vai receber estas mesmas tokens para analise sintatica*/
[ \t] ;
[ \n] { yylineno = yylineno + 1;}
/* Keyword */
"int" {return INT;}
"float" {return FLOAT;}
"char" {return CHAR;}
"void" {return VOID;}
"double" {return DOUBLE;}
"while" {return WHILE;}
"for" {return FOR;}
"if" {return IF;}
"else" {return ELSE;}
"printf" {return PRINTF;}
"main" {return MAIN;}
"struct" {return STRUCT;}
"include" {return INCLUDE;}
"return" {return RETURN;}
/* Operadores */
"<=" {return MENORIGUAL;}
">=" {return MAIORIGUAL;}
"==" {return IGUAL;}
"!=" {return DIFERENTE;}
">" {return MAIOR;}
"<" {return MENOR;}
/* Pontuacao */
\. {return PONTO;}
/* Comentarios */
/*Não são retornados para o parser*/
\/\/.* ; /*Linha*/
\/\*(.*\n)*.*\*\/ ; /*Multi-linha*/
/* Numeros */
{DIGITO}+ {return NUM;}
{DIGITO}+"."{DIGITO}+ {return REAL;}
/* Identificadores - ID */
{LETRA}({LETRA}|{DIGITO})* {return ID;}
[!%] {return ID;}
. {return yytext[0];}
%%