UNIVERSIDAD DE GUADALAJARA CENTRO UNIVERSITARIO DE CIENCIAS EXACTAS E INGENIERÍAS DIVISIÓN DE ELECTRÓNICA Y COMPUTACIÓN DEPARTAMENTO DE CIENCIAS COMPUTACIONALES DATOS GENERALES CLAVE DE LA MATERIA : CC317 NOMBRE DE LA MATERIA : COMPILADORES TIPO : TEORIA CARÁCTER DEL CURSO : OBLIGATORIO ÁREA DE FORMACIÓN : ESPECIALIZANTE PRE-REQUISITOS : TEORIA DE LA COMPUTACIÓN DEPTO. DE ADSCRIPCIÓN : CIENCIAS COMPUTACIONALES ACADEMIA : SOFTWARE DE SISTEMAS CARGA HORARIA GLOBAL : 80 HORAS CARGA HORARIA SEMANAL : 4 HORAS VALOR EN CRÉDITOS : 11 CRÉDITOS FECHA DE ACTUALIZACIÓN : JULIO/2004 Calendario de Aplicación: 2006-A OBJETIVO GENERAL : EL ALUMNO COMPRENDERÁ QUÉ ES Y CÓMO FUNCIONA UN COMPILADOR. ADQUIRIRÁ LA CAPACIDAD PARA DISEÑAR UN COMPILADOR FUNCIONAL COMPLETO PARA UN LENGUAJE ESPECIFICADO AL COMENZAR EL CURSO UNIVERSIDAD DE GUADALAJARA CENTRO UNIVERSITARIO DE CIENCIAS EXACTAS E INGENIERÍAS DIVISIÓN DE ELECTRÓNICA Y COMPUTACIÓN DEPARTAMENTO DE CIENCIAS COMPUTACIONALES COMPILADORES CONTENIDO TEMÁTICO PRINCIPAL Aplicar en el Calendario: 2006-A Módulo 1. Descripción general de los traductores (4 horas) Objetivo Particular: El alumno entenderá el funcionamiento genérico de un compilador. 1.1 1.2 1.3 Funciones principales (30 minutos) Estructura interna (30 minutos) Pasos y fases de la compilación y de la interpretación (1 hora) Objetivos Específicos: 1.1 1.2 1.3 Que el alumno entienda cómo funciona un compilador. Que el alumno comprenda como está estructurado un compilador. Que el alumno visualice de manera general cada una de las fases de un compilador. Actividad: Presentación por parte del maestro cada uno de los pasos de un compilador Instalaciones y Recursos: Aula de clase, pintarrón Tiempo Disponible: 2 horas Módulo 2. Analizador léxico (10 horas) Objetivo Particular: El alumno realizará un reconocedor léxico en base a las gramáticas de tipo 3 y los autómatas finitos. 2.1 2.2 2.3 Lenguajes y expresiones regulares (1 hora) Analizador lexicográfico con autómatas finitos (1 hora) Diseño de un analizador léxico (2 horas) Objetivos Específicos: 2.1 2.2 2.3 Que el alumno comprenda el uso y la creación de las expresiones regulares. Que el alumno aplique los autómatas finitos en la realización de un analizador léxico. Que el alumno entienda como se puede diseñar un analizador léxico. Actividad: El alumno diseñará en el aula un conjunto de expresiones regulares Instalaciones y Recursos: Aula de clase, pintarrón, cuaderno Tiempo Disponible: 2 horas Actividad: El alumno diseñará autómatas que reconozcan expresiones regulares Instalaciones y Recursos: Aula de clase, pintarrón, cuaderno Tiempo Disponible: 2 horas Actividad: El alumno diseñará el analizador léxico para el lenguaje especificado Instalaciones y Recursos: Aula de clase, apuntes, cuaderno Tiempo Disponible: 2 horas Módulo 3: Analizador sintáctico (14 horas) Objetivo Particular: El alumno realizará un rastreador o ‘parser’ con base en las dos filosofías básicas en el análisis sintáctico. 3.1 3.2 3.3 3.4 3.5 Gramáticas independientes de contexto (1 hora) Autómata de pila (1 hora) Analizadores sintácticos descendentes (2 horas) Analizadores sintácticos ascendentes (1 hora) Diseño de un analizador de descenso recursivo (2 horas) Objetivos Específicos: 3.1 3.2 3.3 3.4 3.5 Que el alumno retome los conceptos de gramáticas vistos en teoría de la computación. Que el alumno identifique el uso de los autómatas de pila en los analizadores sintácticos. Que el alumno observe las características de los analizadores descendentes. Que el alumno observe y compare los analizadores ascendentes y descendentes. Que el alumno entienda como se puede diseñar un analizador de descenso recursivo. Actividad: El alumno diseñará en el aula un autómata de pila para un conjunto de expresiones Instalaciones y Recursos: Aula de clase, pintarrón, cuaderno Tiempo Disponible: 1 hora Actividad: El alumno diseñará el analizador sintáctico de descenso recursivo (parser) para el lenguaje especificado en clase Instalaciones y Recursos: Aula de clase, apuntes, cuaderno Tiempo Disponible: 6 horas Módulo 4. Tabla de símbolos (4 horas) Objetivo Particular: 4.1 4.2 4.3 4.4 Esquemas de la tabla de símbolos (15 minutos) Arreglos secuenciales (30 minutos) Arreglos de acceso por dispersión (30 minutos) Estructuras avanzadas (30 minutos) Objetivos Específicos: 4.1 4.2 4.3 4.4 Que el alumno entienda que es y como funciona una tabla de símbolos. Que el alumno identifique el uso de los arreglos secuenciales en la tabla de símbolos. Que el alumno comprenda las ventajas del uso de las tablas de dispersión. Que el alumno comprenda como emplear estructuras de datos avanzadas para hacer más eficiente la tabla de símbolos. Actividad: Presentación por parte del maestro del esquema de la tabla de símbolos y de la ventaja de los arreglos de acceso por dispersión sobre los arreglos secuenciales Instalaciones y Recursos: Aula de clase, pintarrón Tiempo Disponible: 15 minutos Actividad: El alumno diseñará una tabla de símbolos para el lenguaje especificado en clase Instalaciones y Recursos: Aula de clase, apuntes, cuaderno Tiempo Disponible: 2 horas 1er examen parcial. Duración: 2 horas. 1er examen departamental. Duración: 2 horas. Modulo 5. Análisis semántico (14 horas) Objetivo Particular: El alumno aprenderá a hacer las diferentes validaciones necesarias para la detección de construcciones gramaticales correctas pero con un significado erróneo o contradictorio. 5.1 5.2 5.3 5.4 Verificación de tipos (2 horas) Verificación de unicidad (2 horas) Verificación de flujo (2 horas) Verificación en uso de símbolos (2 horas) Objetivos Específicos: 5.1 5.2 5.3 5.4 Que el alumno detecte cuáles son las verificaciones necesarias para los tipos de dato. Que el alumno detecte cuáles son las verificaciones necesarias para la unicidad. Que el alumno detecte cuáles son las verificaciones necesarias en el flujo de datos. Que el alumno detecte cuáles son las verificaciones necesarias para el uso de símbolos. Actividad: El alumno agregará las verificaciones necesarias para el lenguaje especificado al analizador sintáctico de descenso recursivo diseñado previamente en clase Instalaciones y Recursos: Aula de clase, apuntes, cuaderno Tiempo Disponible: 6 horas Módulo 6: Generación de código y optimizaciones del compilador (8 horas) Objetivo Particular: El alumno comprenderá los mecanismos de generación de código dirigido por la sintaxis del lenguaje propuesto. A su vez, analizará el impacto que tiene la arquitectura de un procesador sobre la generación de código objeto. 6.1 6.2 6.3 Código intermedio (1 hora) Código objeto (1 hora) Optimización local (1 hora) Objetivos Específicos: 6.1 6.2 6.3 Que el alumno aprenda a crear código intermedio y las ventajas que tiene. Que el alumno identifique las ventajas del código objeto y como este puede variar dependiendo de la arquitectura del procesador. Que el alumno aprenda las ventajas de hacer un compilador óptimo además de funcional. Actividad: El alumno diseñará diagramas de flujo y pseudocódigo que identifiquen donde se debe generar código (intermedio u objeto) para las diferentes estructuras de control de un lenguaje de programación Instalaciones y Recursos: Aula de clase, pintarrón, cuaderno Tiempo Disponible: 2 horas Actividad: El alumno agregará las instrucciones necesarias al analizador sintáctico de Descenso recursivo diseñado previamente en clase para que éste genere código y que además lo realice de manera adecuada. Instalaciones y Recursos: Aula de clase, apuntes, cuaderno Tiempo Disponible: 3 horas Módulo 7. Recuperación de errores (4 horas) Objetivo Particular: El alumno aprenderá los diferentes esquemas de la gestión de errores. 7.1 7.2 7.3 Gestión de errores en tiempo de compilación (30 minutos) Gestión de errores durante la ligadura de módulos objeto (30 minutos) Métodos de recuperación de errores (1 hora) Objetivos Específicos: 7.1 7.2 7.3 Que el alumno identifique los errores que se pueden presentar en cada una de las fases durante el proceso de compilación. Que el alumno comprenda la importancia de los errores que pueden ocurrir al ligar módulos. Que el alumno identifique los cuatro métodos de recuperación de errores y que aprenda como funciona cada uno de ellos. Actividad: El alumno agregará las verificaciones pertinentes al analizador sintáctico de descenso recursivo diseñado previamente en clase para tratar de identificar los errores que podrían ocurrir así como recuperarse de ellos. Instalaciones y Recursos: Aula de clase, apuntes, cuaderno Tiempo Disponible: 2 horas Módulo 8. Gestión de memoria (2 horas) Objetivo Particular: El alumno aprenderá los efectos que se tienen sobre el diseño de un compilador dependiendo de la dinámica de gestión de memoria y de los recursos del procesador. 8.1 8.2 8.3 8.4 8.5 8.6 Gestión estática y dinámica de memoria (15 minutos) Representación de procesos en memoria (15 minutos) Liga postergada (15 minutos) Ámbito de variables (15 minutos) Procedimientos y módulos (15 minutos) Paso de parámetros y registro de activación. (15 minutos) Objetivos Específicos: 8.1 8.2 8.3 8.4 8.5 8.6 Que el alumno visualice las diferencias entre la gestión estática y dinámica de la memoria. Que el alumno comprenda como se representan los procesos físicamente en la memoria. Que el alumno entienda el concepto de liga postergada y sus ventajas Que el alumno identifique como el ámbito de una variable afecta en el flujo de un programa. Que el alumno comprenda como se representan en la memoria los procedimientos y los módulos de un programa. Que el alumno refuerce los conocimientos acerca de los diferentes métodos para el paso de parámetros y que aprenda que es un registro de activación y su contenido. Actividad: Presentación por parte del maestro de cada uno de los métodos para el paso de parámetros y la manera en que estos son tratados por la memoria dependiendo del método utilizado. Instalaciones y Recursos: Aula de clase, pintarrón Tiempo Disponible: 30 minutos 2do examen parcial. Duración: 2 horas. 2do examen departamental. Duración: 2 horas. MODALIDAD DE ENSEÑANZA-APRENDIZAJE Para la realización de este curso, se recomienda que el profesor asesore y supervise el proceso de formación y retención de cada alumno, además de comprobar la realización de las prácticas del taller de compiladores. Para cada sesión el alumno deberá haber leído y comprendido el material que se le indique previamente. El proyecto final se calificará con una parte proporcional de las calificaciones obtenidas en la materia de taller de compiladores y en caso de no estar cursándola se calificará con la integración, complementación y entrega de todas las actividades finales de los módulos 2 al 7 hechas en teoría a lo largo del semestre. MATERIAL DE APOYO ACADÉMICO - Notas sobre el curso. - Pintarrón y marcadores. - Laptop y cañón. CRITERIOS DE EVALUACIÓN Se evaluará durante el período escolar mediante: Trabajos de investigación, tareas, actividades, participaciones, exámenes y un proyecto final El examen extraordinario estará conformado por una revisión teórica y práctica de todo el curso CRITERIOS DE CALIFICACIÓN La calificación se integrará de la siguiente manera: 30% 20% 30% 10% 10% Exámenes departamentales Exámenes parciales Actividades finales (6 en total, una por cada módulo del 2 al 7) Trabajos de investigación, tareas y participaciones Proyecto final CRITERIOS DE ACREDITACIÓN Haber obtenido un promedio global de 60 puntos de un máximo de 100 y un mínimo del 80% del total de asistencia y tener trabajo registrado en el ciclo. COMPETENCIAS QUE SE PUEDEN ADQUIRIR Capacidad de ser un diseñador de compiladores de lenguajes, y creación de intérpretes. Capacidad para diseñar programas de sistemas en donde se involucra el proceso de lenguajes de programación. Programación más eficiente a partir del entendimiento del funcionamiento de los compiladores y las técnicas de optimización de código. APLICACIÓN PROFESIONAL Entender la importancia de los programas de sistemas que interpretan, compilan y en general procesan lenguajes, de manera que se puedan implantar procesadores de órdenes de aplicación particular en la industria ó actividad profesional que lo requiera. Se asume la integridad y honestidad del alumno, sin embargo aquellos proyectos que sean presentados como propios y la autoría fuese ajena provocará la reprobación automática. BIBLIOGRAFÍA Título: Compiladores. Principios, técnicas y herramientas. Autor: Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman. Editorial: Addison-Wesley / Pearson. Año: 1990. Título: Construcción de Compiladores. Autor: Kenneth C. Louden. Editorial: Thomson. Año: 2004. Título: 21st Century Compilers. Autor: Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman, Monica Lam. Editorial: Addison-Wesley. Año: 2004. Manual en línea: http://www-2.cs.cmu.edu/~rwh/plbook/online.pdf