Curso 2013-14

Procesadores de Lenguaje

Titulación: Código: Tipo:
Grado en Ingeniería Informática 21428 Obligatoria 3º curso
Grado en Ingeniería Telemática 22609 Optativa
Grado en Ingeniería en Sistemas Audiovisuales 21654 Optativa

 

Créditos ECTS: 4 Dedicación: 100 horas Trimestre:

 

Departamento: Dpto. de Tecnologías de la Información y las Comunicaciones
Coordinador: Rafael Ramírez
Profesorado:

Rafael Ramirez, Zacharias Vamvakousis

Idioma:

Anglès

Horario:
Campus: Campus de la Comunicación - Poblenou

 

Presentación de la assignatura

La asignatura Procesadores de Lenguajes es una asignatura obligatoria que se ofrece durante el curso de ingeniería en informática. La asignatura está integrada en un bloque de asignaturas, conjuntamente con lenguajes formales, en la que se estudia la sintaxis, semántica y compilación de programas y los principales conceptos de los lenguajes de programación. La asignatura tiene un componente teórico y otro práctico. Dentro del componente teórico el énfasis está en la comprensión de los conceptos a nivel intuitivo más que en la utilización estricta de lenguaje matemático.

La asignatura está compuesta de tres activitades principales: clases de teoría, seminarios y laboratorios. En las clases de teoría se introducen los conceptos formales y matemáticos y se muestran ejemplos de su aplicación. En los seminarios los alumnos resuelven pequeños problemas. Cada problema corresponde a uno de los conceptos introducidos en clase de teoría. En los laboratorios se presenten problemas de mayor complejidad y de carácter más computacional para que los alumnos tengan la oportunidad de poner en práctica los conceptos aprendidos.

Objetivos de aprendizaje

El objetivo de la asignatura es solidificar, profundizar, extender y poner en práctica las competencias obtenidas en lenguajes formales. Más concretamente, se pretende conseguir que los alumnos desarrollen la capacidad de especificar la sintaxis y semántica de lenguajes de programación simples, verificar formalmente programas, e implementar compiladores para lenguajes de programación sencillos. Asimismo, los estudiantes deberían desarrollar competencias para entender los modelos de ejecución de diferentes paradigmas de programación e identificar el mejor modelo en diferentes problemáticas.

 

Prerequisitos

Los conocimientos previos para el seguimiento de la asignatura son nociones de matemáticas básicas adquiridas en la enseñanza secundaria obligatoria y durante los primeros dos cursos de los estudios. En particular, los conocimientos previos requeridos para la asignatura son:

- Nociones algebraicas básicas: funciones (inyectivas, biyectivas), conjuntos y operaciones elementales sobre conjuntos, relaciones de equivalencia.
- Nociones básicas de lógica matemática: relaciones, predicados, conectivos lógicos.
- Aritmética básica.
- Capacidad básica para comprender y escribir expresiones matemáticas a nivel elemental.

Esta asignatura es asume la asimilación de los conceptos aprendidos en lenguajes formales, así como en Lógica Computacional.

 

Competencias

El objectivo fundamental de la asignatura es que los alumnos adquieran los aspectos fundamentales relacionados con los lenguages ​​de programación: sintaxis, semántica y compilación de programas, así como nociones de los diferentes paradigmas de programación.

Competencias transversalesCompetencias específicas
Instrumentales

1. Capacidad de razonar a nivel abstracto

2. habilidades cognitivas

3. sentido común

Interpersonales

4. Competencia de comunicación

Sistémicas

5. Capacidad de identificar la mejor
metodología para resolver un
problema.

6. Capacidad de solucionar
problemas combinando de manera
nueva y no trivial elementos ya conocidos

7. Capacidad de generar ideas
1. Capacidad de entender a nivel intuitivo y
formal los diferentes aspectos en lenguajes de programación: sintaxis,
semántica y compilación de programas.

