-
Notifications
You must be signed in to change notification settings - Fork 0
/
tp_sintaxis.l
53 lines (49 loc) · 1.68 KB
/
tp_sintaxis.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 "libreria.h"
#include "tp_sintaxis.tab.h"
%}
%option yylineno
CEDECIMAL [1-9][0-9]*
CEOCTAL 0[0-7]*
CEHEXA 0[xX][A-Fa-f0-9]+
CREAL [0-9]*"."[0-9]+([eE]([\+\-]?)[0-9]+)?
ID [a-zA-Z_][a-zA-Z0-9_]*
LIT \"(\\.|[^"\\])*\"
CARACTER \'.\'
TIPO int|char|double|float
INCREMENTO \+\+|--
RELACIONAL >=|<=|<|>
IGUALDAD ==|!=
OPERADORES \+|-|!|,|\:|=
PARENTESIS \(|\)|\[|\]|\{|\}
MULTIPLICATIVO \*|%|\/
ASIGNACION_INCREMENTAL \+=|-=
%%
{TIPO} {yylval.valor = strdup(yytext); return NOMBRETIPO;}
sizeof {return SIZEOF;}
return {return RETURN;}
while {return WHILE;}
if {return IF;}
do {return DO;}
for {return FOR;}
else {return ELSE;}
";" {return ';';}
{CEDECIMAL} {return CONSTANTE;}
{CEOCTAL} {return CONSTANTE;}
{CEHEXA} {return CONSTANTE;}
{CREAL} {return CONSTANTE;}
{CARACTER} {return CONSTANTE;}
{LIT} {return LITERALCADENA;}
{INCREMENTO} {return INCREMENTO;}
{ASIGNACION_INCREMENTAL} {return ASIGNACION_INCREMENTAL;}
{RELACIONAL} {return OPERADOR_RELACIONAL;}
{IGUALDAD} {return OPERADOR_IGUALDAD;}
{MULTIPLICATIVO} {return OPERADOR_MULTIPLICATIVO;}
{OPERADORES} {return yytext[0];} //Como el string es de un solo char, se devuelve el primer elemento del string, que es el operador
{PARENTESIS} {return yytext[0];}
&& {return AND;}
"||" {return OR;}
{ID} {yylval.valor = strdup(yytext); return IDENTIFICADOR;}
[ \t\n]+ /* se come los espacios en blanco */
(.) {}
%%