Temas avanzados en Lenguajes de Programación 2020-2

Curso de Temas avanzados en Lenguajes de Programación en la Universidad Nacional de Colombia. Este curso profundiza en los temas relacionados con el desarrollo de procesadores de lenguajes de programación (intérpretes, compiladores,…). Está relacionado principalmente con el Análisis y Manipulación Automática del Código Fuente de programas de computador.


Enlace para clases remotas: aquí

Foro de discusión Piazza: aquí

Personal Docente

Felipe Restrepo Calle

Profesor Asociado


Temas Avanzados de Lenguajes de Programación

Código SIA: 2027030

Créditos: 4


Departamento de Ingeniería de Sistemas e Industrial

Universidad Nacional de Colombia

Sede Bogotá

Contenido

Programa académico

Presentación de la asignatura

Video sesión 24/08/2020

1. Introducción a la asignatura

Panorama general del área

Lectura: 2009_CACM_Hall: Compiler Research - The Next 50 Years

Video sesión 26/08/2020

Video sesión 31/08/2020

Aplicaciones del análisis de programas

Video sesión 2/09/2020

Video sesión 07/09/2020

Video sesión 09/09/2020

2. Procesadores de lenguajes de programación

Diseño de procesadores de lenguaje

Video sesión 14/09/2020

Análisis léxico

Video sesión 16/09/2020

Tutorial ANTLR (lexer)

ANTLR en IntelliJ IDEA

Práctica 1: lenguaje bcc - Máximo 2 personas por grupo

Fecha de entrega y sustentación: 28/09/2020

Análisis sintáctico

Análisis sintáctico y diseño de gramáticas

Video sesión 21/09/2020

Análisis sintáctico descendente (ASD)

Video sesión 23/09/2020

Tutorial Parsers ANTLR:

Ejemplo Parser ANTLR

Parser TL

Parser Python (Gramáticas disponibles ANTLR)

Video sesión 30/09/2020

Práctica 2: Parser lenguaje bcc - Máximo 2 personas por grupo

Fecha de entrega y sustentación: 14/10/2020

Gramáticas de atributos - Traducción dirigida por la sintaxis

Video sesión 05/10/2020

Tutorial: ANTLR - Listeners - traductores

Video sesión 07/10/2020

Ejemplos: traductor simple (listeners)

traductor C++ a Java

Tutorial ANTLR: intérpretes - visitors

Video sesión 19/10/2020

Práctica 3: Traductor/Intérprete lenguaje bcc (opcional: avance proyecto final)

Máximo 2 personas por grupo

Fecha de entrega y sustentación: 28/10/2020

Enlace de entrega: aquí

Lenguajes de Dominio Específico (DSL)

Video sesión 21/10/2020

XText/Xtend

Documentación oficial

Taller: 5 simple steps to Fowler's DSL with Xtext by Sven Efftinge

Ejemplo código DSL: miss_grant_controller.sm (detalles)

Video sesión 26/10/2020

Video sesión 28/10/2020

Analítica de código fuente

Video sesión 04/11/2020

Taller 1: Clasificación de Lenguajes de Programación en Posts de Stackoverflow

Fecha de entrega Taller 1 Analítica: 11/11/2020

Enlace entrega: aquí

Taller 2: Detección de clones de código

Video sesión 09/11/2020

Video sesión 11/11/2020

Análisis de código: control flow - data flow

Video sesión 25/11/2020

Optimización: Análisis + Transformación

Video sesión 30/11/2020

Video sesión 02/12/2020

3. Investigación basada en el análisis de código fuente

Temas adicionales relevantes

Temas disponibles para presentar (máximo 15 min exposición)

Enlace de entrega de la presentación: aquí (miércoles 18/11/2020)

Presentaciones de temas relevantes (diapositivas y materiales adicionales aquí)

Video sesión 18/11/2020

Video sesión 23/11/2020

Proyecto final

Entrega: 14/12/2020

Presentación: 15 min máximo

Enlace de entrega: aquí

Video sesión 14/12/2020

Calificaciones

Grupo 01 (actualizado: 15/12/2020)


MOOC (Massive Open Online Course) recomendado


Evaluación

Tareas - Talleres: 50%

Presentación: 20%

Proyecto final: 30%

Bibliografía

  1. Alfred V. Aho, Ravi Sethi, Jefrey D. Ullman. Compiladores : principios, técnicas y herramientas. Addison Wesley Longman, 2007. 2nd edition.ISBN: 968-444-333-1.

  2. Generative and Transformation Techniques in Software Engineering IV, Ralf Laemmel, Joost Visser and João Saraiva editors, LNCS Tutorials, Proceedings of the summer schools GTTSE’15, 2015. Springer.

  3. Flemming Nielson, Hanne Riis Nielson and Chris Hankin: Principles of Program Analysis. Springer Verlag 2005.

  4. Parr Terence. The Definitive ANTLR 4 Reference. The pragmatic bookshelf. 2012.

  5. Parr, Terence. Language implementation patterns: create your own domain-specific and general programming languages. Pragmatic Bookshelf, 2009.

  6. Louden, Kenneth C. Construcción de compiladores: principios y práctica. Thomson, 2004. ISBN: 970-686-299-4.

  7. Pat Terry. Compiling with C# and Java. Pearson Education, 2005. ISBN: 0-321-26360-X.

  8. John C. Mitchell. Concepts in programming languages. Cambridge University Press, 2003. ISBN: 0-521-78098-5.

  9. Libros gratuitos de diseño de compiladores.