compilador - Área de trapecio
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