SlideShare una empresa de Scribd logo
1 de 10
Descargar para leer sin conexión
CIS-IXB-001
UNIVERSIDAD
NACIONAL
DE LOJA
´Area de la Energ´ıa las Industrias y los Recursos Naturales No Renovables
Carrera de Ingenier´ıa 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
1
Contents
A ´Area de un Trapecio 3
B Archivo Flex del ejemplo 4
C Archivo Cup del ejemplo 6
D Clase main 8
E Aut´omata del Compilador 9
F Conclusiones 9
List of Figures
1 ´Area de un Trapecio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 Estructura del archivo Flex . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3 Estructura del archivo Flex . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4 Estructura del archivo Cup . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
5 Estructura del archivo Cup . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
6 Estructura del archivo Cup . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
7 Ejecutor main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
8 Aut´omata del Compilador . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
A ´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 f´ormula.
Figure 1: ´Area de un Trapecio
A continuaci´on detallaremos las VARIABLES y OPERADORES reservados.
• ”AreaTrapecio” : sirve para calcular el ´area.
• ”,” : sirve para separar los n´umeros ingresados
• Para el c´alculo correcto se deber´ıa 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 NU-
MEROS ENTEROS.
• Si falta alg´un n´umero, ya sea B,b,h: FAlTA EL TERCER NUMERO.
• Si falta la coma, ya sea en cualquier posici´on: FAlTA UNA COMA EN SEGUNDO
N´UMERO.
• 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
3
N´UMERO: 6
N´UMERO: 4
N´UMERO: 2
EL ´AREA DEL TRAPECIO ES: 10
*********** Fin de ejecuci´on **********
B Archivo Flex del ejemplo
A continuaci´on veremos como esta estructurado el archivo Flex.
Figure 2: Estructura del archivo Flex
Linea 5: Escribimos el paquete donde se encuentra nuestro archivo flex.
Linea 7-8: Importaci´on de paquetes.
Linea 10: Segunda secci´on.
Linea 13: Nombre de la clase.
Linea 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 c´odigo entre %{ y %} representa el c´odigo java que sera copiado en el
analizador l´exico.
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 secci´on.
Linea 40,52: Es el estado inicial del analizador l´exico 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 .
5
C Archivo Cup del ejemplo
A continuaci´on veremos como esta estructurado el archivo Cup.
Figure 4: Estructura del archivo Cup
Linea 3: Escribimos el nombre del paquete.
Linea 5,6: Importaci´on de paquetes.
Linea 9: Inicio del parser, c´odigo que flexibiliza el uso del parser, este c´odigo se incrusta
directamente en la clase parser.
Linea 13-25: M´etodo para reportar errores sint´acticos, este m´etodo encuentra el error lo
omite y continua con la ejecuci´on, recibe el mensaje y el valor de la informaci´on.
Linea 14: Inicializa una nueva instancia de la clase StringBuilder con la cadena especifi-
cada, guarda la cadena ”Error” en la variable m.
Linea 15: Comprueba que la informaci´on que se recibe sea de tipo simbol.
Linea 16: la informaci´on que se recibi´o la guardamos en la variable s.
Linea 17: Comprueba si la informaci´on 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 informaci´on 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.
6
Figure 5: Estructura del archivo Cup
Linea 30-33: Este m´etodo 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
ejecuci´on, recibe el mensaje y el valor de la informaci´on.
Linea 31: Llama al m´etodo report error y le env´ıa los par´ametros.
Linea 32: Finaliza la ejecuci´on .
Linea 37-46: M´etodo main para garantizar la ejecuci´on del analizador l´exico y sint´actico,
recibe un String.
Linea 38: A˜nadimos la cl´ausula 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: M´etodo para calcular el ´area del trapecio,recibimos los tres par´ametros.
Linea 50: Inicializamos la variable en cero.
Linea 51: F´ormula del ´area del trapecio.
Linea 52: Imprime el resultado.
Linea 55: Fin del parser code.
7
Figure 6: Estructura del archivo Cup
Linea 58: Declaramos las terminales.
Linea 59: Declaramos las terminales de tipo Integer.
Linea 62: Declaramos las no terminales de tipo Object.
Linea 66: Inicia la expresi´on.
Linea 68: Verifica el primer numero, ” ,4,2 AreaTrapecio”.
Linea 69: Verifica la primera coma, ” 6 4,2 AreaTrapecio”.
Linea 70: Verifica el segundo numero, ” 6, ,2 AreaTrapecio”.
Linea 71: Verifica la segunda coma, ” 6,4 2 AreaTrapecio”.
Linea 72: Verifica el tercer numero, ” 6,4, AreaTrapecio”.
Linea 73: Verifica fin linea, ” 6,4,2 ”.
Linea 75: Llamamos al m´etodo calcular ´area y le enviamos los par´ametros.
D Clase main
A continuaci´on veremos como se ejecuta el compilador en la clase main.
Figure 7: Ejecutor main
8
Linea 5,6: Realizamos las importaciones.
Linea 13: Creamos el m´etodo 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: M´etodo para ejecutar el archivo flex y crear el archivo.java.
Linea 20: M´etodo 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 m´etodo enviamos el archivo txt al main del analizador sint´actico.
E Aut´omata del Compilador
A continuaci´on veremos el aut´omata del compilador, el cual acepta la entrada del archivo
txt. ejmeplo: 8,2,6 AreaTrapecio
Figure 8: Aut´omata del Compilador
En el siguiente link podemos encontrar el c´odigo fuente del compilador.
https://github.com/byron-cabrera-666/Compilador---Area-de-un-Trapecio
F 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 c´odigo necesario para el an´alisis sint´actico.
9
• Mediante el archivo Cup se puede ejecutar c´odigo java para realizar su trabajo de
an´alisis, dentro de las reglas de la gram´atica del lenguaje a compilar.
• Se puede desarrollar un compilador totalmente adaptado a nuestras necesidades
bas´andonos en la teor´ıa de compiladores.
References
[1] Rafael A Vega Castro, Integraci´on de Jflex y Cup (Analizadores lexico y sint´actico)),
2008, Disponible en: http://www.rafaelvega.com/wp-content/uploads/Articulo.pdf
[2] UNIVERSIDAD DE SEVILLA E. T. S. INGENIER´IA INFORM´ATICA, LENGUA-
JES Y SISTEMAS INFORM´ATICOS,2007, Disponible en: http://www.lsi.us.es/
docencia/get.php?id=5831
[3] Analizador l´exico, sint´actico y sem´antico 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

