GOBIERNO CONSTITUCIONAL DEL ESTADO LIBRE Y SOBERANO DE OAXACA INSTITUTO ESTATAL DE EDUCACIÓN PÚBLICA DE OAXACA COORDINACIÓN GENERAL DE PLANEACIÓN EDUCATIVA COORDINACIÓN GENERAL DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR PROGRAMA DE ESTUDIOS NOMBRE DE LA ASIGNATURA: COMPILADORES CICLO QUINTO SEMESTRE CLAVE DE LA ASIGNATURA 3051 TOTAL DE HORAS 102 OBJETIVOS GENERALES DE LA ASIGNATURA: Al término de la asignatura, el alumno obtendrá los elementos teórico-prácticos suficientes para analizar, diseñar e implementar compiladores; para lo cual, conocerá las diferentes fases que componen esta herramienta. 1. TEMAS Y SUBTEMAS INTRODUCCIÓN AL PROCESO DE COMPILACIÓN. 1.1. Introducción a la compilación. 1.2. Estructura de un compilador. 1.3. Fases de compilación. 1.4. Lenguajes y tipos de traductores. 1.5. Herramientas para el desarrollo de un compilador. 1.6. Clasificación de los compiladores. 2. ANÁLISIS LÉXICO. 2.1. Funcionalidad del analizador léxico. 2.2. Especificación y reconocimiento de los símbolos de un lenguaje. 2.3. Diseño e implementación de un analizador léxico. 2.4. Control de errores léxicos. 3. ANÁLISIS SINTÁCTICO. 3.1. Funcionalidad del analizador sintáctico. 3.2. Gramáticas libres de contexto. 3.3. Árboles de derivación. 3.4. Especificación sintáctica de un lenguaje. 3.5. Análisis sintáctico ascendente. 3.6. Análisis sintáctico descendente. 3.7. Generadores de analizadores sintácticos. 4. ANÁLISIS SEMÁNTICO. 4.1. Funcionalidad del analizador semántico. 4.2. Traducción dirigida por la sintaxis. 4.3. Gramáticas de atributos. 4.4. Comprobaciones semánticas. 4.5. Comprobación de tipos. 5. GENERADORES DE CÓDIGO. 5.1. Aspectos del diseño de un generador de código. 5.2. Lenguajes intermedios. 5.3. La máquina objeto. 5.4. Administración de la memoria durante la ejecución. 5.5. Bloques básicos y diagramas de flujo. 5.6. Un generador de código simple. 5.7. Distribución y asignación de registros. 5.8. Representación de bloques por medio de GDA (Diagrama Dirigido Acíclico). 5.9. Generadores de código. 6. OPTIMIZACIÓN DE CÓDIGO. 6.1. 6.2. 6.3. 6.4. 6.5. 6.6. Principales fuentes para la optimización. Optimización independiente de la máquina objeto. Optimización de bloques básicos. Lazos en los diagramas de flujo. Análisis del flujo de datos. Optimización dependiente de la máquina objeto: registros e instrucciones. ACTIVIDADES DE ENSEÑANZA-APRENDIZAJE: Sesiones dirigidas por el profesor. Las sesiones se desarrollarán utilizando medios de apoyo didáctico como son la computadora, cañón y pizarrón. Revisión bibliográfica del tema por los alumnos en la bibliografía básica y de consulta. Análisis, diseño e implementación de analizadores léxicos sencillos en un lenguaje de alto nivel utilizando un generador de analizadores léxico gráficos como LEX o JFLEX. Análisis, diseño e implementación de analizadores sintácticos sencillos en un lenguaje de alto nivel utilizando generadores de analizadores sintácticos como YACC o BISON. Análisis, diseño e implementación de una máquina virtual en un lenguaje de alto nivel. Análisis, diseño, implementación y puesta a punto de un proyecto final de mediana complejidad donde se emplee la gran mayoría de los conceptos vistos en el transcurso del semestre. CRITERIOS Y PROCEDIMIENTOS DE EVALUACIÓN Y ACREDITACIÓN: Al inicio del curso el profesor indicará el procedimiento de evaluación para la obtención de la calificación final, de la cual el 50% lo representará el promedio de las calificaciones parciales y el otro 50 % el examen ordinario. Para tener derecho a cada evaluación, el alumno deberá cumplir con un mínimo de 85% de asistencia. BIBLIOGRAFÍA (TIPO, TÍTULO, AUTOR, EDITORIAL Y AÑO): BÁSICA Diseño de compiladores modernos, Grune Dick, Editorial McGraw-Hill, 2007. Compilers: Principles, Techniques, and Tools, Alfred V. Aho, Ravi Sethi and Jeffrey D. Ullman, Second edition, Adisson Wesley editorial, 2006. Compiladores e interpretes: teoría y práctica, Manuel Alfonseca, et. al, Editorial Pearson Education, 2006. Compiladores: Traductores y Compiladores con Lex/Yacc, Jflex/Cup y JavaCC, Sergio Gálvez, et al. Editoiral Universidad de Malaga, 2005. CONSULTA Lex & Yacc, John R. Levine, Tony Mason and Doug Brown, O’Reilly & Associates editorial, 1995. The Theory And Practice Of Compiler Writing, Jean-Paul Tramblay and Paul G. Sorenson, Mc Graw-Hill editorial, 1985. Building Parsers with Java, Steven John Metsker, Addison-Wesley editorial, 2001. Introduction to Automata Theory, Languages, and Computation, J. Hopcroft and J.D. Ullman, Second edition, Addison-Wesley editorial, 2000. PERFIL PROFESIONAL DEL DOCENTE: Maestría o doctorado en ciencias de la computación o área afín, con habilidades para la programación de sistemas y/o compiladores. Experiencia profesional y docente mínima de 1 año.