Enginyeria Informàtica Guia Docent Curs acadèmic 2007-08 Nom de l’assignatura : Compiladors Codi 21289 Tipus • Optativa • Semestral Curs/semestre Crèdits ECTS 3er curs / 2n semestre 5 Professors Nom Dpt/Unitat Despatx Direcció e-mail DCC S/247 Javier arroba cvc.uab.es F.J. Sánchez Telèfon Objectius Conocimientos: • Análisis lexicográfico, sintáctico y semántico. • Organización de memoria de los programas durante su ejecución. • Generación de código. • Gestión de memoria. Habilidades y competencias: • Un mayor conocimiento sobre el funcionamiento de los compiladores. • Aprovechar mejor las capacidades de los compiladores. • Escribir programas más óptimos y legibles. • Entender los errores de compilación. • Depuración más rápida de programas. • Programación más abstracta. Capacitats prèvies Conocimientos sobre programación imperativa, estructuras de datos, arquitectura de ordenadores. Enginyeria Informàtica Guia Docent Curs acadèmic 2007-08 Continguts (T:teoria, S:seminaris, PS:preparació de seminaris, L:laboratorios, PP:preparació pràctiques, E:estudi, AA:altres activitats) T S PS L E PP AA 2 1 Compilador. Interprete. Código fuente. Código objeto. Gramáticas y lenguajes de programación. Etapas de compilación: análisis lexicográfico, análisis sintáctico, análisis semántico y generación de código. Tabla de símbolos. Compiladores y Recursividad. Tema 1. Introducción y conceptos básicos Total 3 T S PS L E PP AA Total 4 2 2 3 5 2 18 Símbolo. Scanner. Expresiones regulares. Autómatas finitos y scanners. Consideraciones prácticas. Palabras reservadas. Final del código fuente. Análisis de múltiples caracteres hacia delante. Recuperación de errores léxicos. Tema 2. Análisis lexicográfico: Scanners T S PS L E PP AA 8 3 3 6 14 3 GRAMÁTICAS. Gramáticas Libres del Contexto. Definición de gramática. Clasificación: regulares, libres del contexto, dependientes del contexto, recursivas. Tema 3. Gramáticas y análisis sintáctico: Parser Total 37 NOTACIONES. Notación BNF extendida. Diagramas Sintácticos. Traducción de BNF a diagramas sintácticos. GRAMÁTICAS Y LENGUAJES DE PROGRAMACIÓN. Características de las Gramáticas y Lenguajes de Programación. Árbol sintáctico. Ambigüedad gramatical. Estructura de un lenguaje y su gramática PARSERS. .Gramáticas y Parsers LL(1): Análisis un símbolo en adelante sin vuelta a tras. Primeros y siguientes. Definición de gramática LL(1). Construcción de un parser LL(1): traducción de las reglas BNF en un parser, traducción de los diagramas sintácticos en un parser ERRORES. Recuperación de Errores. T S PS L E PP AA Total 4 1 1 3 7 1 17 TRADUCCIÓN DIRIGIDA POR LA SINTAXIS. Rutinas semánticas, símbolos de acción, atributos. Tema 4. Análisis semántico TABLA DE SÍMBOLOS. Contenido: símbolos y atributos. Técnicas básicas de búsqueda: secuencial, árbol binario, tabla hash. Estructura de bloques de la tabla de símbolos para: lenguajes no estructurados, lenguajes estrucados por bloques anidados, etc. Representación de atributos recursivos (tipos). Consideraciones de orden práctico: Creación y destrucción en la tabla de símbolos. ANÁLISIS SEMÁNTICO DE DECLARACIONES. Tipos de datos. Variables. Funciones. Procedimientos. ANÁLISIS SEMÁNTICO DE EXPRESIONES E INSTRUCCIONES. Expresiones aritméticas. Expresiones de acceso. Llamadas a funciones. Instrucciones de control de flujo. Enginyeria Informàtica Guia Docent Curs acadèmic 2007-08 T S PS L E PP AA Total Tema 5. Organización de memoria en tiempo de ejecución 6 1 1 2 10 1 21 AMBIENTE DE EJECUCIÓN. Máquina abstracta. Organización de memoria de un programa. ASIGNACION ESTATICA DE MEMORIA. Segmento de datos. Segmento de código. Enlazado de ficheros objeto, librerías estáticas y dinámicas. Representación de estructuras de datos: Arrays. Registros (estructuras y uniones). Conjuntos. PILA DE EJECUCIÓN. Asignación de la Pila. Registro de activación. Enlaces estáticos y dinámicos. Displays. Llamada y retorno de una función. Resultados intermedios. Códigos de llamada a funciones y acceso a variables locales. HEAP. Asignación Dinámica de Memoria. Liberación explicita: lista ordenada de bloques libres, bloques etiquetados en los extremos, bloques compañeros. Liberación Implícita: contador de referencias, marcar y barrer, recolector por copia, compactación. T S PS L E PP AA 6 3 3 6 9 2 GENERACIÓN DE CÓDIGO. Procesamiento de declaraciones y tabla de símbolos. Compilación de Estructuras de Control. Tema 6. Generación de código Total 29 GENERACIÓN DE CÓDIGO DE EXPRESIONES. Notación postfija. Pila para los resultados intermedios. Casos: expresiones PASCAL y C. DIRECCIONES. Procesar referencias a Estructuras de Datos. Selectores como operadores. Cálculo de la dirección. Casos: estructuras de datos PASCAL y C. Metodologia docent Teoría: Clases magistrales en las que el profesor explica el temario de la asignatura basándose en presentaciones realizadas con ordenador y la explicación de un compilador que los alumnos pueden probar y modificar para entender su funcionamiento. Problemas: A partir del compilador y el generador de compiladores utilizado en teoría, se propondrán problemas que los alumnos han de solucionar. Algunos se realizarán en clase y otros serán ejercicios a entregar. Para cada ejercicio a entregar se aportará el enunciado, una plantilla (fichero) para realizarlo y un autotest. El alumno implementará la solución para poderla probar con el autotest. Se harán entregas personalizadas donde se tratarán las principales dudas que hayan surgido en la realización de los ejercicios. Prácticas: Desarrollo de un micro compilador que supondrá la puesta en práctica de los conocimientos adquiridos en la teoría. Enginyeria Informàtica Guia Docent Curs acadèmic 2007-08 Avaluació La evaluación se hará a partir de los ejercicios entregados y la práctica. En las entregas se harán preguntas sobre el trabajo realizado para poder evaluar la adquisición de los conocimientos por parte del alumno. Avaluació continuada SI. Entrega de problemas y los módulos de la práctica. En estas entregas se hará un seguimiento personalizado. Examen final Solo para los alumnos que no hayan seguido la evaluación continuada. 2ª convocatòria No hay. Bibliografia bàsica Crafting a Compiler with C, Charles N. Fisher & Richard J. Leblanc jr., The Benjamin / Cummings Publishing Company inc., 1991. Modern Compiler Design. Dick Grune et al. Wiley, 2000. The Theory and Practice of Compiler Writing, Jean-Paul Tremblay & Paul G. Sorenson, MCGRAW-HILL, 1985. Compiladores: Principios, técnicas y herramientas, Alfred V. Aho, Ravi Sethi & Jeffrey D. Ullman, Addison-Wesley, 1990. Bibliografia complementària Programming Language Concepts and Paradigms, David A. Watt, Prentice Hall, 1990. Programming Language Processors, David A. Watt, Prentice Hall, 1993. Programming Languages: Design and Implementation, Terrence W. Pratt, Prentice Hall International Editions, 1984. Compiler Construction. An Advanced Course, Edited by G. Goos and J. Hartmanis, Springer-Verlag, 1974. Enginyeria Informàtica Guia Docent Curs acadèmic 2007-08 The Design of an Optimizing Compiler, William Wulf et all., North Holland, 1980. An Implementation Guide to Compiler Writing, Jean-Paul Tremblay & Paul G. Sorenson, MCGRAW-HILL, 1982. Writing Compilers & Interpreters: An Applied Approach, Ronald Mak, Wiley, 1991. Writing Interactive Compilers and Interpreters, J. P. Brown, Wiley, 1979. Compiler Design in C, Allen Y. Holub, Prentice Hall, 1990. Garbage Collection, Richard Jones y Rafael Lins, Wiley 1996. Enllaços web http://www.cvc.uab.es/shared/teach/a21289/c21289.htm