compilador para calcular el área de figuras triangulo, cuadrado y rectángulo

16
CIS UNIVERSIDAD NACIONAL DE LOJA ´ Area de la Energ´ ıa las Industrias y los Recursos Naturales No Renovables Carrera de Ingenier ´ ıa en Sistemas Compilador para calcular el ´ area de figuras geom´ etricas: cuadrado, tri´ angulo y rect´ angulo oveno B Autor: Paola Morocho Ar´ evalo Tutor: Ing.: Henry Paz Loja-Ecuador 2015 1

Upload: paola-morocho-arevalo

Post on 29-Jul-2015

439 views

Category:

Engineering


5 download

TRANSCRIPT

Page 1: Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo

CIS

UNIVERSIDADNACIONALDE LOJA

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

Carrera de Ingenierıa en Sistemas

Compilador para calcular el area defiguras geometricas: cuadrado,

triangulo y rectangulo

Noveno B

Autor:

• Paola Morocho Arevalo

Tutor: Ing.: Henry Paz

Loja-Ecuador2015

1

Page 2: Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo

Indice general

0.1. Tema: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30.2. Definicion del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30.3. Compilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30.4. Fases del Compilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

0.4.1. Analisis Lexico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30.4.2. Analisis Sintactico . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

0.5. Ubicacion del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140.6. Bibliografıa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150.7. Licencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2

Page 3: Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo

0.1. Tema:Compilador para calcular el area de cuadrado, triangulo y rectangulo

0.2. Definicion del problemaEl presente proyecto pretende resolver el problema de calcular areas de figuras geometri-

cas como el cuadrado, rectangulo y triangulo mediante un compilador.

El problema surgio con la necesidad de buscar alternativas de solucion a problemas comu-nes mediante nuevos conocimientos, esta vez se aplicaran conocimientos sobre Compilado-res siguiendo sus fases y aplicando herramientas que nos permitan la mejor comprensiondel problema.

0.3. CompiladorPara la construccion se utilizo las herramientas Flex y CUP que estan orientadas al

lenguaje de programacion Java y se trabajo en el IDE Netbeans.

0.4. Fases del Compilador

0.4.1. Analisis LexicoPara realizar el analisis lexico fue necesario definir los elementos que se utilizaran en

el desarrollo del problema, los elementos fueron los siguientes:

1. Variables:

BaseAlturaArea Total

2. Operador:

Calcular

3. Palabras Reservadas

TrianguloCuadradoRectangulo

Automata

A continuacion se observa el automata correspondiente al problema en cuestion, en elmismo se puede obervar la forma de las sentencias aceptadas.

3

Page 4: Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo

Figura 1: Automata

Archivo FLEX

Una vez identificados los componentes se procedio a construir el archivo Flex necesariopara la primera fase del compilador.

El archivo Flex debe tener una extension .flex y en el se colocara las expresiones regula-res y las reglas lexicas necesarias para que sean reconocidos los componentes anteriormentemencionados.

A continuacion se analizara el archivo AnalizadorLexico.flex del proyecto. Cabe des-tacar que esta dividido en 3 secciones.

1. Codigo de usuario En esta seccion se colocan los paquetes e importaciones. En lasiguiente figura se observa el nombre del paquete en el que se encuentra el archivoflex, ademas se ha importado los paquetes de la herramienta CUP para activarla compatibilidad del analizador lexico con la herramienta CUP, con la cual seconstruye el analizador sintactico.

Figura 2: Codigo de usuario

2. Opciones y declaraciones En esta seccion se construyen las expresiones regularesque seran utilizadas. En la siguiente figura se observa la seccion en cuestion; en lamisma se ha colocado las siguientes sentencias:

%class AnalizadorLexico: determina el nombre que tendra la clase .java queimplementa el analizador lexico%line: activa el contador de lıneas.%column: activa el contador de columnas.%cup: activa la compatibilidad con la herramienta CUP

Declaraciones:

A=[a-zA-Z]: determina el alfabeto que sera usado, en este caso consta de todoel abecedario en mayusculas y minusculas.

