Вы находитесь на странице: 1из 7

Escuela Politcnica Nacional

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

rbol Sintctico para: (3+(5+7)+8)


Tendr la estructura (numero+(numero + numero) + numero)
E

PAA

PAC

MAS

MAS

PAA

PAC

MAS

NUMERO

NUMERO

NUMERO

rbol Sintctico para: 7-3


Tendr la estructura numero numero

E
E

MENOS
NUMERO

E
NUMERO

Lenguaje ensamblador para una Suma del tipo a +b


li $a0 a
sw $a0 0($sp)
addiu $sp $sp -4
li $a0 b
lw $t1 4($sp)
add $a0 $a0 $t1
addiu $sp $sp 4

Lenguaje ensamblador para un Resta del tipo a - b


li $a0 a
sw $a0 0($sp)
addiu $sp $sp -4
li $a0 b
lw $t1 4($sp)
sub $a0 $a0 $t1
addiu $sp $sp 4
**Utilizamos la operacin sub para la resta

Anlisis de los archivos:


Compilar.sh

Como utilizaremos estos comandos continuamente cada vez que necesitemos


modificar algn archivo, generamos un archivo automtico que lo realice
Hay que tomar en cuenta el orden de los comandos en la ltima lnea puesto que
puede originar errores porque no se reconocen en el momento que se necesitan
alguna libreras
Para ejecutar basta con poner ./analizador

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}

NOTAS PARA TOMAR EN CUENTA

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

Especificamos los tipos de datos


Esto lo realizamos para poder utilizar diferentes tipos de datos en los terminales y no
terminales

Start: Indica la produccin que inicia nuestra gramtica


Token: Indica los terminales y se puede especificar el tipo de dato
Type: Indica los no terminales y se puede especificar el tipo de dato
%left indica que ser asociativa a la izquierda

*Falta parte de la imagen al lado derecho, por motivo de tamao no es posible incluirla

Ingresamos las reglas gramaticales con la estructura


E: Algo {que hace} | Algo2 {que hace} | . ;

Con $$ asignamos el valor de la derecha a la izquierda, con la estructura:


A

Numero

|D

$$

$1

$2

$3

| $1

$2

$3

...

Esta funcin es la que se llama cuando encuentra un error sintctico

*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:

Partir de una expresin regular de lo que se desea realizar en hoja.

Realizar el rbol sintctico para una mejor comprensin.

Manejar las herramientas utilizadas.

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

Вам также может понравиться