Академический Документы
Профессиональный Документы
Культура Документы
Oscar Loor
Sonia Jaguaco
Compiladores y Lenguajes
Laboratorio
2015-01-15
Generador de Cdigo mediante anlisis lxico y sintctico, para sumas y restas
Introduccin
Deseamos crear un programa capaz de reconocer errores lxicos y sintcticos de forma que
nos permita generar automticamente cdigo ensamblador para sumas y restas ya sean con
parntesis o no.
Definicin de la gramtica
E -> NUMERO | E MAS E | E MENOS E | PAA E PAC
Donde:
E
Numero
Mas
Menos
PAA
PAC
: Nodo Inicial
: es cualquier numero flotante | Nodo Terminal
: operador + | Nodo Terminal
: operador - | Nodo Terminal
: Parntesis abierto | Nodo Terminal
: Parntesis cerrado | Nodo Terminal
PAA
PAC
MAS
MAS
PAA
PAC
MAS
NUMERO
NUMERO
NUMERO
E
E
MENOS
NUMERO
E
NUMERO
Lexico.l
1) Incluimos las libreras bsicas y se agrega una librera sintctico.tab.h que se crea al
momento de ejecutar BISON
2) Creamos las expresiones regulares teniendo en cuenta:
Creo el token class DIGITO para utilizarla es {DIGITO}
Creo el token class NUMERO este puede ser un digito o digito.digito para utilizarla
es {NUMERO}
o + -> 1 a muchos
o ? -> 0 o 1
3) Creamos las reglas o lo que har el archivo una vez identifique las token class
Token class
{Que hace}
Cada vez que se encuentra en el texto a analizar la token class yylex() devuelve un
token analizador sintctico, si esta token class tena un valor asociado se guarda este
valor en la variable yylval
Por tal motivo nos referimos a yylval.real donde .real significa que nos estamos
refiriendo a este dato que se encuentra en sintctico.y de la siguiente forma
%union
{
float real;
}
La funcin atof convierte un argumento string a un punto flotante
Yytex es una variable tipo puntero que apunta a char, cuando se reconocen
componentes lxicos muy largos el buffer no tendr overflows porque flex va
asignando memoria dinmicamente , se puede utilizar yytext como un array en caso
de necesitarlo
El punto . Significa que lo analizado no coincide con alguna token class
Sintactico.y
La declaracin extern sirve para que entienda que la variable se encontrar en algn
lugar como una variable global (Tanto yylex como yytext se encuentran en el archivo
lxico.l)
La variable del tipo FILE *yyin, contiene la descripcin del fichero que contiene el
programa que est procesando el analizador lxico
Declaramos una funcin como lo exige C, en este caso yyerror ser una funcin cuando
Bison detecta un error sintctico
*Falta parte de la imagen al lado derecho, por motivo de tamao no es posible incluirla
Numero
|D
$$
$1
$2
$3
| $1
$2
$3
...
*Falta parte de la imagen al lado derecho, por motivo de tamao no es posible incluirla
Esta es la funcin principal del programa, yyparse() comienza el anlisis pidiendo como entrada
lo que vamos a analizar
Resultados
Suma
Resta
CONCLUSIONES:
Verificamos las etapas de anlisis lxico y anlisis sintctico de una forma prctica para
esto utilizamos herramientas que nos ayudan con disminuir las lneas de programacin
como los son FLEX y BISON, si bien al principio puede ser un poco complejo, podemos
practicarlo como en este caso lo utilizamos para realizar la generacin de cdigo de
manera automtica
RECOMENDACIONES:
BIBLIOGRAFA:
Marina de la Cruz y Alfonso Ortega, Construccin de una calculadora con Lex/Flex y Yaac/Bison
[online] Disponible en:
http://astreo.ii.uam.es/~alfonso/web_compiladores_03/practicas/calculadora_03_04_web.pd
f
David, Ejemplo Flex y Bison [online] Disponible en:
http://inghobbit.blogspot.com/2011/04/ejemplo-flex-y-bison.html