4

Page 5: Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo

N=[0-9]: determina los valores numericos que seran usados, en este caso es-tara en un rango de 0 a 9.WHITE = [ -t-n-r]: determina el conjunto de espacios en blanco constituido

por un espacio en blanco, tabulacion, salto de lınea y retorno de carro.

Metodos:Los metodos symbol retornan un objeto tipo Symbol que es usado por la herramientaCUP para determinar los tokens encontrados.El metodo manejarE() sirve para procesar una excepcion en caso de ingresarsecualquier caracter que no este dentro de los establecidos. Se lo declara como metodoya que tambien debe aparecer en la clase Java generada; ademas se reporta el errory permite que continue la ejecucion.

Figura 3: Opciones y declaraciones

3. Reglas LexicasEn la siguiente figura se puede apreciar las reglas lexicas usadas en el proyecto, endonde:((YYINITIAL)) Marca el estado inicial del analisis.

{WHITE} /*Ignore*/ se usa la declaracion anteriormente realizada y se da laorden de ignorar cualquier elemento perteneciente a la misma.Calcular”—calcular”return symbol(sym.OPERADOR);: Esta regla indica quesi es ingresado las palabras calcular, el token correspondera a Operador.

5

Page 6: Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo

N* return symbol(sym.VALORVARIABLE, new Integer(yytext()));: Se haceuso de la declaracion de la seccion anterior y se le anadio la cerradura de Kleene(*) que indica que aceptara cualquier combinacion de elementos.Cuadrado”—cuadrado”return symbol(sym.CUADRADO); ”Triangulo”—”triangulo”returnsymbol(sym.TRIANGULO); Rectangulo”—rectangulo”return symbol(sym.RECTANGULO);Estas tres declaraciones indican el token que se devolvera de acuerdo a lasfiguras ingresadas.”,”return symbol(sym.SEPARACION);: este regla indica el sımbolo de sepa-racion al ingresar las variables. Esto sera valido para las figuras triangulo yrectangulo. En donde se deben ingresar dos valores de la siguiente forma n1 ,n2.[.] manejarE(); Esta opcion hace una llamada al metodo declarado en laseccion anterior, en donde se maneja el error en caso de introducir un caracterincorrecto.

Figura 4: Reglas Lexicas

6

Page 7: Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo

0.4.2. Analisis SintacticoPara el analisis sintactico se trabajo con la herramienta CUP, la misma que trabaja con

un archivo .cup. Para la realizacion del proyecto, el archivo a analizar se ha denominadoAnalizadorSintactico.cup, el mismo que consta de las siguientes partes:

1. Importaciones y paquetesEn la figura siguiente se muestra el paquete correspondiente del proyecto y lasimportaciones. Las importaciones son las siguientes:

import java cup.runtime.* ; Esta importacion indica que se usaran todas lasclases correspondientes al paquete runtime perteneciente a CUP.import java.io.FileReader; Esta importacion permite la lectura de archivos.

A continuacion se muestra el grafico correspondiente.

Figura 5: Importaciones y paquetes

2. Codigo de usuario del parserEsta seccion debe ir entre los sımbolos {: codigo :}Aquı se declaran variables y metodos que seran usados en la clase java resultante.- Metodo de deteccion de erroresEl metodo de reporte de errores recibe como parametros un objeto tipo String, este servirapara armar el mensaje de error, y un objeto tipo Object, el mismo que servira para verificaren conjunto con la clase Symbol generada por CUP.El metodo inicia con la comparacion de si el objeto recibido mediante parametro constituyeuna instancia de la clase Symbol, de cumplirse esta condicion se procede con la deteccionde errores.

Figura 6: Codigo de correcion de errores

7

Page 8: Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo

Los pasos implementados a continuacion sirven para emitir los mensajes de error en casode que no se introduzca de manera correcta las sentencias.A continuacion se realizan las comparaciones para comprobar el final de una sentencia, alencontrar un token correspondiente a una variable numerica o el final de archivo significaque la sentencia no ha estado completa y se emite el mensaje de error correspondiente.

