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
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
1. Introducción a la asignatura
Lectura: 2009_CACM_Hall: Compiler Research - The Next 50 Years
Aplicaciones del análisis de programas
2. Procesadores de lenguajes de programación
Diseño de procesadores de lenguaje
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
Análisis sintáctico descendente (ASD)
Tutorial Parsers ANTLR:
Parser Python (Gramáticas disponibles ANTLR)
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
Tutorial: ANTLR - Listeners - traductores
Ejemplos: traductor simple (listeners)
Tutorial ANTLR: intérpretes - visitors
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)
XText/Xtend
Taller: 5 simple steps to Fowler's DSL with Xtext by Sven Efftinge
Ejemplo código DSL: miss_grant_controller.sm (detalles)
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
Análisis de código: control flow - data flow
Optimización: Análisis + Transformación
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í)
Proyecto final
Entrega: 14/12/2020
Presentación: 15 min máximo
Enlace de entrega: aquí
Calificaciones
Grupo 01 (actualizado: 15/12/2020)
MOOC (Massive Open Online Course) recomendado
MOOC - Curso Coursera: Functional Programming Principles in Scala
Blog Federico Tomassetti
Videos de procesadores de lenguajes (primeros, siguientes, predicción)
Video ANTLR: The Quest for the One True Parser by Terence Parr on Feb 15, 2015
Learn every language by Ozan Onay
Evaluación
Tareas - Talleres: 50%
Presentación: 20%
Proyecto final: 30%
Bibliografía
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.
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.
Flemming Nielson, Hanne Riis Nielson and Chris Hankin: Principles of Program Analysis. Springer Verlag 2005.
Parr Terence. The Definitive ANTLR 4 Reference. The pragmatic bookshelf. 2012.
Parr, Terence. Language implementation patterns: create your own domain-specific and general programming languages. Pragmatic Bookshelf, 2009.
Louden, Kenneth C. Construcción de compiladores: principios y práctica. Thomson, 2004. ISBN: 970-686-299-4.
Pat Terry. Compiling with C# and Java. Pearson Education, 2005. ISBN: 0-321-26360-X.
John C. Mitchell. Concepts in programming languages. Cambridge University Press, 2003. ISBN: 0-521-78098-5.
Libros gratuitos de diseño de compiladores.