Descripción
El objetivo principal de la asignatura es la enseñanza del proceso de la compilación de lenguajes de programación de alto nivel. Se estudia principalmente las fases de análisis lexicográfico y sintáctico de un compilador y sus correspondientes técnicas de implementación. Para el estudio de cada fase se estudian las características correspondientes de diferentes lenguajes de programación imperativos. En la práctica se implementan las fases de análisis lexicográfico y sintáctico de un compilador de una sola pasada para un lenguaje imperativo. Se utiliza la técnica de traducción dirigida por sintaxis estudiada en la teoría.
Tipo asignatura
Optativa
Semestre
Primero
Créditos
5.00
Conocimientos previos

Estructuras de datos, programación imperativa y programación orientada a objetos.

Objetivos

Los formalismos de la teoría de la compilación pueden ser aplicados a otros campos y áreas de la informática. El estudio del proceso de la compilación requiere un conocimiento profundo de los elementos que constituyen un lenguaje de programación. Por lo tanto, esta asignatura ayuda al estudiante a reforzar sus conocimientos y a adquirir nuevos criterios para la programación, diseño, implementación y evaluación de lenguajes de programación.

Los alumnos que cursan la asignatura adquieren los conocimientos y desarrollan las habilidades que se indican a continuación:

1. Conocimientos generales básicos de la teoría de la compilación y conocimientos específicos en análisis lexicográfico, análisis sintáctico y la técnica de traducción dirigida por sintaxis.
2. Capacidad de análisis y síntesis
3. Capacidad de organización y planificación del trabajo a realizar entre los diferentes miembros del grupo de prácticas así como del trabajo individual de cada alumno.
4. Mejora de la comunicación escrita en la lengua utilizada por los alumnos en los diferentes exámenes presentados y en la realización de los informes de las diferentes fases de la práctica.
5. Conocimientos de herramientas informáticas.
6. Capacidad de resolución de problemas.
7. Habilidad de trabajar en equipo.
8. Habilidad de trabajar en equipo utilizando medios telemáticos.
9. Desarrollo de habilidades interpersonales a la hora de defender argumentos propios delante de los compañeros de grupo.
10. Capacidad de aplicación de los conocimientos adquiridos de la teoría de la compilación en la realización de la práctica.
11. Capacidad para generar nuevas ideas a partir de los conceptos teóricos estudiados en clase.
12. Habilidad de trabajo en entornos telemáticos.
13. Utilización de textos en inglés en la bibliografía básica.
14. Capacidad de autoaprendizaje.
15. Toma de decisiones para continuar avanzando en el desarrollo de la práctica.
16. Diseño y gestión de proyectos.

Contenidos

1 Lenguajes de programación
1.1 Historia
1.2 Clasificación
1.3 Programación. Diseño. Implementación
1.4 Definición formal de lenguajes imperativos

2 El proceso de la compilación
2.1 Compiladores
2.2 Partes de un compilador
2.3 Tipos de compiladores
2.4 Herramientas para la construcción de compiladores

3 Análisis lexicográfico
3.1 Lenguajes de programación y sus aspectos regulares
3.2 Esquema y funcionalidades
3.3 Tokens i lexemas
3.4 Implementación de un analizador lexicográfico
3.5 Errores y recuperación
3.6 Aplicaciones

4 Análisis sintáctico
4.1 Sintaxis
4.2 Tipos de parsers
4.3 Análisis descendente (LL)
4.4 Análisis ascendente (LR)
4.5 Herramientas para la construcción de analizadores sintácticos

5 Traducción dirigida por sintaxis
5.1 Gramáticas de atributos
5.2 Esquemas de traducción

Metodología

Esta asignatura puede cursarse en dos formatos, según la preferencia del alumno, presencial y semipresencial. La principal diferencia entre las dos modalidades se basa en la diferente asistencia física de los alumnos a las aulas.

A lo largo del curso se combinan diferentes maneras de impartir la asignatura:

1. Clases magistrales.

En la modalidad presencial, el profesor imparte a lo largo del curso los conceptos teóricos de la asignatura mediante clases magistrales. En estas clases el profesor también resuelve ejercicios de aplicación directa de los conceptos explicados. En la modalidad semipresencial, el alumno asume un papel más activo en su aprendizaje. Dispone de los contenidos del curso en el campus virtual donde hay una guía de estudio que: explica los conceptos de la asignatura, da referencias a la bibliografía para poder ampliar estos conceptos, contiene enunciados de problemas y contiene preguntas autoevaluativas donde el alumno puede tener una indicación de su grado de aprendizaje. En este formato, se realizan al menos dos encuentros presenciales en al año donde los alumnos y los profesores se reúnen para realizar clases magistrales, problemas, prácticas o debates.