Más contenido relacionado

La actualidad más candente

Archivos de Cabecera.
Archivos de Cabecera.Archivos de Cabecera.
Archivos de Cabecera.
Luis Stifler
 
Bibliotecas en c
Bibliotecas en cBibliotecas en c
Bibliotecas en c
demata
 
Librerias en-lenguaje-c
Librerias en-lenguaje-cLibrerias en-lenguaje-c
Librerias en-lenguaje-c
Kevin2811
 

La actualidad más candente (20)

Bibliotecas o libreria de c++
Bibliotecas o libreria de c++Bibliotecas o libreria de c++
Bibliotecas o libreria de c++
 
Archivos de Cabecera.
Archivos de Cabecera.Archivos de Cabecera.
Archivos de Cabecera.
 
Librerias ansi c
Librerias ansi cLibrerias ansi c
Librerias ansi c
 
Bibliotecas de c_
Bibliotecas de c_Bibliotecas de c_
Bibliotecas de c_
 
Tutorial C++
Tutorial C++Tutorial C++
Tutorial C++
 
Bibliotecas en c
Bibliotecas en cBibliotecas en c
Bibliotecas en c
 
Librerias de C++
Librerias de C++Librerias de C++
Librerias de C++
 
Sintaxis funciones c++
Sintaxis funciones c++Sintaxis funciones c++
Sintaxis funciones c++
 
