CC4101 — Lenguajes de Programación

Bienvenido a las notas del curso CC4101 — Lenguajes de Programación.

Este libro cubre los fundamentos semánticos de los lenguajes de programación mediante la construcción incremental de intérpretes en Racket. El enfoque es práctico: cada concepto se introduce extendiendo un lenguaje base con nuevas características, implementando su semántica en un intérprete ejecutable.

Estructura del libro

El libro sigue la progresión del curso, organizado en seis unidades:

  1. Introducción y Racket — Motivación, paradigma funcional, programación en Racket.

  2. Construcción de intérpretes — Gramáticas, parsers, intérpretes de expresiones aritméticas, identificadores locales, sustitución.

  3. Funciones — Funciones de primer orden, funciones de primera clase, clausuras, alcance estático y dinámico.

  4. Estrategias de evaluación — Evaluación temprana vs. perezosa, Haskell, estructuras infinitas, call-by-name/need/value.

  5. Recursión y mutación — Datos cíclicos, ambientes cíclicos, recursión por la cola, mutación, store-passing.

  6. Metaprogramación y orientación a objetos — Macros e higiene, DSLs, representación procedural de objetos, self, delegación, clases como macros y herencia.

Cada capítulo incluye las definiciones formales, el código del intérprete correspondiente, y ejercicios propuestos.

Material de referencia

  • Libro: Programming Languages: Application and Interpretation (PLAI), Shriram Krishnamurthi.

  • Apuntes: PrePLAI y OOPLAI (Éric Tanter).

  • Lenguajes: Racket (principal), Haskell (unidad 4).