compilador - Área de trapecio

10
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

Upload: byron-cabrera

Post on 30-Jul-2015

132 views

Category:

Engineering


6 download

TRANSCRIPT

CIS-IXB-001

UNIVERSIDADNACIONALDE LOJA

Area de la Energıa las Industrias y los Recursos Naturales No Renovables

Carrera de Ingenierıa en Sistemas

”Ejemplo del compilador Area deun Trapecio”

Tarea - Extra Clase9 ”B”

Autor:

• Byron Gonzalo Cabrera Gallardo

Docente: Ing. Henry-Paz

Loja-Ecuador13/02/2015

1

ContentsA Area de un Trapecio 3

B Archivo Flex del ejemplo 4

C Archivo Cup del ejemplo 6

D Clase main 8

E Automata del Compilador 9

F Conclusiones 9

List of Figures1 Area de un Trapecio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Estructura del archivo Flex . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Estructura del archivo Flex . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Estructura del archivo Cup . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Estructura del archivo Cup . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Estructura del archivo Cup . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Ejecutor main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Automata 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 semuestra 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 numeros ingresados

• Para el calculo correcto se deberıa ingresar de la siguiente manera: 5,4,5 AreaTrapecio

ERRORESEn caso de no ingresar correctamente los valores se presentaras los siguientes errores.

• Al ingresar letras: ERROR LEXICO, SOLO SE DEBEN INGRESAR NUMEROSENTEROS.

• Al ingresar decimales: ERROR LEXICO, SOLO SE DEBEN INGRESAR NU-MEROS ENTEROS.

• Si falta algun numero, ya sea B,b,h: FAlTA EL TERCER NUMERO.

• Si falta la coma, ya sea en cualquier posicion: FAlTA UNA COMA EN SEGUNDONUMERO.

• Si no se coloca la palabra AreaTrapecio: FAlTA LA PALABRA RESERVADA«AreaTrapecio».

RESULTADOSi se ingresa todo correctamente el resultado seria.

• 6,4,2 AreaTrapecio

3

NUMERO: 6NUMERO: 4NUMERO: 2

EL AREA DEL TRAPECIO ES: 10

*********** Fin de ejecucion **********

B Archivo Flex del ejemploA continuacion 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: Importacion de paquetes.Linea 10: Segunda seccion.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 codigo entre %{ y %} representa el codigo java que sera copiado en elanalizador 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: numeros 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 semarca un token ilegal .

5

C Archivo Cup del ejemploA 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 incrustadirectamente en la clase parser.Linea 13-25: Metodo para reportar errores sintacticos, este metodo encuentra el error loomite 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 especifi-cada, 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 ladoizquierdo.Linea 18: Concatena la palabra ”Error” con la frase ”in line”, y muestra en que linea seencuentra el error.Linea 19: Comprueba si la informacion symbol es mayor o igual a cero, pero en ladoderecho.Linea 20: Concatena la palabra ”Error” con la frase ”column”, y muestra en que columnase 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 metodo sirve cuando se encuentra un error de donde el sistema nopuede recuperarse, se lanza un error fatal. Se despliega el mensaje de error y finaliza laejecucion, recibe el mensaje y el valor de la informacion.Linea 31: Llama al metodo report error y le envıa 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: Anadimos 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.

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 expresion.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 metodo calcular area y le enviamos los parametros.

D Clase mainA continuacion 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 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 delarchivo 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.

E Automata del CompiladorA continuacion veremos el automata del compilador, el cual acepta la entrada del archivotxt. 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

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 segun los requiera.

• Cup es la herramienta principal de todo el proceso, se encarga de ir pidiendo a Jflexlos 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 deanalisis, dentro de las reglas de la gramatica del lenguaje a compilar.

• Se puede desarrollar un compilador totalmente adaptado a nuestras necesidadesbasandonos en la teorıa 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-y-cup/#.VN0i4CuG-wQ

[4] Proyecto completo del Compilador, Disponible en: https://mega.co.nz/#!MxgTkZ7C!ea-i8BhLuzgO4p4tyO6bikuHHrYCshQk7HuNMw0tm9Q

10