Interpretes y Compiladores
Investigación, estudio del funcionamiento e implementacion de interpretes y compiladores
por Gustavo Daniel Yapura
Carrera: Ing. de Sistemas de Información
Año: Segundo
Nro Legajo: 36.471
Carrera de Ing. en Electrónica
Año: Tercero
Nro Legajo: 32.914
Objetivos:
_Estudiar el funcionamiento de los compiladores.
_Diseñar un compilador e implementarlo.
Interpretes y Compiladores:
El presente proyecto como su nombre lo indica pretende estudiar a los Interpretes y Compiladores. Sin embargo estas palabras " Interpretes y Compiladores ", dicen mucho y a la vez no dicen nada. Todos nosotros alguna vez estuvimos en contacto con ellos, y en algún momento nos preguntamos como funcionan. Pero muy pocos nos sentamos a tratar de entender su mecánica, su funcionamiento y ver los conceptos que están ocultos detrás de ellos.
Digo ocultos porque es de mi conocimiento, que estos conceptos son tales, que no se me hubieran ocurrido que forman parte de la teoría que engobla a los Interpretes y Compiladores. Los principios y técnicas de escritura de Interpretes y Compiladores comprende los conceptos de: los lenguajes de programación, la arquitectura de computadores, la teoría de lenguajes, los algoritmos, la ingeniería de Software, como así también tener pleno conocimiento de las distintas plataformas existentes, de las técnicas de programación ( lineales, estructuradas, orientadas a objetos, a eventos y paralelas ), y de los distintos Hardware, tanto desde el punto de vista de un programador como al nivel en que interactuan sus componentes internos, para poder obtener de ellos la mayores prestaciones posibles. Además el tener conocimiento de lo que es una maquina abstracta, su relación con la gramática y muchos otros conceptos.
Hay que destacar que el estudio teórico que aquí se realizara, es una importante base para la investigación y desarrollo de aplicaciones en las cuales el análisis de patrones este muy vinculadas con ellas, como por ejemplo Bases de Datos, Desarrollo de herramientas Orientadas a Objetos, Graficadores, Procesadores de Texto, Formatos de Archivos, Traductores, Analizadores Léxicos, Analizadores Sintácticos, por supuesto Interpretes y Compiladores y muchas otras aplicaciones. Además haciendo uso de los conceptos de la Teoría General de Sistemas y los de una maquina abstracta, en particular las denominada Autómatas Traductores, se puede llegar a la implementacion de un sistema como un autómata, que ante la lectura de patrones ( entrada de datos ) reacciona con una traducción ( salida de datos ). Es por todo esto y por una curiosidad propia que he decido realizar este proyecto.
Marco de Referencia:
Para poder llevar a cabo la investigación he decidido tomar como marco de referencia a los conceptos expuestos en el libro titulado Compiladores: Principios, técnicas y herramientas de Alfred V. Aho, Ravi Sethi y Jeffrey Dullman, primera edición 1997, de la editorial Addison Wesley Iberoamericana. Y a partir de ellos ampliar los conceptos según se desarrolle la investigación y sea conveniente.
Planificación de Actividades:
Objetivos:
Primera etapa:
_Estudiar el conceptos de Gramáticas Regular.
_Estudiar el funcionamiento de un Autómata Finito.
_Observar la dualidad y correspondencia entre una Gramáticas Regular y un Autómata
Finito.
_Desarrollar los algoritmos de un Autómata Finito.
_Estudiar el concepto de un Analizador Léxico.
Segunda etapa:
_Estudiar el conceptos de Gramáticas de Contexto Libre.
_Estudiar el funcionamiento de un Autómata a Pila.
_Observar la dualidad y correspondencia entre una Gramáticas de Contexto Libre y un
Autómata a Pila.
_Desarrollar los algoritmos de un Autómata a Pila.
_Estudiar el concepto de un Analizador Sintáctico.
Tercera etapa:
_Estudiar el concepto y el funcionamiento de un Analizador Semántico.
_Estudiar el concepto y el funcionamiento de un Generador de Código Intermedio.
_Desarrollar los algoritmos para la implementacion de un Analizador Semántico y un
Generador de Codigo.
Cuarta etapa:
_Estudiar el concepto y el funcionamiento de un Optimizador de Código Intermedio.
_Estudiar el concepto y el funcionamiento de un Generador de Código.
_Desarrollar los algoritmos para la implementacion de un Optimizador de Código
intermedio y un Generador de Código.
_Desarrollar los algoritmo para la implementacion de un Interprete.
Quinta etapa:
_Estudiar el concepto y el funcionamiento de un Compilador.
_Estudiar el concepto y el funcionamiento de un Compilador en el análisis de un proyecto
como un Traductor Interativo.
_Desarrollar los algoritmo para la implementacion de un Compilador.
_Desarrollar los algoritmos para la implementacion de un entorno integrado EDI de un
compilador.
Aplicaciones:
Primera etapa
Aplicación: Se realizara la implementacion de un Generador de Analizadores Léxicos.
Nota: Este Generador de Analizadores Léxicos en lo posible presentara una interfase de tipo EDI ( Editor de Desarrollo Integrado ). Y estará definido según las pautas de la Cátedra de Sintaxis y Semántica del Lenguaje. Y cuya finalidad se espera sea, el de una herramienta de ayuda para la misma.
Segunda etapa:
Aplicación: Se realizara la implementacion de un Generador de Analizadores Sintácticos.
Nota: Al termino de esta etapa se presentara la implementacion del Generador de Analizadores Sintácticos con una interfase de tipo EDI ( Editor de Desarrollo Integrado ). Y que podrá trabajar en conjunto con el Generador de Analizadores Léxicos. El Generador de Analizadores Sintácticos será definido según las pautas de la Cátedra de Sintaxis y Semántica del Lenguaje. Para la disposición del mismo según le parezca conveniente.
Tercera Etapa:
Aplicación: Se realizara la implementacion de un Analizador Semántico y la de un Generador de Código Intermedio.
Nota: Este Analizador Semántico utilizara como herramienta de ayuda al Generador de Analizadores Léxicos y al Generador de Analizadores Sintácticos, dentro de un Editor de Desarrollo Integrado (EDI ). Para la Implementacion del Generador de Código se definirá un lenguaje XXX1 que realice las operaciones básicas ( E/S ).
Cuarta etapa:
Aplicación: Se realizara la implementacion de un Interprete de un lenguaje XXX2.
Nota: Este Interprete XXX2 utilizara como herramienta de ayuda al Generador de Analizadores Léxicos y al Generador de Analizadores Sintácticos, como así también a los algoritmos desarrollados para el Analizador Semántico y el Generador de Código Intermedio. Todo dentro de un Entorno de un Editor de Desarrollo Integrado (EDI ).
Quinta etapa:
Aplicación: Se realizara la implementacion de un Compilador de un lenguaje XXX3.
Nota: Esta etapa terminara con la presentación del Compilador para un lenguaje XXX3 que realice las operaciones básicas ( E/S, etc... ), que denominaremos como "XXX v1.0".
Análisis de Riesgo
Partamos del hecho, que quien elaboro este proyecto tiene poco conocimiento sobre muchos de los temas aquí propuestos. Teniendo en cuenta el marco de referencia ya mencionado, y al referirme a la biografía de consulta, creo yo que durante todas las etapas es obvio que se necesitara algún texto de consulta. Algunos de los cuales se pueden encontrar en la biblioteca, pero mucho de ellos son materiales nuevos en el mercado, y no están disponibles aun. Si tuviera que elaborar una lista sobre la bibliografía necesitada a lo largo de todo el proyecto, me seria muy difícil precisar con exactitud cual seria. Por lo que me adhiero al derecho a no hacerlo por ahora, y simplemente mencionar algunos libros que me servirán por el momento.
Creo que esta demás decir que la gran red de redes, conocida como Internet me será de gran ayuda, como base de datos de consulta para mi investigación. Pudiendo acceder a través de ella a publicaciones sobre el tema. Como así también poder contactar a los autores de distinto lenguajes de programación.
Si tengo que pensar en quienes me pueden ayudar, tengo que decir que se verá durante la marcha del mismo. En particular me será de mucha ayuda la asistencia del Prof. Juan Carlos Vázquez, quien pertenece a la Cátedra de Sintaxis y Semántica del Lenguaje, y posee gran conocimiento sobre los temas de Gramáticas de los Lenguajes, Máquinas Abstractas, Analizadores etc... Además de un gran interés en los temas de Interpretes y Compiladores, por lo que espero su ayuda a lo largo de toda esta travesía. También tengo que mencionar que voy a necesitar la ayuda de Maximiliano Morales y el Ing. Fernando Andrés Cuenca, quienes me han demostrado tener un amplio conocimiento de las distintas plataformas de trabajo, como así también en la programación de aplicaciones. Además tengo que nombrar a las Profesoras Mirta Ferrero e Inés Grosso quienes son parte importante de este proyecto, pues ellas son mi guía en lo que se refiere a la metodología de estudio, investigación y documentación del mismo.
Aclaración: Todos los Objetivos y Aplicaciones aquí descritas son un marco de referencia para la presente investigación. Los cuales están sujetos a cambios según sean necesarios para el desarrollo del proyecto.
Bibliografía y Referencias
_Teoría de la Computación
Autor: Brookshear
Editorial: Addison Wesley
_Compiladores: Principios Técnicas y Herramientas
Autor: Aho, Sethi, Ullman
Editorial: Addison Wesley
_Compiladores Conceptos Fundamentales
Autor: Teufel, Schmidt, Teufel
Editorial: Addison Wesley
_Compiladores Teoría y Construcción
Autor: Sanchez LLorca, Galán, Pascual
Editorial: Paradinfo
_Apuntes de la Cátedra de Sintaxis y Semántica del Lenguaje de la
Universidad Tecnológica Nacional Facultad Córdoba
_Lenguajes de Programación
Autor: Terrence W. Pratt
Editorial: Prentice Hall
Direcciones Internet:
Guia del Sisteama Operativo Linux:
http://cluv.univalle.edu.co/documentos
Analizador Léxico:
http://titan.pue.udlap.mx/~mc098592/lex/lex.htm
Tabla de contenidos del Sisteama Operativo Linux:
http://cluv.univalle.edu.co/documentos/Guia_del_enROOTador.html#toc1
Lenguajes y Compiladores I:
http://www.llc.ema.es/docencia/ETSIInf/pl/p11.html
Lenguajes y Compiladores II:
http://www.llc.ema.es/docencia/ETSIInf/pl/p12.html
Universidad de Malaga España:
http://www.uma.es
SoftLand Compania de venta de Software:
http:/www.softland.com.ar
Gustavo Daniel Yapura.