Programación C++ - DEV C++
Programación C++ - DEV C++Programación C++ - DEV C++
Programación C++ - DEV C++
 
Ficheros de cabecera
Ficheros de cabecera Ficheros de cabecera
Ficheros de cabecera
 
Librerias en-lenguaje-c
Librerias en-lenguaje-cLibrerias en-lenguaje-c
Librerias en-lenguaje-c
 
Programación C++
Programación C++Programación C++
Programación C++
 
Libreria c++
Libreria c++Libreria c++
Libreria c++
 
Manual80x86
Manual80x86Manual80x86
Manual80x86
 
C++
C++C++
C++
 
Creacion de una librería propia en C
Creacion de una librería propia en CCreacion de una librería propia en C
Creacion de una librería propia en C
 
Curso básico de ensamblador
Curso básico de ensambladorCurso básico de ensamblador
Curso básico de ensamblador
 
ESTRUCTURA BASICA PARA C++
ESTRUCTURA BASICA PARA C++ESTRUCTURA BASICA PARA C++
ESTRUCTURA BASICA PARA C++
 
Programas en lenguaje ensamblador
Programas en lenguaje ensambladorProgramas en lenguaje ensamblador
Programas en lenguaje ensamblador
 
Tutorial C
Tutorial CTutorial C
Tutorial C
 

Similar a Compilador - Área de trapecio

Xilinx aprender abrirlo
Xilinx aprender abrirloXilinx aprender abrirlo
Xilinx aprender abrirlo
Duvan Rincon
 
Cuestionario Fundamentos de Programación
Cuestionario Fundamentos de ProgramaciónCuestionario Fundamentos de Programación
Cuestionario Fundamentos de Programación
Anita Albán
 

Similar a Compilador - Área de trapecio (20)

Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo.
Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo.Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo.
Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo.
 
Compilador para la generación de código a partir de las iniciales de los nomb...
Compilador para la generación de código a partir de las iniciales de los nomb...Compilador para la generación de código a partir de las iniciales de los nomb...
Compilador para la generación de código a partir de las iniciales de los nomb...
 
Documeto compilardorcontadorletras
Documeto compilardorcontadorletrasDocumeto compilardorcontadorletras
Documeto compilardorcontadorletras
 
Analizador de una matriz utilizando compiladores
Analizador de una matriz utilizando compiladoresAnalizador de una matriz utilizando compiladores
Analizador de una matriz utilizando compiladores
 
Ejercicio compiladores
Ejercicio compiladoresEjercicio compiladores
Ejercicio compiladores
 
Raúl A Gómez A -> Compilador Cambia de Color a una palabra ingresada
Raúl  A Gómez A -> Compilador Cambia de Color  a una palabra ingresadaRaúl  A Gómez A -> Compilador Cambia de Color  a una palabra ingresada
Raúl A Gómez A -> Compilador Cambia de Color a una palabra ingresada
 
Informe compilador divisor
Informe compilador divisorInforme compilador divisor
Informe compilador divisor
 
Compilador concatenacion
Compilador concatenacionCompilador concatenacion
Compilador concatenacion
 
Compilador divisor de cantidades con Jflex y Cup
Compilador divisor de cantidades con Jflex y CupCompilador divisor de cantidades con Jflex y Cup
Compilador divisor de cantidades con Jflex y Cup
 
Compilador (divisor de cantidades )
Compilador (divisor de cantidades )Compilador (divisor de cantidades )
Compilador (divisor de cantidades )
 
Xilinx aprender abrirlo
Xilinx aprender abrirloXilinx aprender abrirlo
Xilinx aprender abrirlo
 
Compilador Convertidor de Divisas
Compilador Convertidor de DivisasCompilador Convertidor de Divisas
Compilador Convertidor de Divisas
 
Analizador Lexico
Analizador LexicoAnalizador Lexico
Analizador Lexico
 
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
 
