Lenguajes de Programación 2020-2
Curso de Lenguajes de Programación en la Universidad Nacional de Colombia. El objeto de estudio de esta asignatura es conocer la estructura y esencia de los lenguajes de programación y, a partir de ahí, abordar el diseño y construcción de un lenguaje de programación. Para el desarrollo satisfactorio de esta asignatura es importante que el estudiante tenga sólidos conocimientos de lógica de programación y matemáticas discretas; además, haber utilizado más de un lenguaje de programación.
Enlace para clases remotas: aquí
Calendario del curso: aquí
Foro de discusión Piazza: aquí
Personal Docente
Profesor Asociado
Asignatura
Lenguajes de Programación
Código SIA: 2025966
Créditos: 3
Departamento de Ingeniería de Sistemas e Industrial
Facultad de Ingeniería
Universidad Nacional de Colombia
Sede Bogotá
Contenido
1. Introducción a los lenguajes
a. Conceptos previos: lenguajes y gramáticas.
b. Conceptos previos: autómatas.
Taller LGA (Lenguajes, Gramáticas y Autómatas)
c. Lenguajes de programación y Sistemas de procesamiento del lenguaje
d. Rol de los lenguajes de programación (taller: aplicaciones)
e. Estructura de un procesador de lenguaje
a. Alfabeto, lexemas y tokens.
b. Lenguajes regulares, expresiones regulares y reconocimiento de tokens.
c. Generadores y construcción de analizadores léxicos.
Práctica 1:
Lenguaje bcc
Enunciado: Analizador léxico
Fecha de entrega y sustentación: lunes 28 de septiembre 2020
3. Análisis sintáctico
a. Conceptos de análisis sintáctico y diseño de gramáticas.
i. Ambigüedad.
ii. Asociatividad y precedencia de operadores.
b. Análisis sintáctico descendente (ASD).
c. Construcción de analizadores sintácticos: condición LL(1), LL(k), LL(*), ASDR.
Taller ASD (solución de dudas en clase)
Práctica 2: analizador sintáctico
Fecha de entrega y sustentación: lunes 26 de octubre 2020
4. Traducción dirigida por sintaxis
a. Gramática de atributos,
b. Traducción dirigida por sintaxis (TDS), definición dirigida por sintaxis (DDS).
c. Esquemas de traducción dirigida por sintaxis (ETDS).
TDS - DDS - ETDS
Taller ASD - TDS
d. Generación de código intermedio.
e. Generadores de analizadores sintácticos.
Tutorial traductores (listeners)
Tutorial intérpretes (visitors)
Práctica 3: Sustentación traductor/intérprete
Fecha de entrega y sustentación: miércoles 18 de noviembre 2020
5. Retos en lenguajes de programación
Enlace ENTREGA
Presentaciones 2020-2 (diapositivas y materiales)
Introducción (9/11/2020)
a. Paradigmas de programación: un enfoque histórico por Daniel Aranda (q.e.p.d.)
b. Programación Lógica (23/11/2020)
Tutorial Prolog
c. Programación Funcional (25/11/2020)
Tutorial Scala
d. Programación Paralela (30/11/2020)
Tutorial OpenMP
e. Programación Concurrente (2/12/2020)
Tutorial Erlang
f. Programación Orientada a Aspectos (9/12/2020)
Tutorial AspectJ
Proyecto final
Entrega y sustentación (lunes 14 de diciembre 2020)
Video sesión 14/12/2020 (sustentaciones)
Calificaciones
Grupo 01 (última actualización: 15/12/2020)
Recursos recomendados
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
Analizador léxico: 15%
Analizador sintáctico: 15%
Intérprete / Traductor: 20%
Paradigmas de programació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.
Louden, Kenneth C. Construcción de compiladores: principios y práctica. Thomson, 2004. ISBN: 970-686-299-4.
Parr Terence. The Definitive ANTLR 4 Reference. The pragmatic bookshelf. 2012.
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.
John R. Levine, Tony Mason, Doug Brown. Lex & yacc. O`Reilly, 1995. ISBN:1-56592-000-7.
Parr, Terence. Language implementation patterns: create your own domain-specific and general programming languages. Pragmatic Bookshelf, 2009.
Louden, Kenneth , Programming Languages: Principles and Practice, Second Edition, PWS Publishing, 2002.
Scott, Michael, Programming Language Pragmatics, 2nd Ed, Academic Press, 2005.
Watt, David, Programming Language Design Concepts, Prentice Hall, 2004.
Libros de programación gratuitos de diseño de compiladores y paradigmas de programación