Lenguajes de Programación 2022-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.


Horario de clases: lunes y miércoles 11:00 a 13:00 Edificio 401 - 204

Foro de discusión Campuswire: aquí

Lenguajes de Programación 2022-2

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

Presentación asignatura

1. Introducción a los lenguajes

a. Conceptos previos: lenguajes.

b. Conceptos previos: gramáticas.

c. Conceptos previos: autómatas.

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

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

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

f. 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 Coral: Guía para el Manual de referencia - Sitio oficial

Enunciado: Analizador léxico (trabajo individual)

Fecha de entrega: 18/09/2022 23:59

Entrega: UNCode - ver documentación -> videos

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.

Práctica 2: analizador sintáctico (individual)

Fecha límite de entrega: 16/10/2022 23:59

Entrega: UNCode - ver documentación -> videos

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).

Taller ASD - TDS

d. Generación de código intermedio.

e. Generadores de analizadores sintácticos.

Introducción ANTLR con IntelliJ IDEA

Tutorial traductores (listeners)

Tutorial intérpretes (visitors)

Práctica 3: traductor/intérprete (fecha entrega: 7/11/2022 23:59)

Es posible usar ANTLR

Grupos: máximo 3 personas

Entrega en UNCode - no debe tener errores de COMPILATION_ERROR, ni RUNTIME_ERROR.

5. Retos en lenguajes de programación

Introducción

Lineamientos presentaciones

Enlace de ENTREGA

Presentaciones 2022-2 (diapositivas y materiales)

a. Paradigmas de programación: un enfoque histórico por Daniel Aranda (q.e.p.d.)

b. Programación Lógica (02/11/2022)

Tutorial Prolog (02/11/2022)

c. Programación Funcional (09/11/2022)

Tutorial Haskell (09/11/2022)

d. Programación Reactiva (16/11/2022)

Tutorial ReactiveX - RxJS (16/11/2022)

e. Programación Concurrente (21/11/2022)

Tutorial Go (21/11/2022)

f. Programación Orientada a Aspectos (23/11/2022)

Tutorial AspectJ (23/11/2022)

Proyecto final

Lineamientos proyecto final

Idea Propuesta

Entrega (antes) y sustentación (28/11/2022 11:00): enlace de entrega

Calificaciones

Grupo 01 (última actualización: 2/12/2022)

Recursos recomendados

Evaluación

  • Analizador léxico: 15%

  • Analizador sintáctico: 20%

  • Intérprete / Traductor: 20%

  • Paradigmas de programación: 20%

  • Proyecto final: 25%

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