2. Horas de clase dedicadas a resolver ejercicios teóricos, individualmente o en grupos.

Durante algunas horas de clase el profesor plantea ejercicios teóricos para que sean resueltos por los alumnos en aquel momento. Estos ejercicios puede ser resueltos individualmente o en grupo.

3. Ejercicios a resolver en casa.

A parte de los ejercicios resueltos en clase, el alumno ha de resolver otros en casa. La finalidad de estos ejercicios es afianzar las ideas teóricas. Los alumnos disponen de un problemario con ejercicios. Algunos de los ejercicios están resueltos.

Para el estudio de los analizadores sintácticos ascendentes, los alumnos disponen de una herramienta informática (TABULAE) en entorno web que resuelve ejercicios.

4. Prácticas

A lo largo del curso los alumnos implementan parcialmente (analizador lexicográfico y analizador sintáctico) un lenguaje de programación (Babel) definido por el profesor de la asignatura con fines académicos. Las clases teóricas se imparten en el orden necesario para poder realizar las diferentes fases de la práctica dentro de las fechas establecidas.

La práctica se realiza en grupos de 2. La entrega se realiza por fases. Cada fase se corrige y se le informa al estudiante de los resultados haciéndoles sugerencias para mejorarla.

A continuación se dan las fases en las que está dividida la práctica y el objetivo principal de cada una de ellas:

Fase 1. Análisis Lexicográfico del lenguaje BABEL
Un primer contacto con la herramienta JAVACC para desarrollar un analizador lexicográfico

Fase 2. Análisis Sintáctico del lenguaje BABEL
Utilización de la herramienta JAVACC per la construcción automática de un analizador sintáctico
Recuperación de errores sintácticos mediante la técnica de conjuntos de sincronización

Evaluación

La asignatura se divide en dos partes claramente diferenciadas: una parte teórica (50%) y una parte práctica (50%). Cada una de estas partes se evalúan por separado y han de aprobarse por separado para poder aprobar la asignatura.

Si se aprueban las dos partes, la nota final de la asignatura es la suma aritmética de la nota de teoría y de la nota de práctica.

Con la finalidad de evaluar si el alumno a alcanzado en un grado adecuado los objetivos de la asignatura se hacen servir diferentes pruebas:

A. Exámenes
Durante el curso se hacen exámenes presenciales.

F. Informes correspondientes a las prácticas realizadas en grupo.
Para evaluar cada informe de cada una de las fases de la práctica el profesor hace servir un formulario donde tiene marcados y cuantificados los diferentes aspectos que se han de valorar.

G. Trabajos prácticos con ordenador
La implementación de la práctica se hace en lenguaje Java. Para cada fase el profesor dispone de un formulario para su evaluación exhaustiva.

J. Participación en clase o en el campus virtual.
El profesor de la modalidad presencial dispone de una lista de observaciones posibles donde anota los diferentes comportamientos y actitudes presentadas por los alumnos durante la clase. En el sistema semipresencial, estas actitudes de reflejan en la actuación y participación de los alumnos en los forums y en las reuniones a través del aula virtual.

Criterios evaluación

Objetivo 1: Conocimientos generales básicos de la teoría de la compilación.
El estudiante ha de demostrar que ha adquirido un conocimiento adecuado de los conceptos estudiados durante el curso. [A, F].

Objetivo 2: Capacidad de análisis y síntesis.
El estudiante ha de ser capaz de analizar los problemas con los cuales se enfrenta y ha de demostrar capacidad de síntesis en la generación de soluciones. [A, G, J].

Objetivo 3: Capacidad de organización y planificación del trabajo a realizar entre los diferentes miembros del grupo de prácticas así como del trabajo individual de cada alumno.
El estudiante ha de planificar y organizar su trabajo individual así como el trabajo a realizar en grupo. [G]

Objetivo 4: Mejora de la comunicación escrita en la lengua utilizada por los alumnos en los diferentes exámenes presentados y en la realización de los informes de las diferentes fases de la práctica.
El estudiante ha de presentar los exámenes e informes sin faltas de ortografía y con el estilo y el orden adecuado según las especificaciones dadas. [A,F]

Objetivo 5: Conocimientos de herramientas informáticas.
El estudiante ha de demostrar que ha adquirido los conocimientos necesarios de Java y de JavaCC para la implementación de la práctica. [F,G]

