Curso 2014-15
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: | 2º |
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 |
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.
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.
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 transversales | Competencias 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 asignatura | Indicadores de logro | Procedimiento de evaluación | Temporalizació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 |
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 |
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ón | Recuperable? | |
---|---|---|
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 |
Seminarios |
Evaluación mediante resolución de ejercicios de seminario |
No |
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
Conceptos | Procedimientos | Actitudes |
---|---|---|
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
Conceptos | Procedimientos | Actitudes |
---|---|---|
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
Conceptos | Procedimientos | Actitudes |
---|---|---|
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 |
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