Taller carga datos + JAVA
Taller carga datos + JAVATaller carga datos + JAVA
Taller carga datos + JAVA
 
Compilador sobre conversión de unidades
Compilador sobre conversión de unidadesCompilador sobre conversión de unidades
Compilador sobre conversión de unidades
 
Computación 3
Computación 3Computación 3
Computación 3
 
Laboratorio 3
Laboratorio 3Laboratorio 3
Laboratorio 3
 
Cuestionario Fundamentos de Programación
Cuestionario Fundamentos de ProgramaciónCuestionario Fundamentos de Programación
Cuestionario Fundamentos de Programación
 
Computación 2
Computación 2Computación 2
Computación 2
 

Último

Tipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplosTipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplos
andersonsubero28
 
3.6.2 Lab - Implement VLANs and Trunking - ILM.pdf
3.6.2 Lab - Implement VLANs and Trunking - ILM.pdf3.6.2 Lab - Implement VLANs and Trunking - ILM.pdf
3.6.2 Lab - Implement VLANs and Trunking - ILM.pdf
GustavoAdolfoDiaz3
 

Último (20)

27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt
 
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico EcuatorianoEstadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
 
422382393-Curso-de-Tableros-Electricos.pptx
422382393-Curso-de-Tableros-Electricos.pptx422382393-Curso-de-Tableros-Electricos.pptx
422382393-Curso-de-Tableros-Electricos.pptx
 
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdfNTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
 
Cereales tecnología de los alimentos. Cereales
Cereales tecnología de los alimentos. CerealesCereales tecnología de los alimentos. Cereales
Cereales tecnología de los alimentos. Cereales
 
DIAPOSITIVAS DE SEGURIDAD Y SALUD EN EL TRABAJO
DIAPOSITIVAS DE SEGURIDAD Y SALUD EN EL TRABAJODIAPOSITIVAS DE SEGURIDAD Y SALUD EN EL TRABAJO
DIAPOSITIVAS DE SEGURIDAD Y SALUD EN EL TRABAJO
 
ingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptxingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptx
 
2. Cristaloquimica. ingenieria geologica
2. Cristaloquimica. ingenieria geologica2. Cristaloquimica. ingenieria geologica
2. Cristaloquimica. ingenieria geologica
 
Aportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
Aportes a la Arquitectura de Le Corbusier y Mies Van der RoheAportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
Aportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
 
Tipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplosTipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplos
 
ELASTICIDAD PRECIO DE LA DEMaaanANDA.ppt
ELASTICIDAD PRECIO DE LA DEMaaanANDA.pptELASTICIDAD PRECIO DE LA DEMaaanANDA.ppt
ELASTICIDAD PRECIO DE LA DEMaaanANDA.ppt
 
Matrices Matemáticos universitario pptx
Matrices  Matemáticos universitario pptxMatrices  Matemáticos universitario pptx
Matrices Matemáticos universitario pptx
 
Determinación de espacios en la instalación
Determinación de espacios en la instalaciónDeterminación de espacios en la instalación
Determinación de espacios en la instalación
 
3.6.2 Lab - Implement VLANs and Trunking - ILM.pdf
3.6.2 Lab - Implement VLANs and Trunking - ILM.pdf3.6.2 Lab - Implement VLANs and Trunking - ILM.pdf
3.6.2 Lab - Implement VLANs and Trunking - ILM.pdf
 
Video sustentación GA2- 240201528-AA3-EV01.pptx
Video sustentación GA2- 240201528-AA3-EV01.pptxVideo sustentación GA2- 240201528-AA3-EV01.pptx
Video sustentación GA2- 240201528-AA3-EV01.pptx
 
GUIA DE SEGURIDAD PARA VENTILACION DE MINAS-POSITIVA.pdf
GUIA DE SEGURIDAD PARA VENTILACION DE MINAS-POSITIVA.pdfGUIA DE SEGURIDAD PARA VENTILACION DE MINAS-POSITIVA.pdf
GUIA DE SEGURIDAD PARA VENTILACION DE MINAS-POSITIVA.pdf
 
