Compiladors I (CL1)
(http://www.lsi.upc.edu/~roberto)
Professors Responsables: |
ROBERT NIEUWENHUIS (roberto lsi.upc.edu)
|
|
Crèdits: 4.5 (3.0 T 0.0 P 1.5 L)
|
Departament:
LSI
|
Tipus d'assignatura
Obligatoria de segon cicle per la EI
Optativa per la ETIG , ETIS
Requisits de l'assignatura
LGA
- Pre-requisit per la EI , ETIG , ETIS
|
|
Objectius docents
Mejorar la comprensión de los conceptos y estructuras de los lenguajes de programación, su semántica y su implementación correcta y eficiente (lo cual también ayuda a ser un mejor programador). Proporcionar diversas metodologías (con su teoría y sus herramientas) no sólo para el tratamiento de lenguajes de programación, sino también para diversas otras aplicaciones como los intérpretes de comandos y de queries, formateadores de texto (TeX, LaTeX, nroff) lenguajes de simulación (simscript, GPSS), de descripción de hardware (VDHL, Verilog), y gráficos (postscript, CIF, HPGL, GIF). Llevar a la práctica un proyecto en el que muy diversos conceptos previamente estudiados son totalmente imprescindibles: programación estructurada y necesariamente correcta, modularidad, portabilidad, tipos abstractos de datos (pilas, listas, árboles, grafos), lenguajes formales y sus autómatas (lenguajes regulares/autómatas finitos, gramáticas incontextuales/autómatas de pila, gramáticas de atributos).
Programa
1. Análisis Léxico
- papel en las fases de la compilación - otras aplicaciones (recuperación de información, editores de texto, sistemas operativos, lenguajes de programación: AWK, verificación de circuitos) - descripción del problema de análisis léxico - construcción de Thompson de AFN - uso directo del AFN vs. determinización - detección y tratamiento de errores - herramienta Flex
2. Análisis Sintáctico
- gramáticas de contexto libre: nomenclatura, poder expresivo, AST's, ambigüedades, transformaciones - parsing descendente: recursivo, iterativo, con backtracking, características necesarias de la CFG, algoritmo LL (first/follow), tratamiento de errores. - parsing ascendente: algoritmo general con shift/reduce, prioridades de los operadores, - parsing SLR. - parsing LR canonico. - parsing LALR. - tratamiento de errores. - herramienta Bison.
3. Análisis semántico
- propiedades semánticas vs. sintácticas - árboles de sintaxis abstracta decorados - recorridos - tipos simples y estructurados - conversión de tipos - comprobación de parámetros - cálculo de tipos - detección y recuperación de errores semánticos
Avaluació
Evaluación de la práctica. La evaluación del trabajo práctico en CL1 y CL2 se basará exclusivamente en la realización de un examen escrito. Evaluación de la asignatura. La nota final F de la asignatura se calculará en función de los exámenes de la práctica P y de teoría T como sigue. Sea min=mínimo(T,P). If min>5 Then F:=(2T+P)/3 Else F:=(min/5)*(2T+P)/3.
Càrrega
Los 4.5 créditos de la asignatura se descomponen en 3 de teoría y 1.5 de laboratorio, lo cual permite organizar la asignatura en dos horas semanales de clases teóricas y una hora semanal de laboratorio (donde estas últimas se agrupan en bloques de dos horas quincenales). Las clases de laboratorio consisten en la utilización de herramientas (Flex y Bison) que, en combinación con el lenguaje C, permiten realizar ejercicios como tratamientos y búsquedas complejas en strings, encriptar textos, calculadoras, y finalmente, realizar la práctica. Hay una única práctica, individual, consistente en la implementación de las primeras fases de un compilador para un lenguaje de alto nivel llamado CL (tipo Pascal/Modula). Esta implementación hará el análisis léxico, sintáctico y semántico, detectando errores, y generará el árbol de sintaxis abstracta decorado que sera utilizado en la asignatura de CL-2 para producir código optimizado en el lenguaje Q, que es el código ejecutado por la Q-machine. Para facilitar el trabajo, los estudiantes tendrán a su disposición una gramática de CL, diversos tipos abstractos de datos ya implementados (tablas de símbolos, árbol de sintaxis abstracta), y una colección de programas-ejemplo escritos en CL (los llamados juegos de prueba públicos).
Bibliografia
Bibliografia bàsica
- AHO, A.V.; ULLMAN, J.D Principles of Compiler Design Addison-Wesley, 1978 - AHO, A.V., SETHI, R., ULLMAN, J.D Compiladores, principios,
técnicas y herramientas Addison-Wesley Iberoamericana. Madrid, 1990 - WILHELM, R., MAURER, D. Compiler Design Addison-Wesley P. C. , 1995 - DICK GRUNE, CERIEL JACOBS Parsing Techniques, A practical guide Els autors, 1995 - ANDREW W. APPEL Modern Compiler Implementation in (ML, Java, C) Cambridge University Press, 1998
Bibliografia complementària
- SCHREINER, A.T., FRIEDMAN Jr., H.G Introduction to Compiler Construction
with UNIX Prentice-Hall Inc, 1985 - WAITE, T.; GOOS, G Compiler Construction Springer Verlag, 1984 - FISHER, C.N. LeBLANCH Jr., R.J Crafting a Compiler The Benjamin/Cummings Publ. Comp , 1998
Informació complementària
L'assignatura no inclou classes de problemes, però existeix una llista de problemes i es recomana fortament a tots els alumnes que intentin solucionar-los., aixi com els exercicis de laboratori per a aprendre les eines flex i bison que us seran de gran utilitat al fer la pràctica. Cada grup de teoria es divideix en 4 subgrups de laboratori. Cada grup de laboratori té una freqüència quinzenal amb un professor de l'assignatura com a responsable, i que està present a l'aula.
|