UNIVERSIDAD DE LA SERENA FACULTAD DE CIENCIAS DEPARTAMENTO DE MATEMÁTICAS 1. IDENTIFICACIÓN: Carrera Curso Código Nº Hrs.(TEL) Prerrequisito Periodicidad 2. : Ingeniería en Computación : Electivo (Introducción a la teoría de Compiladores) : 23105 : 400 : Aprobada la asignatura de Teoría de Autómatas y Lenguajes Formales. : Anual PROGRAMA DE ESTUDIO 2.1. DESCRIPCIÓN: El presente curso electivo ofrece al alumno el conocer y manejar uno de los aspectos más importantes de la informática tradicional: el análisis y comprensión de archivos de texto, de las más múltiples especies y formatos. Las técnicas y herramientas que se examinarán se encuentran ampliamente difundidas y no están orientadas exclusivamente a la construcción de compiladores e intérpretes, sino que establecen un marco general con el que el informático puede analizar textos con cualquier otro objetivo. Cualquier transformación semántica imaginable computacionalmente puede hacerse realidad, desde el procesamiento de datos hasta la conversión de textos, pasando por la transformación de programas fuente, entre otros. No obstante, el propósito es desarrollar un compilador, como una de las aplicaciones más complejas en el área de sistemas computacionales, esto es debido a que se necesita integrar una serie de conocimientos, tales como, la programación de propósito general y las estructuras de datos. Sin embargo, el desarrollo de un compilador puede facilitarse si se analizan detalladamente cada una de las etapas que lo integran. Más aún, hoy en día, se cuentan con una serie de herramientas que facilitan la construcción de los mismos, por lo menos en las etapas clásicas, es decir, en el desarrollo de analizadores Léxico, Sintáctico, Semántico, tal como se hizo en el curso recién dictado de Teoría de Autómatas y Lenguajes Formales. No obstante, la propuesta es llegar hasta una etapa en donde se pueda incursionar en la Generación de código intermedio, Optimización de código, Manejo de errores y Generación de código ensamblador, entre otros. En la actualidad existen poderosas herramientas de desarrollo, los cuales integran un ambiente de programación que generalmente incluye un editor, ambientes visuales, depuradores, preprocesadores, un compilador, funciones de biblioteca de propósito general, etc. Por lo anterior, se propone escoger y manejar las herramientas existentes más apropiadas en este ámbito -“nuevas y antiguas”- con el propósito de compararlas y con ellas llegar a construir un compilador, como objeto de estudio, junto a las herramientas que lo hicieron factible. 2.2. OBJETIVOS EDUCACIONALES 2.2.1. OBJETIVOS GENERALES Aplicar los conceptos de los lenguajes formales en el proceso de construcción de compiladores, y el estudio y manejo de las herramientas apropiadas para la consecución de los objetivos. 2.2.2. OBJETIVOS ESPECÍFICOS Explorar las principales herramientas en el contexto de analizadores lexicográficos, sintácticos y semánticos relacionados con los lenguajes formales. Entender cómo y cuándo usar las herramientas disponibles en el contexto del análisis predictivos de las sentencias. Cumplir con todas las etapas conducentes a la construcción de un compilador o lo más cercano que se pueda lograr a ello. En este sentido, es fundamental conocer, manejar y aplicar eficientemente las herramientas existentes para ponerlas en práctica. Los estudiantes tendrán una visión global de la importancia que ha tenido la integración de la teoría y la práctica, y la ventaja de conocer los ámbitos de algunos problemas que puedan ser resueltos, con la experiencia que se recabe. 2.3. CONTENIDOS CONTENIDO 1. Lenguajes Formales: Pasado, Presente y Futuro de los Lenguajes Formales en el contexto de string, árboles y grafos. 2. Conociendo las herramientas apropiadas, en las cuales se incursionara. Por ejemplo, Lex & Yacc, SableCC, JavaCC, que es una herramienta de Java la cual permite de una manera más practica y fácil el desarrollo de un compilador, en su fase sintáctica (gramática). Se apega en parte a las estrategias empleadas para la especificación de reglas gramaticales llevadas en papel, como el BNF( Backus Naur Form) por ejemplo. 3. Entre otras, JFlex y CUP, ANTLR genera los “recursive descent parser” en C, C++ o Java desde gramáticas LL(k>1). La última versión puede ser usado para C++ y Java. 4. Correlacionar los conceptos teóricos que sustentan las herramientas anteriores. Por ejemplo, lex/yacc es que los analizadores sintácticos generados por JavaCC son analizadores sintácticos descendentes de tipo LL(k), mientras que los analizadores sintácticos generados por yacc son de tipo ascendente LALR, es decir, autómatas PushDown. 5. Conociendo las herramientas apropiadas en la generación de árboles. Por ejemplo, TREEBAG. 6. Introducción a Compiladores. Análisis léxico. Análisis sintáctico, Análisis sintáctico predictivo, Análisis semántico, generación de código, Optimización de códigos. 7. Finalmente se ejemplifican los analizadores léxicos en entornos web. La idea es utilizar las herramientas antes vistas en un contexto que difiere considerablemente del análisis del código fuente C. Por ejemplo, en los lenguajes HTML, XML, LATEX, y en las especificaciones HL7. 2.4. ESTRATEGIAS Para cumplir con los objetivos se realizan las clases mediante la presentación de los contenidos, fundamentos y ejemplos, además de la participación activa de los alumnos en exposiciones de temas relacionados con los contenidos. 2.5. EVALUACIÓN Controles basados en exposiciones, asistencia, y cumplimiento de los proyectos que surjan en la asignatura. Presentación de los temas abordados en un Script (documento digitalizado con los temas que se abordaron y las propuestas realizadas ). 2.6. 1. 2. 3. 4. 5. 6. BIBLIOGRAFÍA: http://sablecc.org/ https://javacc.dev.java.net/ http://www.antlr.org/ http://catalog.compilertools.net/ https://www8.cs.umu.se/~drewes/treebag/ JAVA A TOPE: TRADUCTORES Y COMPILADORES CON LEX/YACC, JFLEX/CUP Y JAVACC. EDICIÓN ELECTRÓNICA. 7. Copyright © 2010 Terence Parr.