Figura 7: Codigo de correcion de errores - continuacion

Seguidamente se realiza las comparaciones para determinar algunos casos mas en los quela sentencia ingresada no es correcta.El siguiente bloque de codigo sirve para identificar la fila y la columna en donde se presenteel error.

Figura 8: Identificacion de filas y columnas

Cabe destacar que el metodo toma en cuenta el token siguiente a donde encuentra el error.En el siguiente bloque mostrara el mensaje de error en caso de que falte el operador, aquise indica que en caso de que el siguiente token que sea encontrado corresponda a algunade las 3 figuras, significa que la palabra ’Calcular’ no ha sido ingresada.

Figura 9: Deteccion de error en caso de que no exista el operador

El bloque de codigo a continuacion indica que en caso de encontrar el token correspondientea la separacion (,) se emitira el mensaje de error que senala que se debe ingresar el valorde la primera variable.

Figura 10: Deteccion de error en caso de que no exista la primera variable

En caso de que el valor de la segunda variable no haya sido ingresado, el siguiente bloquede codigo ayudara a detectar este error emitiendo el mensaje sobre la falta de la segundavariable.

8

Page 9: Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo

Figura 11: Deteccion de error en caso de que no exista la segunda variable

Cabe destacar que este error sera utilizado en las figuras rectangulo y triangulo, en donde,se necesitan dos valores para calcular su areaFinalmente se da la orden de mostrar por pantalla el mensaje de error que haya sidodetectado.

Figura 12: Comando de impresion del mensaje de error

- Metodo mainLa siguiente imagen muestra el metodo main para la ejecucion del analizador sintactico ylexico, el cual garantiza que se pase como parametro la tabla de sımbolos.

Figura 13: Metodo main

3. Declaracion de terminos terminales y no terminalesA continuacion se observa los terminos terminales y no terminales usados en el analizador.Los terminos terminales los constituyen los tokens anteriormente declarados en el archivoAnalizadorLexico.flex. Es importante que los nombres esten escritos de la misma formaen ambos archivos.

TRIANGULOCUADRADORECTANGULOOPERADOR

9

Page 10: Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo

SEPARACION

Los terminos no terminales son declarados de acuerdo a las gramaticas que posteriormentesean declaradas.

expresionEnteraexpresionParte;exp1exp2

A continuacion se observa la declaracion en el archivo CUP.

Figura 14: Declaracion de terminales y no terminales

4. Declaracion de gramaticasLas gramaticas sirven para armar las expresiones aceptadas en el compilador. Todos losterminos no terminales deben tener su gramatica declarada para determinar su valor. Elcodigo Java que se requiera usar debe ser colocado entre {: codigo :}Se analizara cada gramatica declarada en el archivo.

Gramatica 1: esta gramatica sirve para analizar el archivo de texto que se usa comoentrada. El contenido del archivo de entrada se almacena en el termino no termi-nal ’expresionEntera’. El termino no terminal ’expresionParte’ correspondera a unasentencia que se encuentre en el archivo de entrada.En el siguiente grafico, la lınea 91 indica que el termino ’expresionEntera’ puede serigual a sı mismo o al termino ’expresionParte’. La linea 93 indica que el terminoexpresionParte sera igual a la expresion exp1, de esta ultima se instancia una varia-ble que en la lınea 95 sera impresa en pantalla. Lo mismo sucede con ’exp2’ Cabemencionar que el comando de impresion es codigo Java.

Figura 15: Declaracion de gramatica 1

10

Page 11: Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo

Gramatica 2: esta gramatica define la forma que tendra la sentencia que sera aceptadaen caso del calculo del area del cuadrado. La gramatica esta formada por los termi-nales VALORVARIABLE, del cual e ha instanciado una variable l, OPERADOR YCUADRADO. La variable instanciada servira para realizar los calculos matematicos.En el bloque de codigo Java se imprime el nombre de la figura y el valor del area.

Figura 16: Declaracion de gramatica 2

