Compiladors ( CL )
| Crèdits: |
Departament: |
Tipus: |
Requisits: |
| 9.0 |
LSI |
Obligatòria per l'EI
Optativa per l'ETIG
Optativa per l'ETIS
|
|
ALCC
- Pre-requisit per l' ETIS
|
|
|
EC1
- Pre-requisit per l' EI , ETIG , ETIS
|
|
|
PRED
- Pre-requisit per l' EI , ETIG
|
|
|
PS
- Pre-requisit per l' ETIS
|
|
|
TC
- Pre-requisit per l' EI , ETIG
|
|
|
Professors
| Responsable: | Robert Nieuwenhuis (roberto lsi.upc.edu). |
| Altres: | Guillem Godoy Balil (ggodoy lsi.upc.edu). |
Objectius Generals
Cubrir los contenidos especificados en la troncalidad de
procesadores del lenguaje, y los siguientes objetivos especificos.
Objectius Específics
Coneixements
- Técnicas y herramientas generales, flexibles, y eficientes para la
compilación de lenguajes de programacion y para otras aplicaciones,
como los formateadores de texto (LaTeX, nroff), lenguajes gráficos
(postscript, CIF, GIF, JPEG), lenguajes de descripción de hardware
(VDHL, Verilog), lenguajes de simulación (simscript, GPSS),
intérpretes de queries y comandos, o los compiladores de silicio.
- Una aplicación en la que se utilizan y consolidan multitud
de conceptos aprendidos previamente: lenguajes formales y autómatas,
programación estructurada y recursiva, tipos abstractos de datos, etc.
Habilitats
- Ser capaz de desarrollar aplicaciones prácticas de las técnicas y
herramientas estudiadas (por ejemplo, transformaciones de datos, o
sencillos intérpretes).
- Ser capaz de completar algún módulo de un compilador modular
moderno, como aplicación en la que son imprescindibles la robustez
(ausencia de errores de ejecución) y la correción (del código objeto
producido).
Competències
- Ser mejores programadores a través de un mejor conocimiento de los
lenguajes de programación, en su sintaxis, semántica, e implementación
eficiente.
Continguts
Hores estimades de:
| T |
P |
L |
Alt |
L Ext. |
Est |
A Ext. |
| Teoria |
Problemes |
Laboratori |
Altres activitats |
Laboratori extern |
Estudi |
Altres hores fora d'horari fixat |
|
1. Introducción y motivación
|
| T |
P |
L |
Alt |
L Ext |
Est |
A Ext |
Total |
| 2,0 |
0 |
0 |
0 |
0 |
2,0 |
0 |
4,0 |
|
Estructura y fases de un compilador.
¿Por qué estudiar compiladores?
El porqué de la organización de la asignatura.
|
|
2. Análisis léxico
|
| T |
P |
L |
Alt |
L Ext |
Est |
A Ext |
Total |
| 6,0 |
0 |
2,0 |
0 |
2,0 |
6,0 |
0 |
16,0 |
|
Definición del problema. Repaso de lenguajes regulares y
autómatas finitos, varios algoritmos y sus costes. Tratamiento de
errores, la herramienta Flex, otras aplicaciones.
- Laboratori:
Manejo de la herramienta flex y otras aplicaciones similares.
- Activitats de laboratori addicionals:
Lectura, comprensión y análisis de la hoja de laboratorio correspondiente a la sesión de análisis léxico.
|
|
3. Análisis sintáctico
|
| T |
P |
L |
Alt |
L Ext |
Est |
A Ext |
Total |
| 14,0 |
0 |
4,0 |
0 |
4,0 |
14,0 |
0 |
36,0 |
|
Repaso de gramáticas de contexto libre y autómatas de pila.
Árboles de sintaxis concreta y abstracta, técnicas de parsing
descendente y ascendente, la herramienta Bison, otras aplicaciones.
- Laboratori:
Manejo de la herramienta Bison y otras aplicaciones.
- Activitats de laboratori addicionals:
Lectura, comprensión y análisis de las hojas de laboratorio correspondientes a la sesión de análisis sintáctico.
|
|
4. Análisis semántico
|
| T |
P |
L |
Alt |
L Ext |
Est |
A Ext |
Total |
| 6,0 |
0 |
12,0 |
0 |
12,0 |
6,0 |
0 |
36,0 |
|
Lenguajes con estructura de bloques, paso de parámetros,
comprobación de tipos, equivalencias de tipos, conversión explícita e
implícita de tipos. Otros paradigmas de programación.
- Laboratori:
Implementación de la primera parte de la práctica que corresponde a las fases de análisis léxico, sintáctico y semántico.
Evaluación de esta primera parte de la práctica
- Activitats de laboratori addicionals:
Lectura del documento que presenta la práctica de la asignatura en lo que corresponde a las fases de análisis léxico, sintáctico y semántico. Comprensión del mismo, y diseño interno de los módulos que compondrán esta primera parte de la práctica.
|
5. Representaciones intermedias y máquinas virtuales
|
| T |
P |
L |
Alt |
L Ext |
Est |
A Ext |
Total |
| 6,0 |
0 |
0 |
0 |
0 |
6,0 |
0 |
12,0 |
|
Representaciones internas e intermedias: en árbol, código de tres
direcciones, código para máquinas de pila. Máquinas virtuales:
ventajas e inconvenientes. La Q-machine. Acceso a nombres locales y
no-locales: cadenas estáticas, y displays.
|
6. Generación de código intermedio
|
| T |
P |
L |
Alt |
L Ext |
Est |
A Ext |
Total |
| 14,0 |
0 |
10,0 |
0 |
10,0 |
14,0 |
0 |
48,0 |
|
Código para instrucciones sencillas. Compilación de expresiones
booleanas, tipos estructurados, arrays estáticos y dinámicos,
procedimientos y funciones como parámetros.
- Laboratori:
Implementación de la segunda parte de la práctica, correspondiente a la fase de generación de código.
Evaluación de la práctica, donde sobre todo se evalúa esta segunda parte de la misma.
- Activitats de laboratori addicionals:
Lectura del documento que presenta la práctica de la asignatura en lo que corresponde a la fase de generación de código. Comprensión del mismo, y diseño interno de los módulos que compondrán esta segunda parte de la práctica.
|
7. Optimizaciones independientes de la arquitectura
|
| T |
P |
L |
Alt |
L Ext |
Est |
A Ext |
Total |
| 8,0 |
0 |
0 |
0 |
0 |
8,0 |
0 |
16,0 |
|
Bloques básicos, grafo de control de flujo, vida de variables,
uso y definiciones de variables, ejemplos de optimización
(subexpresiones comunes, código muerto, propagación de constantes,
invariantes y variables de inducción en bucles).
|
| - Total per tipus |
T |
P |
L |
Alt |
L Ext |
Est |
A Ext |
Total |
| 56,0 |
0 |
28,0 |
0 |
28,0 |
56,0 |
0 |
168,0 |
- Hores addicionals dedicades a l'avaluació:
|
3,0 |
- Total hores de treball per l'estudiant |
171,0 |
|
Metodologia docent
Se persiguen los objetivos expuestos estimulando el trabajo personal
del estudiante. Así, las clases de laboratorio están destinadas
a la realización de la práctica por parte del alumno, conjuntamente con
consultas y discusiones acerca de la misma. Para las primeras
prácticas con las herramientas Flex y Bison existen "hojas de
laboratorio" con las explicaciones y ejercicios a realizar. Para las
demás existe abundante material para la realización del compilador.
No se distingue entre clases de teoría y de problemas, debido a que
éstos últimos se concentran sólo en ciertos periodos del curso, y
sería demasiado rígido tener que dedicarles un número fijo de horas
semanales.
Existen diversas listas de problemas, y el estudiante sabe con
antelación cuándo en clase se van a resolver cúales de ellos. De esta
manera debería intentar resolverlos primero por su cuenta.
Además existe muy abundante material disponible en las páginas web de
la asignatura: transparencias, módulos y enunciados para las
prácticas, exámenes anteriores resueltos y sin resolver, listas de
preguntas frecuentes, etc.
El material ofrecido por la asignatura permite al estudiante realizar un
seguimiento de la asignatura, tanto del modo habitual, asistiendo a clase y
estudiando según el ritmo que marca la planificación propuesta, como de una
forma independiente por propia planificación del alumno, en base a sus otras
obligaciones o restricciones.
Mètode d'avaluació
Habrá un examen escrito de teoría (T), con ejercicios y preguntas
cortas de tipo teórico. La nota de la práctica (P) provendrá de dos
ejercicios prácticos, a realizar sobre el ordenador durante las
sesiones de laboratorio (típicamente, una extensión o variación del compilador
realizado por el propio estudiante). En caso de que, por motivos técnicos,
no se pudieran realizar estas pruebas por este medio, alternativamente, se
realizaría un examen escrito sobre la práctica.
La nota final Fin se determina en funcion de T y P de la siguiente
manera que fomenta un esfuerzo equilibrado en ambas partes:
Si P>=4 Entonces Fin:= (2T+P)/3
Si P<4 Entonces Fin:=((2T+P)/3) * (P/4)
Bibliografía bàsica
- R. Wilhelm, D. Maurer. Compiler Design: Theory, Constuction, Generation.
, Addison-Wesley, 1995.
- A.W. Appel Modern Compiler Implementation in C, Cambridge University Press, 1998.
- A.V. Aho and R. Sethi and J.D. Ullman Compilers, Principles, Techniques and Tools, Addison-Wesley, 1986.
- A.V. Aho and R. Sethi and J.D. Ullman Compiladores, Principios, Técnicas y Herramientas, Addison-Wesley Iberoamericana, 1990.
- V. Paxson Flex - fast lexical analyzer generator, ftp://ftp.ee.lbl.gov/flex-2.5.3.tar.gz, 1995.
- C. Donnelly and R. Stallman Bison - the YACC-compatible parser generator, Free Software Foundation, 1995.
- R.M. Stallman Using and porting GNU CC, Free Software Foundation, 1992.
Bibliografía complementària
- N. Wirth Compiler Construction, Addison-Wesley, 1996.
- S.S. Muchnick Advanced Compiler Design Implementation, Morgan Kaufmann Publishers, 1997.
- C.N. Fischer and R.J. LeBlanc Crafting a Compiler, Benjamin/Cummings, 1988.
- A.W. Appel Modern Compiler Implementation in ML, Cambridge University Press, 1998.
- A.W. Appel Modern Compiler Implementation in Java, Cambridge University Press, 1998.
- A.V. Aho and J.D. Ullman The theory of parsing, translation and compiling, Vols I and II, Prentice Hall, 1973.
Enllaços web
(Informació no introduïda)
Capacitats prèvies
Conocimientos de técnicas de programación estructurada y estructuras de
datos y algoritmos; lenguajes, autómatas y gramáticas formales;
estructura de computadores.
|