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

Compilador - Área de trapecio

  • 1.
    CIS-IXB-001 UNIVERSIDAD NACIONAL DE LOJA ´Area dela 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 deun 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 deun 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: Activarel 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 Cupdel 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: Estructuradel 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: Estructuradel 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: Realizamoslas 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 elarchivo 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