UNIDAD ACADEMICA PROGRAMA AREA DE FORMACIÓN NÚCLEO DE FORMACIÓN NOMBRE DEL CURSO CODIGO DEL CURSO SEMESTRE CREDITOS TRABAJO PRESENCIAL TRABAJO INDEPENDIENTE TOTAL EN HORAS PROYECTO DE INVESTIGACION AUTOR : : : : : : : : : : : : : Instituto de Educación a Distancia Ingeniería de Sistemas por Ciclos Ingeniería Aplicada Problemas de los sistemas de información Compiladores VI 40 152 192 Sistemas de Información César Augusto Díaz García 1. JUSTIFICACIÓN DEL CURSO El mundo moderno de la programación de computadores a pasado de ser un campo del conociminto en el cual se aplican los conceptos propios de un lenguaje en particular a la solución de un problema real, a un escenario mucho más amplio como los es la Computación Teórica, es decir, hoy en día lo importante no es conocer un buen porcentaje de la sintaxis de un lenguaje, hoy en día el problema es otro: cómo se pueden construir herramientas que permitan la automatización de los procesos de codificación de la solución de un problema en cualquier problema de desarrollo. Lo anterior subyace a la intencionalidad de los investigadores modernos en el campo de la computación, quienes desarrollan estudios que permintan el desarrollo de nuevas herramientas que se encarguen de la codificación de una solución, permitiendo al ingeniero de sistemas dedicar mayor tiempo a las tares de análisis y diseño de las soluciones, aspecto fundamental en la implementación de de la solución de un problema y no a la codificación en si misma. El desarrollo de este curso es de vital importancia en la formación del futuro ingeniero de sistemas ya que lo orienta y favorece el desarrollo de compotencias en conceptos que aunque se bienen trabajando desde hace algún tiempo hoy cobran relevancia, como son: Automátas finitos, analizadores sintáticos y lexicográficos, generación de código, optimización de código, cálculo lambda y cálculo Phi, Máquinas de estado fínito y máquinas de Turing, como los más importantes, con miras a su incorporación en futuros proyectos de investigación en el campo de la computación teórica. 2. OBJETO DE TRABAJO CURRICULAR Profundizar los conocimientos de teoría de autómatas y árboles para su aplicación en la construcción de compiladores y analizadores sintácticos. Este objetivo general se concreta en guiar a los estudiantes para que logren adquirir los conceptos y competencias en la construcción de compliadores. 3. PROPÓSITOS DE FORMACIÓN GENERAL Aplicar las técnicas y prácticas utilizadas en la construcción de compiladores al desarrollo de software de propósito general, con el fin de lograr estándares de desarrollo de alta calidad. ESPECIFICOS 1. Entender los conceptos fundamentales de la construcción de un compilador sencillo, de una sola pasada. 2. Identificar las funciones y características de una analizador léxico, a través de la utilización de autómatas finitos. 3. Aplicar el concepto de gramáticas libres del contexto en la construcción de analizadores sintácticos. 4. Identificar las diferentes técnicas para la generación automática de código, y los procesos que este sufre para lograr su optimización. 5. Identificar las características de algunos compiladores que se utilizan en la actualidad. 4. PRESENTACION Y SUSTENTACION DEL CURSO Este curso realiza un recorrido profundo por los diferentes conceptos y ténicas utilizadas en el análisis y construcción de compiladores, a continuaión se hace una descripción de los temas a cubrir. 1. 2. 3. 4. 5. Estructura básica de un compilador, identificando cada una de sus partes y la función que cumple , además se hace un recorrido por los diferentes tipos de compiladores y su importancia en la construcción de software. Análisis de un traductor de espresiones infijas a postfijas, el cual se contruye con algunas de las ténicas que se estudian en el curso. Un recorrido por algunas de las técnicas del estudio de los analizadores léxicos, interpretación de expresiones regulares, las máquinas de estado finito, aplicandolo en la construcción de un analizador de texto. Estudio de las principales características del análisis sintáctico de profundidad, abarcando desde los conceptos de los métodos descendentes recursivos hasta las técnicas LR computacionalmente más instensivas que se ahn empleado en los generadores de analizadores sintácticos. Estudio de las técnicas fundamentales de la traducción de código dirigida por la sintaxis, utilizando concepto como: árboles sintacticos, grafos dirigidos, traducción ascendente y evaluadores recursivos. 6. PRINCIPIOS DE FORMACIÓN Generar en el estudiante las competencias necesarias para el trabajo autónomo a partir de la asignación de trabajos, talleres, ensayos que deberá elaborar en su tiempo de trabajo independiente y socializar en el aula de clase. El estudiante deberá presentar ante el grupo sus avances y logros en el aprendizaje de los conceptos fundamentales y podrá aportar ideas y conceptos necesarios la construcción de un conocimiento colectivo. El estudiante deberá realizar trabajos en grupo en grupo que favorezcan su desarrollo integral como individuo dentro de una sociedad y de igual forma podrá presentar sus idas y conceptos los cuales serán valorados de forma cuantitativa y cualitativa. El desarrollo de estos trabajos pretenderán fundamentalmente generar espacios para el desarrollo de competencias de lectura, escritura a nivel argumentativo y expositivo a demás de fomentar el desarrollo de competencias investigativas. 7. ARTICULACIÓN DEL CURSO CON LOS PROPÓSITOS, PRINCIPIOS, CAMPOS, NÚCLEOS DE FORMACIÓN EN EL MARCO DEL DISEÑO CURRICULAR El desarrollo del curso de Compiladores, además de la metodología propuesta, exige el desarrollo de estilo de aprendizaje para aprender haciendo, reflexionando. Busca incentivar al estudiante para que acepte que lo que no se hace no se aprende. 8. ACTIVIDADES DE INTEGRACIÓN Productos de las actividades de integración Ensayo Mapa conceptual Elaboración de preguntas RAE (Resumen Analítico de Estudio) Protocolo Consultas por la Web 9. PRESENTACIÓN Y SUSTENTACIÓN DEL MATERIAL PEDAGÓGICO El material pedagógico a utilizar en el desarrollo del curso es: Compiladores: Principios, Técnicas y Herramientas escrito por AHO, Alfred V. y Otros de la editorial Adisson – Wesley. Este material da un cubrimiento total de los conceptos y técnicas que se desarrollan en el curso, además de acompañar el desarrollo de los temas con variados ejercicios y finalizando con algunos ejercicios de complejidad incremental. 10. ENLACES EN LA WEB. Análisis de algunos compiladores http://www.geocities.com/pretabbed/compiladores.htm Esta es la página principal de la cátedra Compiladores e Intérpretes de la Facultad de Matemática Aplicada de la Universidad Católica de Santiago del Estero (Argentina). http://www.ucse.edu.ar/fma/compiladores/ Estudio compiladores Universidad Politécnica de Madrid http://www-lt.ls.fi.upm.es/compiladores/ Estudio compiladores Universidad Politécnica de Cataluña http://www.lsi.upc.edu/~ggodoy/cl.html Flex: Un generador de analizadores léxicos rápidos http://es.tldp.org/Manuales-LuCAS/FLEX/flex-es-2.5.html Introducción a los generadores de analizadores léxicos y sintácticos FLEX y BISON http://informatica.uv.es/docencia/iiguia/asignatu/2000/PL/2005/calculadora.pdf El generador de analizadores léxicos lex Teoría de Autómatas y lenguajes formales Federico Simmross Wattenberg ([email protected]) Universidad de Valladolid. http://www.infor.uva.es/~mluisa/talf/docs/labo/L3.pdf Principios de Autómatas finitos http://delta.cs.cinvestav.mx/~gmorales/ta/ta.html Teoría de autómatas y lenguajes formales http://perseo.dif.um.es/~roque/talf/Material/Tema3-printout.pdf Alfabetos, cadenas y lenguajes http://eisc.univalle.edu.co/materias/Computabilidad/material/slidesautomatas.pdf Gramáticas libes del contexto http://www.exa.unicen.edu.ar/catedras/ccomp1/Apunte5.pdf Gramáticas libes del contexto http://www.dsi.uclm.es/asignaturas/42528/TALFTema8.pdf Catalog of Free Compilers and Interpreters http://www.idiom.com/free-compilers/ Introduction to Finite Automata http://www.cs.odu.edu/~toida/nerzic/390teched/regular/fa/intr_2_fa.html Finite autómata http://www.ma.hw.ac.uk/~markl/preprints/Lawson.pdf CS4-Theory of Finite Automata (4.5+3) http://decsai.ugr.es/~jags/fat.html Regular Expression Matching Using Finite Automata (in C++) http://www3.sympatico.ca/dbiggar/FA.home.html Finite automata and arithmetic http://www.emis.de/journals/SLC/opapers/s30allouche.pdf 11. PRODUCTOS FINALES DEL CURSO Los estudiantes deben desarrollar un proyecto computacional de aplicación de los conceptos fundamentales adquiridos en el curso, el cual deberán desarrollar en lenguaje C++ o Java, deberán realizar una presentación y sustención. 12. METODOLOGIA El desarrollo del curso se da en el marco de un proceso de educación a distancia basado en procesos de autoformación, autonomía, autoaprendizaje, fomentando el desarrollo de cimpetencias argumentativas e investigativas. El docente realiza la presentación de los conceptos fundamentales, proponiendo ejercicios de aplicación y el desarrollo de talleres. Los estudiantes presentarán los resultados obtenidos en sus actividades de trabajo individual y al final se realizará el resumen de las actividades. 13. PRESENTACION Y SUSTENTACION DE LAS UNIDADES INTEGRALES DEL CURSO NUCLEO NÚMERO 1: Introducción a la compilación TIEMPOS o o o TIEMPO TOTAL DEL NÚCLEO : TIEMPO PRESENCIAL : TIEMPO INDEPENDIENTE : Cuatro horas y treinta minutos Una hora y treinta minutos Tres horas CONTENIDO TEMATICO DEL NUCLEO : Compiladores Análisis de programa fuente Fases de un compilador Agrupamiento de las fases Herramientas para la construcción de compiladores MOMENTO DE SENSIBILIZACIÓN ¿Es lo mismo un compilador que un interpretador? ¿Cuál es la importancia de los compiladores en el mundo de la computación? ¿Qué características permiten medir la eficiencias de un compilador? COMPETENCIAS DEL NÚCLEO PROBLÉMICO Cognitivas Valorativas Comunicativas ACTMDADES DE INTEGRACIÓN Realizar una plenaria en la cual se discutan las lecturas realizadas sobre el tema y donde se busque la apropiación del conocimiento para poder desarrollar las unidades a continuación. Lecturas individual y por cipas. Ejercicios prácticos realizados por el tutor, cipas - tutor, cipas. Aclaración de dudas individual y por cipas. ACREDITACION DEL NÚCLEO PROBLÉMICO Tener claros los conceptos de la construcción de compiladores y su importancia en la aplicación de un lenguaje de programación a la solución de un problema. NUCLEO NÚMERO 2: Compilador de una pasada TIEMPOS TIEMPO TOTAL DEL NÚCLEO : TIEMPO PRESENCIAL : TIEMPO INDEPENDIENTE : Cuatro horas y treinta minutos Una hora y treinta minutos Tres horas CONTENIDO TEMATICO DEL NUCLEO : Definición de la sintaxis Traducción dirigida por la sintaxis Análisis sintáctico Traducción de expresiones simples Análisis léxico Incorporación de una tabla de símbolos Máquinas de pila abstractas MOMENTO DE SENSIBILIZACIÓN ¿Es lo mismo un análisis sintáctico que uno léxico? ¿Cuándo es conveniente la utilización de análisis sintáctico y cuando léxico? ¿Un compilador se basa de forma exclusiva en análisis sintáctico o léxico? COMPETENCIAS DEL NÚCLEO PROBLÉMICO Cognitivas Valorativas Comunicativas ACTMDADES DE INTEGRACIÓN Realizar una plenaria en la cual se discutan las lecturas realizadas sobre el tema y donde se busque la apropiación del conocimiento para poder desarrollar las unidades a continuación. Lecturas individual y por cipas. Ejercicios prácticos realizados por el tutor, cipas - tutor, cipas. Aclaración de dudas individual y por cipas. ACREDITACION DEL NÚCLEO PROBLÉMICO Tener claros los conceptos del análisis sintáctico y el análisis léxico, así como también su importancia en la aplicación de un lenguaje de programación a la solución de un problema. NUCLEO NÚMERO 3: Análisis léxico TIEMPOS TIEMPO TOTAL DEL NÚCLEO : TIEMPO PRESENCIAL : TIEMPO INDEPENDIENTE : Cuatro horas y treinta minutos Una hora y treinta minutos Tres horas CONTENIDO TEMATICO DEL NUCLEO : Funciones del analizador léxico Manejo de los buffer de entrada Especificación de los componentes léxicos Un lenguaje para la especificación de analizadores léxicos Autómatas finitos Paso de una expresión regular a un AFN Diseño de un generador de analizadores léxicos MOMENTO DE SENSIBILIZACIÓN ¿Cómo se puede modelar un analizador léxico a partir de una AFD y un AFN? ¿Cuál es la utilidad de una analizador léxico en la construcción de un compilador? COMPETENCIAS DEL NÚCLEO PROBLÉMICO Cognitivas Valorativas Comunicativas ACTMDADES DE INTEGRACIÓN Realizar una plenaria en la cual se discutan las lecturas realizadas sobre el tema y donde se busque la apropiación del conocimiento para poder desarrollar las unidades a continuación. Lecturas individual y por cipas. Ejercicios prácticos realizados por el tutor, cipas - tutor, cipas. Aclaración de dudas individual y por cipas. ACREDITACION DEL NÚCLEO PROBLÉMICO Tener claros los conceptos del análisis sintáctico y el análisis léxico, así como también su importancia en la aplicación de un lenguaje de programación a la solución de un problema. NUCLEO NÚMERO 4: Análisis sintáctico TIEMPOS TIEMPO TOTAL DEL NÚCLEO : TIEMPO PRESENCIAL : TIEMPO INDEPENDIENTE : Cuatro horas y treinta minutos Una hora y treinta minutos Tres horas CONTENIDO TEMATICO DEL NUCLEO : El papel del analizador sintáctico Gramáticas independientes del contexto Escritura de una gramática Análisis sintáctico descendente Análisis sintáctico ascendente Análisis sintáctico por precedencia de operadores Analizadores sintácticos L R Uso de gramáticas ambiguas MOMENTO DE SENSIBILIZACIÓN ¿Son las gramáticas libres de contexto fundamentales en la construcción de compiladores? ¿El concepto de gramática ambigua impide el desarrollo de analizadores sintácticos? ¿Qué diferencias fundamentales existen entre un análisis descendente y un ascendente? COMPETENCIAS DEL NÚCLEO PROBLÉMICO Cognitivas Valorativas Comunicativas ACTMDADES DE INTEGRACIÓN Realizar una plenaria en la cual se discutan las lecturas realizadas sobre el tema y donde se busque la apropiación del conocimiento para poder desarrollar las unidades a continuación. Lecturas individual y por cipas. Ejercicios prácticos realizados por el tutor, cipas - tutor, cipas. Aclaración de dudas individual y por cipas. ACREDITACION DEL NÚCLEO PROBLÉMICO Tener claros los conceptos del análisis sintáctico y el análisis léxico, así como también su importancia en la aplicación de un lenguaje de programación a la solución de un problema. NUCLEO NÚMERO 5: Traducción Dirigida por la sintaxis TIEMPOS TIEMPO TOTAL DEL NÚCLEO : TIEMPO PRESENCIAL : TIEMPO INDEPENDIENTE : Cuatro horas y treinta minutos Una hora y treinta minutos Tres horas CONTENIDO TEMATICO DEL NUCLEO : Definiciones dirigidas por la sintaxis Construcción de árboles sintácticos Evaluación ascendente de definiciones con atributos sintetizados Definiciones con atributos por la izquierda Traducción descendente Evaluación ascendente de los atributos heredados Evaluadores recursivos MOMENTO DE SENSIBILIZACIÓN ¿Qué tipos de árboles son usados en la construcción de compiladores? ¿Cuáles son las diferentes técnicas de análisis de sintaxis utilizadas a través de árboles? ¿Cómo se pueden construir evaluadores recursivos? COMPETENCIAS DEL NÚCLEO PROBLÉMICO Cognitivas Valorativas Comunicativas ACTMDADES DE INTEGRACIÓN Realizar una plenaria en la cual se discutan las lecturas realizadas sobre el tema y donde se busque la apropiación del conocimiento para poder desarrollar las unidades a continuación. Lecturas individual y por cipas. Ejercicios prácticos realizados por el tutor, cipas - tutor, cipas. Aclaración de dudas individual y por cipas. ACREDITACION DEL NÚCLEO PROBLÉMICO Tener claros los conceptos de árboles de análisis sintáctico, así como también su importancia en la aplicación de un compilador de un lenguaje de programación. NUCLEO NÚMERO 6: Comprobación de tipos TIEMPOS TIEMPO TOTAL DEL NÚCLEO : TIEMPO PRESENCIAL : TIEMPO INDEPENDIENTE : Cuatro horas y treinta minutos Una hora y treinta minutos Tres horas CONTENIDO TEMATICO DEL NUCLEO : Sistemas de tipos Especificación de un comprobador de tipos sencillo Equivalencia de expresiones de tipos Conversiones de tipos Sobrecarga de funciones y operadores Funciones polimórficas MOMENTO DE SENSIBILIZACIÓN ¿Cómo un compilador puede manejar los diferentes tipos de datos definidos en un lenguaje de programación? ¿Cuál es la función de un comprobador de tipos en un compilador? ¿Cómo la sobrecarga de funciones y de operadores permiten el análisis de los diferentes tipos y su manejo? COMPETENCIAS DEL NÚCLEO PROBLÉMICO Cognitivas Valorativas Comunicativas ACTMDADES DE INTEGRACIÓN Realizar una plenaria en la cual se discutan las lecturas realizadas sobre el tema y donde se busque la apropiación del conocimiento para poder desarrollar las unidades a continuación. Lecturas individual y por cipas. Ejercicios prácticos realizados por el tutor, cipas - tutor, cipas. Aclaración de dudas individual y por cipas. ACREDITACION DEL NÚCLEO PROBLÉMICO Tener claros los conceptos de lenguajes de programación basados en tipos, así como también su importancia de esto en la construcción de un compilador. NUCLEO NÚMERO 7: Generación de código TIEMPOS TIEMPO TOTAL DEL NÚCLEO : TIEMPO PRESENCIAL : TIEMPO INDEPENDIENTE : Cuatro horas y treinta minutos Una hora y treinta minutos Tres horas CONTENIDO TEMATICO DEL NUCLEO : Lenguajes intermedios Declaraciones Proposiciones de asignación Expresiones booleanas Proposiciones case Llamadas a procedimientos Aspectos de diseño de un generador de códigos La máquina objeto Administración de la memoria durante la ejecución Bloques básicos y grafos de flujo Un generador de código simple Distribución y asignación de registros Optimización mediante mirilla Algoritmo de generación de código con programación dinámica MOMENTO DE SENSIBILIZACIÓN ¿Cuáles son las características a tener en cuenta a la hora de construir un lenguaje de programación? ¿Cuáles son las estructuras básicas que se deben tener en un lenguajes de programación y cómo se modelan desde el punto de vista del compilador? ¿Cómo se puede construir un generador de código? COMPETENCIAS DEL NÚCLEO PROBLÉMICO Cognitivas Valorativas Comunicativas ACTMDADES DE INTEGRACIÓN Realizar una plenaria en la cual se discutan las lecturas realizadas sobre el tema y donde se busque la apropiación del conocimiento para poder desarrollar las unidades a continuación. Lecturas individual y por cipas. Ejercicios prácticos realizados por el tutor, cipas - tutor, cipas. Aclaración de dudas individual y por cipas. ACREDITACION DEL NÚCLEO PROBLÉMICO Tener claros los conceptos de la construcción de generadores de código, así como también su importancia en la construcción de un lenguaje de programación. NUCLEO NÚMERO 8: Optimización de código TIEMPOS TIEMPO TOTAL DEL NÚCLEO : TIEMPO PRESENCIAL : TIEMPO INDEPENDIENTE : Cuatro horas y treinta minutos Una hora y treinta minutos Tres horas CONTENIDO TEMATICO DEL NUCLEO : Las principales fuentes para la optimización Optimización de bloques básicos Lazos en los grafos de flujo Análisis global de flujo de datos Solución iterativa de las ecuaciones de flujo de control Transformaciones para mejorar el código Tratamientos con sinónimos (Alias) Análisis de flujo de datos de grafos de flujo estructurados Algoritmos eficientes para el flujo de datos MOMENTO DE SENSIBILIZACIÓN ¿Es fundamental la utilización de alguna estrategia de optimización de código? ¿Cuál podría ser una estrategia adecuad para la optimización de código? ¿Cuál es la función de un grafos de flujo y de una flujo de control en la optimización de código? COMPETENCIAS DEL NÚCLEO PROBLÉMICO Cognitivas Valorativas Comunicativas ACTMDADES DE INTEGRACIÓN Realizar una plenaria en la cual se discutan las lecturas realizadas sobre el tema y donde se busque la apropiación del conocimiento para poder desarrollar las unidades a continuación. Lecturas individual y por cipas. Ejercicios prácticos realizados por el tutor, cipas - tutor, cipas. Aclaración de dudas individual y por cipas. ACREDITACION DEL NÚCLEO PROBLÉMICO Tener claros los conceptos del análisis sintáctico y el análisis léxico, así como también su importancia en la aplicación de un lenguaje de programación a la solución de un problema. 14. ACREDITACIÓN GENERAL DEL CURSO El estudiante aprobará el curso si ha logrado incorporar los conceptos fundamentales en la construcción de compiladores y se los puede aplicar en la solución de un problema generl planteado por el tutor. 15. MATERIAL DE CONSULTA RECOMENDADO El material pedagógico a utilizar en el desarrollo del curso es: Compiladores: Principios, Técnicas y Herramientas escrito por AHO, Alfred V. y Otros de la editorial Adisson – Wesley. 16. BIBLIOGRAFÍA Advanced Compiler Design and Implementation de Muchnick Modern Compiler Implementation in C de Andrew Appel FRASER, Christopher and HANSON, David R. A retargetable C compiler: design and implementation. Menlo Park, CA., Addison Wesley, 1995. HOLUB, Allen. Compiler design in C. Englewood Cliffs, N.J., Prentice Hall, 1990. PITTMAN, Thomas and PETERS, James. The art of compiler design: theory and practice. Englewood Cliffs, N.J., Prentice Hall, 1992. WIRTH, Niklaus. Compiler construction. Harlow, England, Addison Wesley, 1996.