2. Capacidad de aplicar los conocimientos de sintaxis, semántica y compilación de programas en contextos prácticos.

3. Capacidad de entender las diferentes fases de compilación y de los modelos de ejecución
de diferentes paradigmas de programación

Concreción por competencias

Competencias a alcanzar en la asignaturaIndicadores de logroProcedimiento de evaluaciónTemporalización
Competencias generales

1. Capacidad de razonar a nivel abstracto

2. habilidades cognitivas

3. sentido común

4. Competencia de comunicación

5. Capacidad de identificar la mejor
metodología para resolver un
problema.

6. Capacidad de solucionar problemas combinando de manera nueva y no trivial elementos ya conocidos

7. Capacidad de generar ideas
1. Capacidad de solucionar problemas abstractos

2. Capacidad de proponer soluciones a problemas

3. Capacidad de proponer soluciones a problemas

4. Soluciones coherentes y bien escritos a las prácticas y seminarios

5. Soluciones coherentes a las
prácticas y seminarios

6. Soluciones coherentes a las prácticas y seminarios

7. Soluciones ingeniosas a problemas presentados
1. Evaluación de prácticas, seminarios y del examen final

2. Evaluación de prácticas, seminarios y del examen final

3. Evaluación de prácticas, seminarios y del examen final

4. Evaluación de prácticas y seminarios

5. Evaluación de prácticas y seminarios

6. Evaluación de prácticas,
seminarios y del examen final

7. Evaluación de prácticas, seminarios y del examen final

1. Todo el trimestre
2. Todo el trimestre
3. Todo el trimestre
4. Todo el trimestre
5. Todo el trimestre
6. Todo el trimestre
7. Todo el trimestre

 

Competencias específicas

1. Capacidad de entender a nivel intuitivo y formal los diferentes aspectos en lenguajes de programación: sintaxis, semántica y compilación de programas.

2. Capacidad de aplicar los conocimientos de sintaxis, semántica y compilación de programas en contextos prácticos.

3. Capacidad de entender los diferentes modelos / paradigmas de computación y de identificar el mejor modelo en diferentes problemáticas.

 

1. Capacidad de entender expresiones matemáticas elacionades con la sintaxis y semántica de programas y entender los diferentes pasos de compilación de programas.

2. Capacidad de especificar la sintaxis y semántica, así como implementar un compilador para lenguajes de programación sencillos

3. Capacidad de entender y elaborar programas en diferentes paradigmas de programación y su uso en diferentes contextos.
1. Evaluación de seminarios y del examen final

2. Evaluación de prácticas, seminarios y del examen final

3. Evaluación de prácticas, seminarios y del examen final

1. Todo el trimestre
2. Todo el trimestre
3. Todo el trimestre

 

Evaluación

En la evaluación continua se tiene en cuenta cada una de las tres actividades que constituyen la asignatura: clases de teoría, laboratorios y seminarios:

 EvaluaciónRecuperable?
Teoria

Evaluación mediante un examen final

Si

Laboratorios

Evaluación con las prácticas de programación (LP) y examen final de prácticas (LE)

LP: No
LE: Si 

Seminarios

Evaluación mediante resolución de ejercicios de seminario

No 


T: la evaluación de la teoría mediante un examen final (recuperable en julio)
L: la evaluación de los laboratorios con las prácticas de programación (no recuperable) y examen final de prácticas (recuperable en julio).
S: la evaluación de los seminarios (no recuperable)

En la evaluación, es necesario aprobar cada una de las tres actividades por separado y la nota final se obtiene haciendo la media ponderada de la siguiente forma:

Nota Final = 0,6 * T + 0,3 * L + 0,1 * S

El examen de teoría se realizará sobre los contenidos desarrollados en clase de teoría y los seminarios. Es un examen escrito e individual que evalúa todas las competencias desarrolladas a lo largo de la asignatura. Esta evaluación es obligatoria y debe ser calificada con al menos un 50% para aprobar la asignatura.

