Está en la página 1de 10

CIS-IXB-001

UNIVERSIDAD
NACIONAL
DE LOJA

Area
de la Energa las Industrias y los Recursos Naturales No Renovables

Carrera de Ingeniera en Sistemas

Ejemplo del compilador Area


de
un Trapecio

Tarea - Extra Clase


9 B

Autor:
Byron Gonzalo Cabrera Gallardo

Docente: Ing. Henry-Paz

Loja-Ecuador
13/02/2015

Contents

A Area
de un Trapecio

B Archivo Flex del ejemplo

C Archivo Cup del ejemplo

D Clase main

E Aut
omata del Compilador

F Conclusiones

List of Figures
1
2
3
4
5
6
7
8

Area
de un Trapecio . . . .
Estructura del archivo Flex
Estructura del archivo Flex
Estructura del archivo Cup .
Estructura del archivo Cup .
Estructura del archivo Cup .
Ejecutor main . . . . . . . .
Automata del Compilador .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

3
4
5
6
7
8
8
9

Area
de un Trapecio

En el siguiente ejemplo se pretende resolver el area de un trapecio usando un compilador,


primero se ingresa la base mayor (B), base menor (b) y por ultimo la altura (h), como se
muestra en la formula.

Figure 1: Area
de un Trapecio
A continuacion detallaremos las VARIABLES y OPERADORES reservados.
AreaTrapecio : sirve para calcular el area.
, : sirve para separar los n
umeros ingresados
Para el calculo correcto se debera ingresar de la siguiente manera: 5,4,5 AreaTrapecio
ERRORES
En caso de no ingresar correctamente los valores se presentaras los siguientes errores.
Al ingresar letras: ERROR LEXICO, SOLO SE DEBEN INGRESAR NUMEROS
ENTEROS.
Al ingresar decimales: ERROR LEXICO, SOLO SE DEBEN INGRESAR NUMEROS ENTEROS.
Si falta alg
un n
umero, ya sea B,b,h: FAlTA EL TERCER NUMERO.
Si falta la coma, ya sea en cualquier posicion: FAlTA UNA COMA EN SEGUNDO

NUMERO.
Si no se coloca la palabra AreaTrapecio: FAlTA LA PALABRA RESERVADA
AreaTrapecio.
RESULTADO
Si se ingresa todo correctamente el resultado seria.
6,4,2 AreaTrapecio


NUMERO:
6

NUMERO:
4

NUMERO: 2

EL AREA
DEL TRAPECIO ES: 10
*********** Fin de ejecucion **********

Archivo Flex del ejemplo

A continuacion veremos como esta estructurado el archivo Flex.

Figure 2: Estructura del archivo Flex


Linea
Linea
Linea
Linea
Linea

5: Escribimos el paquete donde se encuentra nuestro archivo flex.


7-8: Importacion de paquetes.
10: Segunda seccion.
13: Nombre de la clase.
15: Activar el contador de lineas, variable yyline.
4

Linea 16: Activar el contador de columnas, variable yycolumn.


Linea 17: Activar la compatibilidad con cup.
Linea 19,31: El codigo entre %{ y %} representa el codigo java que sera copiado en el
analizador lexico.
Linea 22-24: Generamos un java cup.Symbol para guardar el tipo de token encontrado.
Linea 28-30: Generamos un Symbol para el tipo de token encontrado junto con su valor.

Figure 3: Estructura del archivo Flex


Linea 35: salto de linea.
Linea 36: Espacio en blanco, tabulador \t, avance de pagina \f .
Linea 37: n
umeros enteros.
Linea 39: tercera seccion.
Linea 40,52: Es el estado inicial del analizador lexico al escanear..
Linea 45: Regresa el token COMA declarado en la clase sym que fue encontrado.
Linea 46: Regresa el token finLinea declarado en la clase sym que fue encontrado.
Linea 47: Regresa el token NUMERO declarado en la clase sym que fue encontrado.
Linea 50: Ignora el espacio .
Linea 51: Si el token contenido en la entrada no coincide con ninguna regla entonces se
marca un token ilegal .

Archivo Cup del ejemplo

A continuacion veremos como esta estructurado el archivo Cup.

Figure 4: Estructura del archivo Cup


Linea 3: Escribimos el nombre del paquete.
Linea 5,6: Importacion de paquetes.
Linea 9: Inicio del parser, codigo que flexibiliza el uso del parser, este codigo se incrusta
directamente en la clase parser.
Linea 13-25: Metodo para reportar errores sintacticos, este metodo encuentra el error lo
omite y continua con la ejecucion, recibe el mensaje y el valor de la informacion.
Linea 14: Inicializa una nueva instancia de la clase StringBuilder con la cadena especificada, guarda la cadena Error en la variable m.
Linea 15: Comprueba que la informacion que se recibe sea de tipo simbol.
Linea 16: la informacion que se recibio la guardamos en la variable s.
Linea 17: Comprueba si la informacion symbol es mayor o igual a cero, pero en lado
izquierdo.
Linea 18: Concatena la palabra Error con la frase in line, y muestra en que linea se
encuentra el error.
Linea 19: Comprueba si la informacion symbol es mayor o igual a cero, pero en lado
derecho.
Linea 20: Concatena la palabra Error con la frase column, y muestra en que columna
se encuentra el error.
Linea 23: Concatena : con el mensaje de error.
Linea 24: Imprime el error.

