Proyecto de compiladores_unl

13
CIS-IXB-002 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 convetir n´ umeros cardinales a ordinales en Ingl´ es Tarea- Extra Clase Noveno B Autor: Yandry Ren´ e Ram´ ırez Saritama Docente: Ing. Henry-Paz, Loja-Ecuador 2015 1

Transcript of Proyecto de compiladores_unl

Page 1: Proyecto de compiladores_unl

CIS-IXB-002

UNIVERSIDADNACIONALDE LOJA

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

Carrera de Ingenierıa en Sistemas

Compilador para convetir numeroscardinales a ordinales en Ingles

Tarea- Extra ClaseNoveno B

Autor:

• Yandry Rene Ramırez Saritama

Docente: Ing. Henry-Paz,

Loja-Ecuador2015

1

Page 2: Proyecto de compiladores_unl

IndiceA. Introduccion al desarrollo del Compilador 3

1 . Definicion de Compilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 . ¿Como surgio el problema? . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 . ¿Que hace el Compilador? . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 . ¿Para que sirve el Compilador? . . . . . . . . . . . . . . . . . . . . . . . . 55 . ¿Como se realizo el Compilador? . . . . . . . . . . . . . . . . . . . . . . . 5

5 .1. JFLAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 .2. JFLEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 .3. CUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

6 . Analizador Lexico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 . Analizador Sintactico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 . Codigo disponible en Github: . . . . . . . . . . . . . . . . . . . . . . . . . 11

B. BIBLIOGRAFIA 121 . Licencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

Indice de figuras1. Numeros Cardinales y Ordinales . . . . . . . . . . . . . . . . . . . . . . . . 42. Diseno del Automata en Jflap . . . . . . . . . . . . . . . . . . . . . . . . . 53. Declaracion de variables archivo JFlex . . . . . . . . . . . . . . . . . . . . 74. Expresions regulares archivo JFlex . . . . . . . . . . . . . . . . . . . . . . 85. Metodo validar errores archivo CUP . . . . . . . . . . . . . . . . . . . . . . 96. Sımbolos terminales y no terminales archivo CUP . . . . . . . . . . . . . . 97. Seccion de la gramatica archivo CUP . . . . . . . . . . . . . . . . . . . . . 108. Metodo principal de ejecucion . . . . . . . . . . . . . . . . . . . . . . . . . 109. Metodo para escribir el texto leıdo desde la interfaz . . . . . . . . . . . . . 1010. Metodo traducir y obtener los valores dados . . . . . . . . . . . . . . . . . 1111. Interfaz grafica de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Page 3: Proyecto de compiladores_unl

A. Introduccion al desarrollo del CompiladorLa construccion de un compilador es una de las tareas mas gratas con las que un

informatico puede encontrarse a lo largo de su carrera profesional. Aunque no resulta sen-sato pensar que una labor tal pueda formar parte de la actividad cotidiana de la mayorıade estos profesionales, sı es cierto que, con cierta frecuencia, suele aparecer la necesidad deanalizar un fichero de texto que contiene informacion distribuida segun algun patron re-conocible: ficheros XML, ficheros de inicializacion .ini, ficheros con comandos del sistemaoperativo, los propios programas fuente, etc. Es mas, el concepto de analisis de un textopuede ser util para ahorrar trabajo en situaciones que estan fuera del ambito profesionalinformatico, como por ejemplo la generacion de ındices analıticos en archivos de textoescritos con procesadores que no admiten esta opcion.[1]

Pero a pesar de la indudable utilidad de los conceptos generales relacionados con lateorıa y practica de los analisis de textos, el crear un compilador introduce al informaticoen un nuevo mundo en el que el control sobre el ordenador es absoluto y le lleva al pa-roxismo de la omnipotencia sobre la maquina. Y es que resulta imprescindible un plenoconocimiento de todos los conceptos intrınsecos al ordenador: dispositivos de E/S, codigomaquina utilizado por el microprocesador, comunicacion a bajo nivel entre este y el restode sus perifericos, distribucion de la memoria, mecanismos de uso de memoria virtual,etc.[1]

Uno de los principales mecanismos de comunicacion entre un ordenador y una personaviene dado por el envıo y recepcion de mensajes de tipo textual: el usuario escribe una or-den mediante el teclado, y el ordenador la ejecuta devolviendo como resultado un mensajeinformativo sobre las acciones llevadas a cabo. Aunque la evolucion de los ordenadores seencuentra dirigida actualmente hacia el empleo de novedosas y ergonomicas interfaces deusuario (como el raton, las pantallas tactiles, las tabletas graficas, etc.), podemos decirque casi todas las acciones que el usuario realiza sobre estas interfaces se traducen antes odespues a secuencias de comandos que son ejecutadas como si hubieran sido introducidaspor teclado. Por otro lado, y desde el punto de vista del profesional de la Informatica, eltrabajo que este realiza sobre el ordenador se encuentra plagado de situaciones en las quese produce una comunicacion textual directa con la maquina: utilizacion de un interpretede comandos (shell), construccion de ficheros de trabajo por lotes, programacion mediantediversos lenguajes, etc. Incluso los procesadores de texto como WordPerfect y MS Wordalmacenan los documentos escritos por el usuario mediante una codificacion textual es-tructurada que, cada vez que se abre el documento, es reconocida, recorrida y presentadaen pantalla. [1]