En los laboratorios se realizan una serie de prácticas que ponen a prueba la capacidad de los alumnos de aplicar la teoría en forma de programas en un ordenador.
Las prácticas se realizan en pareja, de manera que los alumnos tengan que cooperar y saber comunicarse para resolver los problemas. La evaluación de las prácticas también es obligatoria se calificada en 2 partes: una evaluación continuada a lo largo del trimestre en forma de entrega de programas de ordenador (LP), y la otra como una parte del examen final de la asignatura dedicada a temas de prácticas (LE). Cada una de las partes deben ser qualificadas como mínimo con un 50% para aprobar la asignatura. La nota L correspondent a la nota de prácticas se obtiene haciendo la media ponderada de la siguiente forma:

L = 0,6 * LP + 0,4 * LE

Los detalles de los plazos de entrega de las prácticas a lo largo del trimestre y de las penalizaciones por retraso en su entrega será publicada el campus global de la asignatura.

Antes de cada seminario se presentarán problemas a los alumnos para que ellos los resuelvan en equipos de tres o cuatro antes de la sesión, como una preparación previa al seminario. Estos problemas corresponden a conceptos o conocimientos tratados en clase de teoría. Los alumnos tendrán tiempo para finalizar sus respuestas a los problemas al comienzo del seminario, después de lo cual pasarán aleatoriamente a presentar sus soluciones en la pizarra. En la evaluación se tendrá en cuenta la preparación del seminario, la presentación de la solución propuesta, y el aprovechamiento del seminario. La evaluación del trabajo de los seminarios es obligatoria.

En caso de no aprobar la asignatura en la evaluación expuesta en los puntos anteriores, el alumno tiene derecho a una convocatoria en el mes de julio. En la convocatoria de julio solamente será posible recuperar la parte del examen de teoría y la parte del examen final de prácticas. Es decir, la parte de prácticas de programación y la parte de seminarios no son recuperables en la convocatoria de julio. La nota de esta convocatoria se obtendrá de la misma manera que la nota de la convocatoria ordinaria explicada anteriormente.

 

 

Contenidos

Bloques de contenido

- Bloque de contenido 1. Sintaxis, semántica y verificacion formal de programas
- Bloque de contenido 2. Compilación de programas
- Bloque de contenido 3. Paradigmas de programación

Organización y concreción de los contenidos

- Bloque de contenido 1. Sintaxis, semántica y verificación formal de programas

ConceptosProcedimientosActitudes
1. Gramáticas BNF, derivaciones, árboles sintácticos, parsing

2. Semántica denotacional y semántica axiomática

3. Tripletas de Hoare, invariantes y métodos de verificación formal de programas, model checking
1. Poder especificar formalmente la sintaxis e implementar parsers para lenguajes de programación

2. Poder especificar la semántica de lenguajes de programación.

3. Poder diseñar especificar propiedades y verificar formalmente un programa
1. Apreciar los diferentes tipos de formalismos útiles en el área de los lenguajes de programación

2. Disponibilidad intentar entender conceptos que inicialmente parecen complejos.

Bloque de contenido 2. Compilación de programas

ConceptosProcedimientosActitudes
1. Compiladores e intérpretes de lenguajes de programación

2. Estructura de un compilador: análisis léxico, análisis sintáctico, análisis semántico, código intermedio, optimización de código, generación de código.
1. Describir el proceso de ejecución tanto en lenguajes compilados como en lenguajes interpretados.

2. Implementar las diferentes etapas de compilación para un lenguaje imperativo.
1. Disponibilidad intentar entender conceptos que inicialmente parecen complejos.

2. Predisposición a adquirir conocimiento sólido de base

Bloque de contenido 3. Paradigmas de programación

ConceptosProcedimientosActitudes
1. programación lógica

2. programación funcional

3. programación concurrente
1. Escribir programas lógicos que resuelven problemas concretos