Gramatica 3: es la gramatica correspondiente a la figura Rectangulo. La sentenciaaceptada tiene la forma: -VALORVARIABLE SEPARACION VALORVARIABLEOPERADOR RECTANGULO-. De los terminales VALORVARIABLE se ha instan-ciado una variable para realizar los calculos del area. Y en el bloque de codigo Javase realizan los calculos y se imprime la informacion.

Figura 17: Declaracion de gramatica 3

Gramatica 4: Esta gramatica es similar a la anterior, pero en este caso la figurasera Triangulo y los calculos se realizaran de acuerdo a la formula correspondiente aesta figura.

Figura 18: Declaracion de gramatica 4

5. EjecucionEn la clase ejecutora del proyecto (CompiladorAreas.java) se debe elaborar los metodospara procesar los archivos flex y cup, y para realizar las respectivas pruebas.Procesamiento de ArchivosEn la siguiente figura se muestra el metodo, en donde las lıneas 56 y 58 son las llamadas alos paquetes Flex y CUP, respectivamente, para la elaboracion de las respectiva clases enJava que implementen cada analizador. El metodo llamado moverArch() sirve para ubicaren la carpeta correcta los nuevos archivos generados.

11

Page 12: Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo

Figura 19: Metodo de procesamiento

El siguiente metodo sirve para la realizacion de las pruebas, en el se hace la lectura de unarchivo de texto y se envia esta lectura como parametro al metodo main del analizadorsintactico.

Figura 20: Metodo de realizacion de pruebas

Utilizando estos metodos se realizan las pruebas.

12

Page 13: Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo

PruebasPara la ejecucion del proyecto es necesario construir un archivo de texto, en el que seescribira las sentencias a analizar.Las sentencias escritas deben tener la forma:- Figura Cuadrado: VALORVARIABLE OPERADOR CUADRADOEjemplo: 3 Calcular Cuadrado-Figuras Rectangulo y Triangulo: VALORVARIABLE SEPARACION VALORVARIABLEOPERADOR TRIANGULO.Ejemplo: 7 , 8 Calcular Triangulo5 , 9 Calcular RectanguloEn caso de no ingresar correctamente las sentencias, la aplicacion emitira el mensaje deerror correspondiente a los estudiados en la seccion -Codigo de usuario del parser-A continuacion se observa un ejemplo, en donde, la primera sentencia se ha escrito correc-tamente mientras que la siguiente presenta un error que debera ser identificado.

Figura 21: Ejemplo de prueba

Al ejecutar el proyecto se presenta el siguiente menu.

La opcion 1 sirve para generar las clases en Java que implementan cada analizador.La opcion 2 permite realizar las prueba usando el archivo de texto de entrada.La opcion 3 termina la ejecucion.

Figura 22: Menu de ejecucion

13

Page 14: Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo

Las clases en Java ya fueron generadas con anterioridad, por lo que se procede a realizar laspruebas con el archivo de entrada. Para ello se presiona la opcion 2, dando como resultadolo siguiente.

Figura 23: Ejecucion

La primera sentencia del archivo correspondıa a la figura Cuadrado, por lo que el area hasido calculada con exito. La segunda sentencia presentaba el error de falta de Figura, porlo que se puede observar que el mensaje de error alerta sobre este error.

0.5. Ubicacion del proyectoEl proyecto se realizo en el IDE NetBeans 8.0.1 y se podra descargar de la siguiente

direccion:https://code.google.com/p/compilador-area-figuras/source/browse/#svn%2FCompiladorAreas

14

Page 15: Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo

0.6. Bibliografıa1. Galvez Rojas, S. y Mora Mata, J. ”Traductores y Compiladores con Lex/Yacc,

JFlex/ Cup y JavaCC” [En lınea] Disponible en: http://jflex.de/index.html

2. Universitat Jaume. ”Procesadores de Lenguaje”[En linea] Disponible en: ocw.uji.es/material/5184/raw

3. Aguilera, M. .Analisis Sintactico.”[En linea] Disponible en: http://www.lcc.uma.es/˜galvez/ftp/tci/tictema3.pdf

15

Page 16: Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo

0.7. Licencia

Figura 24: Licencia

16