Figure 5: Estructura del archivo Cup


Linea 30-33: Este metodo sirve cuando se encuentra un error de donde el sistema no
puede recuperarse, se lanza un error fatal. Se despliega el mensaje de error y finaliza la
ejecucion, recibe el mensaje y el valor de la informacion.
Linea 31: Llama al metodo report error y le enva los parametros.
Linea 32: Finaliza la ejecucion .
Linea 37-46: Metodo main para garantizar la ejecucion del analizador lexico y sintactico,
recibe un String.
Linea 38: A
nadimos la clausula try y catch.
Linea 39: Creamos una instancia de la clase AnalizadorSintactico.
Linea 40: Sirve para leer el archivo txt.
Linea 41: Ejecutar el parse.
Linea 42: Imprime un mensaje.
Linea 49-53: Metodo para calcular el area del trapecio,recibimos los tres parametros.
Linea 50: Inicializamos la variable en cero.
Linea 51: Formula del area del trapecio.
Linea 52: Imprime el resultado.
Linea 55: Fin del parser code.

Figure 6: Estructura del archivo Cup


Linea
Linea
Linea
Linea
Linea
Linea
Linea
Linea
Linea
Linea
Linea

58:
59:
62:
66:
68:
69:
70:
71:
72:
73:
75:

Declaramos las terminales.


Declaramos las terminales de tipo Integer.
Declaramos las no terminales de tipo Object.
Inicia la expresion.
Verifica el primer numero, ,4,2 AreaTrapecio.
Verifica la primera coma, 6 4,2 AreaTrapecio.
Verifica el segundo numero, 6, ,2 AreaTrapecio.
Verifica la segunda coma, 6,4 2 AreaTrapecio.
Verifica el tercer numero, 6,4, AreaTrapecio.
Verifica fin linea, 6,4,2 .
Llamamos al metodo calcular area y le enviamos los parametros.

Clase main

A continuacion veremos como se ejecuta el compilador en la clase main.

Figure 7: Ejecutor main

Linea 5,6: Realizamos las importaciones.


Linea 13: Creamos el metodo main.
Linea 15: Guardamos la ruta del archivo Flex en la variable path.
Linea 16: Guardamos la ruta del archivo Cup en la variable area.
Linea 17: Guardamos la variable path en una array de tipo String.
Linea 18: Le asignamos a la variable sintac -parser, para que se ejecute el archivo Cup,
el nombre del archivo.java que se va a crear y la variable donde se encuentra la ruta del
archivo Cup.
Linea 19: Metodo para ejecutar el archivo flex y crear el archivo.java.
Linea 20: Metodo para ejecutar el archivo cup y crear los dos archivos.java.
Linea 22: Ruta de la entrada txt que va analizar el compilador.
Linea 23: Con este metodo enviamos el archivo txt al main del analizador sintactico.

Aut
omata del Compilador

A continuacion veremos el automata del compilador, el cual acepta la entrada del archivo
txt. ejmeplo: 8,2,6 AreaTrapecio

Figure 8: Automata del Compilador


En el siguiente link podemos encontrar el codigo fuente del compilador.
https://github.com/byron-cabrera-666/Compilador---Area-de-un-Trapecio

Conclusiones
El fundamental respetar la estructura de los archivos Jflex y Cup para que no existan
inconvenientes al momento de programar el compilador.
El archivo Jflex proporciona a Cup todos los tokens seg
un los requiera.
Cup es la herramienta principal de todo el proceso, se encarga de ir pidiendo a Jflex
los lexemas validos a analizar y genera el codigo necesario para el analisis sintactico.
9

Mediante el archivo Cup se puede ejecutar codigo java para realizar su trabajo de
analisis, dentro de las reglas de la gramatica del lenguaje a compilar.
Se puede desarrollar un compilador totalmente adaptado a nuestras necesidades
basandonos en la teora de compiladores.

References
[1] Rafael A Vega Castro, Integracion de Jflex y Cup (Analizadores lexico y sintactico)),
2008, Disponible en: http://www.rafaelvega.com/wp-content/uploads/Articulo.pdf

[2] UNIVERSIDAD DE SEVILLA E. T. S. INGENIERIA INFORMATICA,


LENGUA
JES Y SISTEMAS INFORMATICOS,2007, Disponible en: http://www.lsi.us.es/
docencia/get.php?id=5831

[3] Analizador lexico, sintactico y semantico con JFlex y CUP, Disponible en: http://
crysol.github.io/recipe/2007-12-10/analizador-lxico-sintctico-y-semntico-con-jflex#.VN0i4CuG-wQ
[4] Proyecto completo del Compilador, Disponible en: https://mega.co.nz/#!MxgTkZ7C!
ea-i8BhLuzgO4p4tyO6bikuHHrYCshQk7HuNMw0tm9Q

10

También podría gustarte