2. Escribir programas funcionales que resuelven problemas concretos

3. Diferenciar entre los diferentes mecanismos de sincronización y comunicación disponibles en programación concurrente, y escribir programas usando estos mecanismos para resolver problema concretos.
1. Disponibilidad intentar entender conceptos que inicialmente parecen complejos.

2. Predisposición a adquirir conocimiento sólido de base

3. Disponibilidad de dedicar el tiempo necesario a cada concepto

 

Metodología

Clases de Teoría

En estas clases se abordan los conceptos teóricos de los bloques de contenido de la asignatura. Las clases de teoría consisten en 9 sesiones de dos horas de duración. El profesor llevará a cabo las explicaciones de los contenidos teóricos de la asignatura para ello se dispondrá de ordenador, proyector y pizarra como material soporte. Se emplearán transparencias que servirán como apuntes de clase para los alumnos. Los conceptos analizados en este tipo de sesiones serán utilizados en las dos actividades de aprendizaje restantes de la asignatura; Sesiones de Seminarios I Sesiones de Prácticas. El estudiante deberá complementar esta actividad con un lectura detenida de sus propios apuntes y el material adicional que el profesor haya proporcionado. Por ejemplo, un sesión de teoría de 2 horas, convenientemente aprovechadas, requerirá un trabajo adicional fuera del aula de 1 hora por parte del estudiante.

Sesiones de Prácticas

En estas sesiones se desarrollan los puntos prácticos del bloque de contenido de la asignatura. Estas sesiones se realizan en el laboratorio y tienen una duración de dos horas. El profesor de prácticas entregará un enunciado en la que se explica el desarrollo de la práctica y dará las directrices necesarias para que los alumnos realicen las comprobaciones y el desarrollo que se les solicite en los enunciados de la práctica. El alumno entregará una memoria de la práctica al final de la sesión, sobre la que el profesor evaluará que se han desarrollado adecuadamente los conceptos prácticos que se han planteado en el enunciado de la práctica. Esta actividad se realiza por parejas y se presupone que continúa fuera del aula. Las sesiones de práctica estarán orientadas a cubrir los puntos prácticos de los contenidos abordados en la clase de teoría.

Sesiones de Seminarios

Estas sesiones están dedicadas a describir puntos de particular relevancia de los bloques de contenido de la asignatura. Las sesiones de seminarios consisten en sesiones de dos horas de duración. En estas sesiones, el profesor dirigirá y planteará problemas específicos que ayudarán a reforzar los conocimientos adquiridos en las sesiones de teoría y en las prácticas de la asignatura. Los alumnos deben entregar las soluciones al comienzo del seminario, y además se pedirá a los alumnos que presenten sus soluciones en la pizarra. Para esta actividad, el profesor dispondrá de ordenador, proyector y pizarra como material soporte. Se podrán emplear transparencias y en general, cualquier tipo de material que ayude a reforzar los conceptos adquiridos en las sesiones de teoría de la asignatura. Las actividades serán llevadas a cabo en grupos de 3-4 estudiantes.
 
 

 

Recursos

Bibliografía básica (soporte papel y electrónico)

Compiladores: principios, técnicas y herramientas
Aldred V. Aho, Ravi Sethi, Jefrey D. Ullman
Edición: Mexico [etc.]: Addison Wesley Longman, 1998.
ISBN: 968-444-333-1

Programming Languages ​​Design and Implementation
Terrence Pratt and Marvin Zelkowitz
Prentice Hall (2001)

Concepts of Programming Languages
Robert Sebesta
Addison Wesley (2002)

Modern compiler implementation in ML
Andrew W. Appel
Cambridge University Press (1997)

Recursos didácticos. Material docente de la asignatura

Web de la asignatura
apuntes
Colección de ejercicios
Enunciados de las prácticas

Recursos didácticos. Materiales y herramientas de soporte

Brief Java Threads Tutorial