Lenguajes de Programación 2024-1
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 454 (CyT) - 402
Lenguajes de Programación 2024-1
Personal Docente
Profesor Asociado
Monitor
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)
d. Procesadores de lenguajes de programación:
Lenguajes de programación y Sistemas de procesamiento del lenguaje
Rol de los lenguajes de programación - Taller aplicaciones
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: Latino 1.4.0
Aclaraciones generales Lenguaje Latino
Enunciado: Analizador léxico (trabajo individual)
Fecha de entrega (máximo): 24/03/2024 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 (trabajo individual)
Fecha límite de entrega de analizador: 25/05/2024 23:59
Fecha límite de entrega de gramática: 26/05/2024 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).
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 (Por definir)
Grupos de 3 personas
Es posible usar ANTLR
Entrega en UNCode - no debe tener errores de COMPILATION_ERROR, ni RUNTIME_ERROR.
5. Retos en lenguajes de programación
Lenguajes de dominio específico (DSL)
Introducción
Lineamientos presentaciones
Enlace de ENTREGA
Presentaciones 2024-1 (diapositivas y materiales)
a. Paradigmas de programación: un enfoque histórico por Daniel Aranda (q.e.p.d.)
b. Programación Lógica ()
Tutorial Prolog ()
c. Programación Funcional ()
Tutorial Haskell ()
d. Programación Reactiva ()
Tutorial Svelte ()
e. Programación Concurrente ()
Tutorial Rust ()
f. Programación Orientada a Aspectos ()
Tutorial AspectJ ()
Proyecto final
Lineamientos proyecto final
Idea Propuesta
Entrega (antes) y sustentación (Por definir): enlace de entrega
Calificaciones
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: 20%
Intérprete / Traductor: 20%
Paradigmas de programación: 20%
Proyecto final: 25%
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