Es importante destacar la velocidad con la que hoy en dıa se puede construir un compi-lador. El primer compilador de Fortran (Formula Translator), por ejemplo, necesito parasu implementacion el equivalente a 18 anos de trabajo individual (realmente no se tardotanto puesto que el trabajo se desarrollo en equipo). Hasta que la teorıa de automatasy lenguajes formales no se aplico a la creacion de traductores, su desarrollo ha estadoplagado de problemas y errores. Sin embargo, hoy dıa un compilador basico puede ser elproyecto fin de carrera de cualquier estudiante universitario de Informatica. [1]

3

Page 4: Proyecto de compiladores_unl

1 . Definicion de CompiladorUn copilador es el proceso de traduccion que convierte un programa fuente escrito en

un lenguaje de alto nivel a un programa objeto en codigo maquina y listo por tanto paraejecutarse en el ordenador, con poca o ninguna preparacion adicional[2]

2 . ¿Como surgio el problema?El presente proyecto se enfoca en dar solucion a los inconvenientes que se producen

al momento de utilizar los numeros ordinales en ingles ya que su escritura es similar a lade los numeros cardinales por ende tienden a confundir su escritura y es ahı donde naceel problema pudiendo solucionarlo al mismo realizando un compilador que nos permitatener los numeros ordinales en ingles disponibles para su respectivo uso.

Figura 1: Numeros Cardinales y Ordinales

3 . ¿Que hace el Compilador?Basicamente el compilador interpreta y convierte numeros cardinales a numeros ordi-

nales en ingles. Como entrada de datos se ha creado un archivo de texto donde se almacenalos dıgitos del 1 al 10, dando como resultado estos mismos numeros pero transformadosa numeros ordinales en ingles respectivamente.

4

Page 5: Proyecto de compiladores_unl

4 . ¿Para que sirve el Compilador?La utilidad y provecho que se obtiene del compilador radica en la facilidad de obtener

una traduccion correcta de los numeros ordinales en ingles, dando la oportunidad a ninosy jovenes de memorizar los diez primeros numeros para garantizar su correcta escritura.

5 . ¿Como se realizo el Compilador?Para poder llevar a cabo el problema planteado se hizo uso del lenguaje de programa-

cion JAVA, ademas se utilizo las librerıas JFLAP JCUP JFLEX las cuales permitieron eldesarrollo de un compilador que proporcione la solucion al problema planteado.

A continuacion se describe cada una de las herramientas utilizadas.

5 .1. JFLAP

JFlex es un generador de analizadores lexicograficos desarrollado por Gerwin Kleincomo extension a la herramienta JLex desarrollada en la Universidad de Princeton. JFlexesta desarrollado en Java y genera codigo Java. Los programas escritos para JFlex tie-nen un formato parecido a los escritos en PCLex; de hecho todos los patrones regularesadmisibles en Lex tambien son admitidos por JFlex, por lo que en este apartado nos cen-traremos tan solo en las diferencias y extensiones, tanto de patrones como del esqueleto.

Figura 2: Diseno del Automata en Jflap

5

Page 6: Proyecto de compiladores_unl

5 .2. JFLEX

JFlex es un generador de analizadores lexicograficos desarrollado por Gerwin Kleincomo extension a la herramienta JLex desarrollada en la Universidad de Princeton. JFlexesta desarrollado en Java y genera codigo Java. Los programas escritos para JFlex tienenun formato parecido a los escritos en PCLex; de hecho todos los patrones regulares admisi-bles en Lex tambien son admitidos por JFlex, por lo que en este apartado nos centraremostan solo en las diferencias y extensiones, tanto de patrones como del esqueleto que debeposeer el fichero de entrada a JFlex. La instalacion y ejecucion de JFlex es trivial. Unavez descomprimido el fichero jflex-1.3.5.zip, dispondremos del fichero JFlex.jar que tansolo es necesario en tiempo de meta-compilacion, siendo el analizador generado totalmen-te independiente. La clase Main del paquete JFlex es la que se encarga de metacompilarnuestro programa .jflex de entrada; de esta manera, una invocacion tıpica es de la for-ma: java JFlex.Main fichero.jflex lo que generara un fichero Yylex.java que implementaal analizador lexicografico.

5 .3. CUP

Cup es un analizador sintactico LALR desarrollado en el Instituto de Tecnologıa deGeorgia (EE.UU.) que genera codigo Java y que permite introducir acciones semanticasescritas en dicho lenguaje. Utiliza una notacion bastante parecida a la de PCYacc e igual-mente basada en reglas de produccion.

El archivo cup tiene las siguiente partes:Codigo del Usuario para el ParserCodigo del Usuario para las Acciones de la GramaticaDeclaracion de Variables para la GramaticaGramatica.