Aportes a la Arquitectura de Le Corbusier y Mies Van Der Rohe.pdf
Aportes a la Arquitectura de Le Corbusier y Mies Van Der Rohe.pdfAportes a la Arquitectura de Le Corbusier y Mies Van Der Rohe.pdf
Aportes a la Arquitectura de Le Corbusier y Mies Van Der Rohe.pdf
 
ATS-FORMATO cara.pdf PARA TRABAJO SEGURO
ATS-FORMATO cara.pdf  PARA TRABAJO SEGUROATS-FORMATO cara.pdf  PARA TRABAJO SEGURO
ATS-FORMATO cara.pdf PARA TRABAJO SEGURO
 
Presentación de Redes de alcantarillado y agua potable
Presentación de Redes de alcantarillado y agua potablePresentación de Redes de alcantarillado y agua potable
Presentación de Redes de alcantarillado y agua potable
 
TAIICHI OHNO, historia, obras, reconocimientos
TAIICHI OHNO, historia, obras, reconocimientosTAIICHI OHNO, historia, obras, reconocimientos
TAIICHI OHNO, historia, obras, reconocimientos
 

Compilador - Área de trapecio

  • 1. CIS-IXB-001 UNIVERSIDAD NACIONAL DE LOJA ´Area de la Energ´ıa las Industrias y los Recursos Naturales No Renovables Carrera de Ingenier´ıa 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 1
  • 2. Contents A ´Area de un Trapecio 3 B Archivo Flex del ejemplo 4 C Archivo Cup del ejemplo 6 D Clase main 8 E Aut´omata del Compilador 9 F Conclusiones 9 List of Figures 1 ´Area de un Trapecio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 Estructura del archivo Flex . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3 Estructura del archivo Flex . . . . . . . . . . . . . . . . . . . . . . . . . . 5 4 Estructura del archivo Cup . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 5 Estructura del archivo Cup . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 6 Estructura del archivo Cup . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 7 Ejecutor main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8 Aut´omata del Compilador . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
  • 3. A ´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 f´ormula. Figure 1: ´Area de un Trapecio A continuaci´on detallaremos las VARIABLES y OPERADORES reservados. • ”AreaTrapecio” : sirve para calcular el ´area. • ”,” : sirve para separar los n´umeros ingresados • Para el c´alculo correcto se deber´ıa 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 NU- MEROS ENTEROS. • Si falta alg´un n´umero, ya sea B,b,h: FAlTA EL TERCER NUMERO. • Si falta la coma, ya sea en cualquier posici´on: FAlTA UNA COMA EN SEGUNDO N´UMERO. • 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 3
  • 4. N´UMERO: 6 N´UMERO: 4 N´UMERO: 2 EL ´AREA DEL TRAPECIO ES: 10 *********** Fin de ejecuci´on ********** B Archivo Flex del ejemplo A continuaci´on veremos como esta estructurado el archivo Flex. Figure 2: Estructura del archivo Flex Linea 5: Escribimos el paquete donde se encuentra nuestro archivo flex. Linea 7-8: Importaci´on de paquetes. Linea 10: Segunda secci´on. Linea 13: Nombre de la clase. Linea 15: Activar el contador de lineas, variable yyline. 4
  • 5. Linea 16: Activar el contador de columnas, variable yycolumn. Linea 17: Activar la compatibilidad con cup. Linea 19,31: El c´odigo entre %{ y %} representa el c´odigo java que sera copiado en el analizador l´exico. 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 secci´on. Linea 40,52: Es el estado inicial del analizador l´exico 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 . 5
  • 6. C Archivo Cup del ejemplo A continuaci´on veremos como esta estructurado el archivo Cup. Figure 4: Estructura del archivo Cup Linea 3: Escribimos el nombre del paquete. Linea 5,6: Importaci´on de paquetes. Linea 9: Inicio del parser, c´odigo que flexibiliza el uso del parser, este c´odigo se incrusta directamente en la clase parser. Linea 13-25: M´etodo para reportar errores sint´acticos, este m´etodo encuentra el error lo omite y continua con la ejecuci´on, recibe el mensaje y el valor de la informaci´on. Linea 14: Inicializa una nueva instancia de la clase StringBuilder con la cadena especifi- cada, guarda la cadena ”Error” en la variable m. Linea 15: Comprueba que la informaci´on que se recibe sea de tipo simbol. Linea 16: la informaci´on que se recibi´o la guardamos en la variable s. Linea 17: Comprueba si la informaci´on 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 informaci´on 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. 6
  • 7. Figure 5: Estructura del archivo Cup Linea 30-33: Este m´etodo 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 ejecuci´on, recibe el mensaje y el valor de la informaci´on. Linea 31: Llama al m´etodo report error y le env´ıa los par´ametros. Linea 32: Finaliza la ejecuci´on . Linea 37-46: M´etodo main para garantizar la ejecuci´on del analizador l´exico y sint´actico, recibe un String. Linea 38: A˜nadimos la cl´ausula 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: M´etodo para calcular el ´area del trapecio,recibimos los tres par´ametros. Linea 50: Inicializamos la variable en cero. Linea 51: F´ormula del ´area del trapecio. Linea 52: Imprime el resultado. Linea 55: Fin del parser code. 7
  • 8. Figure 6: Estructura del archivo Cup Linea 58: Declaramos las terminales. Linea 59: Declaramos las terminales de tipo Integer. Linea 62: Declaramos las no terminales de tipo Object. Linea 66: Inicia la expresi´on. Linea 68: Verifica el primer numero, ” ,4,2 AreaTrapecio”. Linea 69: Verifica la primera coma, ” 6 4,2 AreaTrapecio”. Linea 70: Verifica el segundo numero, ” 6, ,2 AreaTrapecio”. Linea 71: Verifica la segunda coma, ” 6,4 2 AreaTrapecio”. Linea 72: Verifica el tercer numero, ” 6,4, AreaTrapecio”. Linea 73: Verifica fin linea, ” 6,4,2 ”. Linea 75: Llamamos al m´etodo calcular ´area y le enviamos los par´ametros. D Clase main A continuaci´on veremos como se ejecuta el compilador en la clase main. Figure 7: Ejecutor main 8
  • 9. Linea 5,6: Realizamos las importaciones. Linea 13: Creamos el m´etodo 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: M´etodo para ejecutar el archivo flex y crear el archivo.java. Linea 20: M´etodo 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 m´etodo enviamos el archivo txt al main del analizador sint´actico. E Aut´omata del Compilador A continuaci´on veremos el aut´omata del compilador, el cual acepta la entrada del archivo txt. ejmeplo: 8,2,6 AreaTrapecio Figure 8: Aut´omata del Compilador En el siguiente link podemos encontrar el c´odigo fuente del compilador. https://github.com/byron-cabrera-666/Compilador---Area-de-un-Trapecio F 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 c´odigo necesario para el an´alisis sint´actico. 9
  • 10. • Mediante el archivo Cup se puede ejecutar c´odigo java para realizar su trabajo de an´alisis, dentro de las reglas de la gram´atica del lenguaje a compilar. • Se puede desarrollar un compilador totalmente adaptado a nuestras necesidades bas´andonos en la teor´ıa de compiladores. References [1] Rafael A Vega Castro, Integraci´on de Jflex y Cup (Analizadores lexico y sint´actico)), 2008, Disponible en: http://www.rafaelvega.com/wp-content/uploads/Articulo.pdf [2] UNIVERSIDAD DE SEVILLA E. T. S. INGENIER´IA INFORM´ATICA, LENGUA- JES Y SISTEMAS INFORM´ATICOS,2007, Disponible en: http://www.lsi.us.es/ docencia/get.php?id=5831 [3] Analizador l´exico, sint´actico y sem´antico 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