1. TITULACIÓN Ingeniero en Informática 2. NOMBRE DE LA

Anuncio
1. TITULACIÓN
Ingeniero en Informática
2. NOMBRE DE LA ASIGNATURA
Procesadores de lenguaje
3. CÓDIGO DE LA ASIGNATURA
78205
4. CARÁCTER
Troncal
5. CURSO
Tercero
6. PERIODO
Segundo Cuatrimestre
7. Nº DE CRÉDITOS
9 (6 Teoría, 3 Práctica)
8. DEPARTAMENTO
Ciencias de la Computación
9. ÁREA DE CONOCIMIENTO
Lenguajes y Sistemas Informáticos
10. PROFESORADO
Salvador Sánchez Alonso - despacho O246
http://www.cc.uah.es/ssalonso/
(salvador.sanchez@uah.es)
Daniel Rodríguez García - despacho O243
http://www.cc.uah.es/drg/
(daniel.rodriguezg@uah.es)
11. HORARIO
Teoría
Turno Mañana: Martes (08-10) y Viernes (10-12)
Turno Tarde: Martes (15-17) y Viernes (17-19)
Práctica
Mañanas: Miércoles (10-12) y Miércoles (12-14)
Tardes: Martes (17-19) y Miércoles (17-19) **este último grupo puede sufrir cambios**
12. LUGAR DE IMPARTICIÓN
Teoría
Todos los grupos: Edificio Norte A6
Práctica
Laboratorios Norte L3 y L6
13. OBJETIVOS DOCENTES DE LA ASIGNATURA
Conocer los fundamentos teóricos y prácticos, así como las técnicas y herramientas
básicas, para el diseño e implementación de un compilador de un lenguaje.
- Ser capaz de aplicar las ideas y técnicas propias del diseño de compiladores, en otros
campos de la informática.
- Aprender a construir los módulos de un compilador encargados de las fases de análisis
léxico, sintáctico, semántico, de generación de código intermedio, y de generación y
optimización de código.
- Aprender a utilizar herramientas de construcción automática de traductores
(JLex/CUP).
- Construir pequeños procesadores de lenguajes para distintas aplicaciones:
compiladores e intérpretes para lenguajes de programación, intérpretes de comandos,
lenguajes de consulta a bases de datos, procesadores de texto, formatos de intercambio
gráfico, etc.
14. CONTENIDO (PROGRAMA)
Parte Teórica
TEMA 1.- INTRODUCCIÓN A LOS COMPILADORES. Traductores. Estructura de
un compilador. Fase de análisis. Fase de síntesis. Agrupamiento de las fases.
TEMA 2.- ANÁLISIS LÉXICO. Descripción de un compilador léxico: Gestión de la
entrada. Formalismos de especificación léxica: Expresiones regulares, autómatas finitos.
Construcción de un analizador léxico. Manipulación de errores léxicos. Generadores
automáticos de analizadores léxicos.
TEMA 3.- ANÁLISIS SINTÁCTICO. Formalismos de especificación sintáctica:
Gramáticas independientes del contexto, autómatas a pila. Introducción general al
análisis sintáctico. Análisis sintáctico descendente: Condición LL(1), transformación de
gramáticas, analizador sintáctico descendente. Analizadores ascendentes LR: LR(0),
SLR(1), LALR(1). Generadores automáticos de analizadores sintácticos.
TEMA 4.- ANALIZADORES SEMÁNTICOS: GRAMÁTICAS DE ATRIBUTOS.
Especificación semántica: Formalismos de especificación semántica, gramática de
atributos. Evaluación de atributos. Gramáticas S-atribuidas. Gramáticas L-atribuidas.
Esquemas de traducción dirigidos por sintaxis. Construcción de un traductor
descendente recursivo.
TEMA 5.- ANÁLISIS SEMÁNTICO: COMPROBACIÓN DE TIPOS. Expresiones de
tipo y sistemas de tipos. Equivalencia de tipos. Sobrecarga, polimorfismo y
conversiones implícitas.
TEMA 6.- DISEÑO Y GESTIÓN DE LA TABLA DE SÍMBOLOS. La tabla de
símbolos TDS. Requerimientos de información de la TDS. Diseño de la TDS: Listas,
árboles, tablas hash. Gestión de la TDS en un lenguaje con estructura de bloques.
TEMA 7.- GESTIÓN DE LA MEMORIA EN TIEMPO DE EJECUCIÓN.
Organización de la memoria en tiempo de ejecución. El problema de la recogida de
basura. Registros de activación: Estructura, carga y descarga, acceso a los elementos.
TEMA 8.- GENERACIÓN DE CÓDIGO INTERMEDIO. Representaciones
intermedias. Declaraciones de variables y subprogramas. Instrucciones de asignación y
expresiones numéricas. Expresiones lógicas e instrucciones de control de flujo. Acceso
a los elementos de un array y de un registro. Llamadas a subprogramas.
TEMA 9.- OPTIMIZACIONES DE CÓDIGO INTERMEDIO. Bloques básicos: Grafos
dirigidos acíclicos, grafos de flujo. Optimizaciones locales: transformaciones que
preservan la estructura, transformaciones algebraicas. Optimizaciones globales:
detección de bucles, optimización de bucles.
TEMA 10.- GENERACIÓN Y OPTIMIZACIÓN DE CÓDIGO. Generación de código
objeto: algoritmos de generación de código, selección y ordenación de instrucciones,
asignación de registros. Optimización de código.
Parte Práctica
Se realizarán distintas prácticas en el laboratorio sobre los contenidos expuestos en la
parte de teoría, utilizando como herramientas las aplicaciones JLex y CUP.
15. BIBLIOGRAFÍA
Bibliografía Básica
AHO, A.V., LAM, M.S., SETHI, R. y ULLMAN, J.D. 2008. Compiladores: Principios,
técnicas y herramientas (segunda edición). Ed. Pearson/Addison–Wesley.
LOUDEN, K. C. 2004. Construcción de compiladores. Principios y práctica. Ed.
Thomson-Paraninfo.
16. CONOCIMIENTOS PREVIOS RECOMENDADOS
Es muy recomendable haber cursado previamente la asignatura de segundo curso
Autómatas, lenguajes formales y gramáticas I.
Es necesario conocer el lenguaje Java para realizar las prácticas.
El alumno debe además tener conocimientos de programación y de estructuras de datos.
17. METODOLOGÍA DE IMPARTICIÓN
Parte Teórica
Se impartirán clases magistrales utilizando pizarra y medios audiovisuales (proyector y
transparencias). Las transparencias utilizadas estarán a disposición de los alumnos.
Parte Práctica
Se realizarán 3 bloques de prácticas que se corregirán en clase y se entregarán en el
tiempo marcado en cada una:
- Análisis léxico con JLex
- Introducción al análisis sintáctico (interconexión JLex – CUP)
- Análisis sintáctico y semántico con CUP
18. MÉTODOS Y CRITERIOS DE EVALUACIÓN
La calificación final de la asignatura se obtiene a partir de:
•
•
Un examen de teoría, que contendrá fundamentalmente preguntas sobre la parte
teórica pero que también incluirá preguntas de la parte práctica.
La realización de las prácticas de laboratorio.
La nota final se obtendrá del promedio de la nota de teoría con la del laboratorio
ponderándola de la siguiente manera: 30% laboratorio y 70% teoría, siendo necesario
obtener un mínimo de 4 en cada una de las partes para poder superar la asignatura.
El 30% de la nota de la asignatura correspondiente al laboratorio se calcula evaluando la
entrega de las prácticas y su defensa ante los profesores de prácticas.
Ni la nota de laboratorio ni la de teoría se guardan para cursos subsiguientes. El alumno
que apruebe en el examen de junio la parte de laboratorio sin haber entregado las
prácticas, sólo tendría que entregar y defender las prácticas en septiembre. Estas
prácticas consistirán realizar un conjunto de las realizadas durante el curso más una
nueva especial para dicha convocatoria. Si se ha suspendido la teoría y aprobado el
laboratorio, sólo tendrá que presentarse al examen.
En junio aquellos alumnos que figuren con la teoría aprobada sin tener el laboratorio
aprobado aparecerán en las actas de junio como no presentados pero en septiembre
aparecerán ya como suspensos si no han recuperado el laboratorio. Si se suspende la
teoría en junio aparecerán como suspensos.
Descargar