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

Felipe Restrepo Calle

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

Programa académico

Presentación asignatura

Video sesión 24/08/2020

1. Introducción a los lenguajes

a. Conceptos previos: lenguajes y gramáticas.

Video sesión 26/08/2020

b. Conceptos previos: autómatas.

Video sesión 31/08/2020

Video sesión 2/09/2020

Taller LGA (Lenguajes, Gramáticas y Autómatas)

c. Lenguajes de programación y Sistemas de procesamiento del lenguaje

Video sesión 07/09/2020

d. Rol de los lenguajes de programación (taller: aplicaciones)

e. Estructura de un procesador de lenguaje

Video sesión 09/09/2020

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

Video sesión 14/09/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.

Video sesión 16/09/2020

b. Análisis sintáctico descendente (ASD).

Video sesión 21/09/2020

c. Construcción de analizadores sintácticos: condición LL(1), LL(k), LL(*), ASDR.

Video sesión 23/09/2020

Taller ASD (solución de dudas en clase)

Video sesión 30/09/2020

Práctica 2: analizador sintáctico

Fecha de entrega y sustentación: lunes 26 de octubre 2020

4. Traducción dirigida por sintaxis

Diapositivas

Video sesión 05/10/2020

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.

Video sesión 07/10/2020

Video sesión 14/10/2020

e. Generadores de analizadores sintácticos.

Introducción ANTLR

ANTLR en IntelliJ IDEA

Video sesión 19/10/2020

Tutorial traductores (listeners)

Video sesión 21/10/2020

Tutorial intérpretes (visitors)

Video sesión 28/10/2020

Práctica 3: Sustentación traductor/intérprete

Fecha de entrega y sustentación: miércoles 18 de noviembre 2020

Video sesión 18/11/2020

5. Retos en lenguajes de programación

Video sesión 04/11/2020

Lineamientos presentaciones

Enlace ENTREGA

Presentaciones 2020-2 (diapositivas y materiales)

Introducción (9/11/2020)

Video sesión 09/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

Video sesión 23/11/2020

c. Programación Funcional (25/11/2020)

Tutorial Scala

Video sesión 25/11/2020

d. Programación Paralela (30/11/2020)

Tutorial OpenMP

Video sesión 30/11/2020

e. Programación Concurrente (2/12/2020)

Tutorial Erlang

Video sesión 02/12/2020

f. Programación Orientada a Aspectos (9/12/2020)

Tutorial AspectJ

Video sesión 09/12/2020


Proyecto final

Lineamientos proyecto final

Video sesión 11/11/2020

Propuesta

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

Evaluación

  • Analizador léxico: 15%

  • Analizador sintáctico: 15%

  • Intérprete / Traductor: 20%

  • Paradigmas de programació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. Louden, Kenneth C. Construcción de compiladores: principios y práctica. Thomson, 2004. ISBN: 970-686-299-4.

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

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

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

  6. John R. Levine, Tony Mason, Doug Brown. Lex & yacc. O`Reilly, 1995. ISBN:1-56592-000-7.

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

  8. Louden, Kenneth , Programming Languages: Principles and Practice, Second Edition, PWS Publishing, 2002.

  9. Scott, Michael, Programming Language Pragmatics, 2nd Ed, Academic Press, 2005.

  10. Watt, David, Programming Language Design Concepts, Prentice Hall, 2004.

  11. Libros de programación gratuitos de diseño de compiladores y paradigmas de programación