Objetivo 6: Capacidad de resolución de problemas.
El estudiante ha de demostrar que sabe proponer soluciones adecuadas tanto para los ejercicios teóricos como para la implementación de las diferentes fases de la práctica. [A, F,G]

Objetivo 7: Habilidad de trabajar en equipo.
El estudiante ha de ser capaz de trabajar con los compañeros de grupo y llegar a proponer soluciones a los diferentes problemas presentados. [F,G]

Objetivo 8: Habilidad de trabajar en equipo utilizando medios telemáticos.
Especialmente los alumnos semipresenciales, y en menor grado, los presenciales, han de ser capaces de formar un grupo de trabajo en un entorno virtual utilizando los forums, gestionando documentos de diferentes versiones y dominar las herramientas de comunicación síncrona remota.[G,J]

Objetivo 9: Desarrollo de habilidades interpersonales a la hora de defender argumentos propios delante de los compañeros de grupo.
El estudiante ha de mantener una comunicación fluida con sus compañeros de grupo de práctica.[F,G]

Objetivo 10: Capacidad de aplicación de los conocimientos adquiridos de la teoría de la compilación en la realización de la práctica.
El estudiante ha de identificar los formalismos y las técnicas adecuadas de la teoría para implementar las diferentes fases de la práctica con la orientación del profesor y la ayuda de sus compañeros de grupo [F,G]

Objetivo 11: Capacidad para generar nuevas ideas a partir de los conceptos teóricos estudiados en clase.
El estudiante ha de demostrar que es capaz de aplicar en contextos diferentes las técnicas de la construcción de compiladores que ha aprendido en la teoría . Particularmente en la realización de la práctica. [A, F,G]

Objetivo 12: Habilidad de trabajo en entornos telemáticos.
Todos los alumnos semipresenciales basan su estudio en diferentes herramientas dentro de un campus virtual. Estas competencias quedan implícitamente evaluadas. [A, G]

Objetivo 13: Utilización de textos en inglés en la bibliografía básica.
Algunos de los conceptos de la asignatura se encuentran referenciados directamente en inglés. Estos conceptos también son evaluados. [A,G]

Objetivo 14: Capacidad de autoaprendizaje.
El estudiante ha de demostrar que es capaz de adquirir conocimientos por él mismo.[A]

Objetivo 15: Toma de decisiones para continuar avanzando en el desarrollo de la práctica.
El estudiante ha de demostrar que es capaz de decidir cuando ha alcanzado los objetivos básicos de cada una de las fases de la práctica. [F,G]

Objetivo 16: Diseño y gestión de proyectos.
El estudiante ha de demostrar que es capaz de hacer un diseño modular de la práctica y gestionarla adecuadamente para poder terminarla con garantías y dentro del plazo pedido. [F,G]

Bibliografía básica

- Aho, Afred V.; Sethi, Ravi; Ullman, Jefrey D. Compilers. Principles, Techniques and Tools. Addison-Wesley Publishing Company, 1985

- Elder, John. Compiler Construction. A Recursive Descent Model. Prentice Hall, 1994

- Mozota i Coloma, Maria Antònia. Problemes i Solucions. Departament d´informàtica. Escola d´enginyeria i arquitectura La Salle. Barcelona, 2007

- Mozota i Coloma, Maria Antònia. BABEL 2007: Part I. Especificació de la pràctica. Departament d´informàtica. Escola d´enginyeria i arquitectura La Salle. Barcelona, 2007

Material complementario

- Pratt, Terrence W.; Zelkowitz, Marvin V.. Lenguajes de Programación. Diseño e Implementación. Prentice Hall, 1998

- Brown, Doug ; Levine, John R.; Mason, Tony .Lex & Yacc. O´REILLY, 1992

- Kinnersley, Bill. The Language List. Computer Science Department. University of Kansas, 1995

- History of Programming Languages. O´Reilly,2004

- Lex i Yacc. Una introducció. Departament d´informàtica. Escola d´enginyeria i arquitectura La Salle. Barcelona, 1997

- Pccts. Una introducció. Departament d´informàtica. Escola d´enginyeria i arquitectura La Salle Barcelona, 1998

- Java. Una introducció. Departament d´informàtica. Escola d´enginyeria i arquitectura La Salle. Barcelona, 1999

- Mozota i Coloma, Maria Antònia. Un exemple d´analitzador lexicogràfic. Departament d´informàtica. Escola d´enginyeria i arquitectura La Salle. Barcelona, 2007