Créditos
6
Tipos
- GRAU: Obligatoria de especialidad (Computación)
- GCED: Optativa
Requisitos
- Correquisito: PROP
Departamento
CS
Profesorado
Responsable
- Gerard Escudero Bakx ( gerard.escudero@upc.edu )
Otros
- Edelmira Pasarella Sanchez ( edelmira@cs.upc.edu )
- Jordi Delgado Pin ( jdelgado@cs.upc.edu )
- Jordi Petit Silvestre ( jpetit@cs.upc.edu )
Horas semanales
Teoría
2
Problemas
0
Laboratorio
2
Aprendizaje dirigido
0
Aprendizaje autónomo
6
Competencias
Comunicación eficaz oral y escrita
- G4.3 - Comunicarse de manera clara y eficiente en presentaciones orales y escritas sobre temas complejos, adaptándose a la situación, al tipo de público y a los objetivos de la comunicación utilizando las estrategias y los medios adecuados. Analizar, valorar y responder adecuadamente a las preguntas del auditorio.
Uso solvente de los recursos de información
- G6.3 - Planificar y utilizar la información necesaria para un trabajo académico (por ejemplo, para el trabajo de final de grado) a partir de una reflexión crítica sobre los recursos de información utilizados. Gestionar la información de manera competente, independiente y autónoma. Evaluar la información encontrada e identificar las lagunas presentes.
Especialidad de computación
- CCO1.2 - Demostrar conocimiento de los fundamentos teóricos de los lenguajes de programación y las técnicas de procesamiento léxico, sintáctico y semántico asociadas, y saber aplicarlas para la creación, el diseño y el procesamiento de lenguajes.
Objetivos
-
Conocer los diferentes pasos de la compilación, en particular el análisis léxico, el sintáctico y el semántico.
Competencias relacionadas: CCO1.2, -
Learn tools for generating lexical analyzers and parsers.
Competencias relacionadas: CCO1.2, -
Conocer las diferencias entre un compilador y un intérprete.
Competencias relacionadas: CCO1.2, -
Diferenciar las características de un lenguaje de programación. Identificar sus puntos fuertes y sus puntos débiles y ser capaz de justificar una elección.
Competencias relacionadas: G4.3, CCO1.2, -
Conocer las características principales de los lenguajes de programación funcionales.
Competencias relacionadas: CCO1.2, -
Conocer construcciones avanzadas de los lenguajes de programación.
Competencias relacionadas: CCO1.2, -
Ser capaz de modelar y especificar problemas de hardware o software usando lenguajes funcionales.
Competencias relacionadas: G4.3, G6.3, CCO1.2, -
Conocer las características principales de los lenguajes de scripting.
Competencias relacionadas: CCO1.2, -
Ser capaz de aprender nuevos lenguajes de programación de forma autónoma.
Competencias relacionadas: CCO1.2, G6.3,
Contenidos
-
Introducción a los lenguajes de programación.
Turing completitud. Paradigmas de la programación. Características principales. -
Introducción a la compilación.
Compilación e interpretación. El análisis léxico. El análisis sintáctico. Gramáticas. Tabla de símbolos. Árbol de sintaxis abstracta. Análisis semántico. Generación de código. -
Lenguajes funcionales.
Fundamentos. Pattern Matching. Evaluación Eager/Lazy. Introducción a Haskell. -
Sistemas de tipos.
Los tipos en los lenguajes de programación. Los tipos y la fiabilidad. Sistemas de tipos en los lenguajes funcionales y en los lenguajes orientados a objetos. -
Programación de orden superior
Las funciones de orden superior. Aplicaciones. Programación de funciones de orden superior en lenguajes funcionales y orientados a objetos. -
Especificación y modelado usando lenguajes funcionales
Lenguajes declarativos en la especificación y el modelado. Prototipado. Especificaciones ejecutables. Transformación de programas. -
Llenguajes de scripting
Características. Utilización de lenguajes de scripting. Combinación de paradigmas. Tipos. Orden superior. Breve introducción a Python.
Actividades
Actividad Acto evaluativo
Introducción a la compilación
Presentació dels continguts a les classes de teoria. Realització de pràctiques de laboratori utilitzant analitzadors lèxics i sintàctics i realitzant un petit treball pràctic.Objetivos: 1 2 3
Contenidos:
Teoría
2h
Problemas
0h
Laboratorio
8h
Aprendizaje dirigido
0h
Aprendizaje autónomo
8h
Programación de ordren superior
Presentació de continguts a les sessions de teoria i aplicació al llenguatge Haskell a les sessions de laboratori.. També es veurà quines formes de programació d'ordre superior admeten a d'altres llenguatges coneguts com ara Java.Objetivos: 4 5 6 9
Contenidos:
Teoría
2h
Problemas
0h
Laboratorio
2h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h
Especificación y modelado usando llenguajes funcionales
Presentació de continguts a les sessions de teoria i realització d'algun cas pràctic, que posteriorment es codificat a la sessió de laboratori.Objetivos: 5 7
Contenidos:
Teoría
4h
Problemas
0h
Laboratorio
2h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h
Lenguajes de scripting
Presentació de les característiques principals i d'algun exemples de llenguatges a classe de teoria. Utilització de llenguatges de scripting al laboratori, com ara gestors de processos o per navegadors web, etc.Objetivos: 3 4 8 9
Contenidos:
Teoría
2h
Problemas
0h
Laboratorio
6h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h
Aprendizaje de un nuevo lenguaje de programación
L'estudiant haurà d'aprendre un nou llenguatge que se li assignarà.
Teoría
2h
Problemas
0h
Laboratorio
2h
Aprendizaje dirigido
0h
Aprendizaje autónomo
4h
Actividades de repaso
Teoría
2h
Problemas
0h
Laboratorio
2h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h
Metodología docente
Las clases están divididas en sesiones de teoría y laboratorio.En las sesiones de teoría se desarrollarán los conocimientos de la asignatura, intercalando la exposición de nuevo material teórico con ejemplos y la interacción con los alumnos para discutir los conceptos.
En las clases de laboratorio se pondrán en prácticas los conceptos introducidos y se aplicarán a lenguajes de programación y problemas concretos. Se realizarán tres pequeñas prácticas que irán asociadas a las diferentes pruebas de evaluación.
Método de evaluación
La nota de la asignatura esN = 0.50·F + 0.20·P1 + 0.20·P2 + 0.10·D
donde:
F = nota del examen final
P1 = nota de la primera práctica (mediados de curso)
P2 = nota de la segunda práctica (finales de curso)
D = nota del trabajo dirigido
El examen parcial será un examen de ordenador que evalúa Haskell. El examen final será un examen escrito que evaluará todos los contenidos del curso. La práctica consiste en utilizar herramientas para generar compiladores y Python para resolver un caso práctico.
El trabajo dirigido consiste en preparar un vídeo y un documento escrito sobre las propiedades de un o algunos lenguajes de programación. Su evaluación se hará para evaluación entre compañeros (co-evaluación). Las calificaciones de las competencias transversales se obtienen del trabajo dirigido.
Bibliografía
Básico
-
Compiler design
- Wilhelm, R.; Maurer, D,
Addison-Wesley,
1995.
ISBN: 978-0201422900
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991001228599706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Compilers: principles, techniques, and tools
- Aho, A.V.; Sethi, R.; Ullman, J.D,
Addison-Wesley,
2007.
ISBN: 9780321491695
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991003301129706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Concepts in programming languages
- Mitchell, J.C,
Cambridge University Press,
2003.
ISBN: 978-0521780988
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991002623469706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Programming language pragmatics
- Scott, M.L,
Morgan Kaufmann,
2016.
ISBN: 9780124104099
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991004180229706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Haskell: the craft of functional programming
- Thompson, S,
Addison-Wesley,
2011.
ISBN: 978-0201882957
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991003978689706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Razonando con Haskell: un curso sobre programación funcional
- Ruiz Jiménez, B.C,
Thomson-Paraninfo,
2004.
ISBN: 9788497322775
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991002768069706711&context=L&vid=34CSUC_UPC:VU1&lang=ca
Capacidades previas
Capacidades previas sobre lógica adquiridas en la asignatura Fundamentos Matemáticos (FM):- Conocimiento de los conceptos básicos de lógica proposicional y de predicados
- Conocimientos sobre Inferencia lógica.
Capacidades previas sobre programación adquiridas en las asignaturas de Estructura de Datos y Algoritmos (EDA) y Proyectos de Programación (PROP):
- Conocimiento sobre programación.
- Conocimiento sobre lenguajes de programación orientados a objetos