Las especificaciones comienzan de forma opcional con las directivas package y import,estas tienen la misma sintaxis y juegan el mismo rol que el package y el import de unprograma normal escrito en Java.

En general, CUP implementa las convenciones loxicas de Java, como por ejemplo, so-porta los dos tipos de comentarios que soporta Java.Despues de la declaracion opcional de package, luego se pueden importar cero o mas pa-quetes Java.

Luego de la declaracion opcional de import y package, viene una serie de declaracio-nes opcionales que permiten al usuario escribir codigo que luego hara parte del analizadorgenerado como parte del archivo parser, pero separado en una clase no-publica que con-tendra todo el codigo escrito por el usuario.[3]

6

Page 7: Proyecto de compiladores_unl

6 . Analizador LexicoSe encarga de buscar los componentes lexicos o palabras que componen el programa

fuente, segun unas reglas o patrones. La entrada del analizador lexico podemos definirlacomo una secuencia de caracteres, que pueda hallarse codificada segun cualquier estandar:ASCII (American Standard Code for Information Interchange), EBCDIC (Extended Bi-nary Coded Decimal Interchange Code), Unicode, etc. El analizador lexico divide estasecuencia en palabras con significado propio y despues las convierte a una secuencia determinales desde el punto de vista del analizador sintactico. Dicha secuencia es el puntode partida para que el analizador sintactico construya el arbol sintactico que reconoce lassentencias de entrada.[1]

Figura 3: Declaracion de variables archivo JFlex

7

Page 8: Proyecto de compiladores_unl

Figura 4: Expresions regulares archivo JFlex

7 . Analizador SintacticoTodo lenguaje de programacion obedece a unas reglas que describen la estructura

sintactica de los programas bien formados que acepta. En Pascal, por ejemplo, un pro-grama se compone de bloques; un bloque, de sentencias; una sentencia, de expresiones;una expresion, de componentes lexicos; y ası sucesivamente hasta llegar a los caracteresbasicos. Se puede describir la sintaxis de las construcciones de los lenguajes de programa-cion por medio de gramaticas de contexto libre o utilizando notacion BNF (Backus-NaurForm).

Un analizador sintactico es la fase del analizador que se encarga de chequear la secuen-cia de tokens que representa al texto de entrada, en base a una gramatica dada. En casode que el programa de entrada sea valido, suministra el arbol sintactico que lo reconoceen base a una representacion computacional. Este arbol es el punto de partida de la faseposterior de la etapa de analisis: el analizador semantico.

Resulta evidente que los errores de correccion no pueden ser detectados por un com-pilador, ya que en ellos interviene el concepto abstracto que el programador tiene sobreel programa que construye, lo cual es desconocido, y probablemente incognoscible, por elcompilador. Por otro lado, la deteccion de errores logicos implica un esfuerzo computacio-nal muy grande en tanto que el compilador debe ser capaz de averiguar los distintos flujosque puede seguir un programa en ejecucion lo cual, en muchos casos, no solo es costoso,sino tambien imposible. Por todo esto, los compiladores actuales se centran en el reco-nocimiento de los tres primeros tipos de errores. En este tema hablaremos de los erroresde sintaxis, que son los que pueden impedir la correcta construccion de un arbol sintactico.

8

Page 9: Proyecto de compiladores_unl

El manejo de errores de sintaxis es el mas complicado desde el punto de vista de lacreacion de compiladores. Nos interesa que cuando el compilador encuentre un error, nocancele definitivamente la compilacion, sino que se recupere y siga buscando errores. Re-cuperar un error no quiere decir corregirlo, sino ser capaz de seguir construyendo el arbolsintactico a pesar de los errores encontrados.[1]

Figura 5: Metodo validar errores archivo CUP

Figura 6: Sımbolos terminales y no terminales archivo CUP

9

Page 10: Proyecto de compiladores_unl

Figura 7: Seccion de la gramatica archivo CUP

Figura 8: Metodo principal de ejecucion

Figura 9: Metodo para escribir el texto leıdo desde la interfaz

10

Page 11: Proyecto de compiladores_unl

Figura 10: Metodo traducir y obtener los valores dados

Figura 11: Interfaz grafica de usuario

8 . Codigo disponible en Github:https://github.com/yandry0007/CompiladorNumerosCardinalesIngles

11

Page 12: Proyecto de compiladores_unl

B. BIBLIOGRAFIA

Referencias[1] Traductores y Compiladores, EDICION ELECTRONICA. Disponible en: http://

www.lcc.uma.es/˜galvez/ftp/libros/Compiladores.pdf

[2] Compiladores e Interpretes, Disponible en: http://www.giaa.inf.uc3m.es/docencia/ITIG/introduccion.pdf

[3] Rafael Vega castro, disponible en : http://www.rafaelvega.info/wp-content/uploads/Articulo.pdf

12

Page 13: Proyecto de compiladores_unl

1 . Licencia

Ensayo by Yandry Ramırez is licensed Under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License.

13