Note
This repository contains theoretical notes, practical exercises, and a final project developed for the Language and Compilers course of the Computer Science degree at FAMAF – Universidad Nacional de Córdoba.
All materials are in Spanish, as they were written for academic use and submission.
El presente repositorio contiene todo el material correspondiente a la cursada de la materia de Lenguajes y Compiladores de 5to año de la Licenciatura en Ciencias de la Computación de FAMAF durante el año 2025.
Los temas que trata la materia se pueden ver en el programa de la misma. Respecto al material, este está basado en el apunte de la materia y en el libro Theories of Programming Languages de John C. Reynolds (1998).
El equipo docente está conformado por:
- Miguel Pagano
- Matilda Steinberg
- Martín Vilela Demetrio
Temas | Descripción | Filminas | Apunte |
---|---|---|---|
Introducción a la sintaxis y la semántica de lenguajes | Gramáticas abstractas Función semántica Variables y ligadura |
(1) (2) |
|
El problema de dar significado a la recursión | Órdenes parciales y dominios Morfismos y funciones continuas Teorema del menor punto fijo |
(1) (2) |
PDF Ejemplo |
Lenguaje imperativo simple | LIS Propiedades de la semántica: TC, TR, TS, LS |
(1) (2) |
|
LIS con fallas, semántica denotacional y operacional | LIS con fallas Semántica operacional Teorema de Corrección |
(1) (2) |
|
LIS con input y output | Más sobre dominios Input y output |
(1) | |
Cálculo Lambda | Sintaxis Reducción Evaluación Semántica Denotacional (normal, eager) |
(1) | |
Lenguajes Aplicativos | Evaluación eager Evaluación normal Tuplas Semánticas denotacionales en profundidad Recursión |
(1) | |
Lenguajes Iswim-like | (Des)Referencia Asignación Igualdad Fragmentos imperativos Estado y semántica operacional Fragmento aplicativo Semántica denotacional |
(1) |
Guía | Enunciados | Soluciones |
---|---|---|
1 | ||
2 | ||
3 | ||
4 | ||
5 | ||
6 | ||
7 | ||
8 | ||
9 | ||
10 | ||
11 |
El proyecto de la materia consistió en investigar y realizar un informe de un tema relacionado a esta (Lenguajes y Compiladores) a libre elección en base a nuestros gustos. En general, podía ser un tema específico del libro (un capítulo) o un tema libre. Nosotros elegimos Decompilación.
El informe, caso de uso y presentación se encuentran en este repositorio público donde se hace una vista general de la arquitectura de dcc, uno de los primeros decompiladores (hecho por Cifuentes y Gough), luego por las mejoras o nuevas ideas del esquema dinámico con BinRec y finalmente una presentación de herramientas de decompilación y análisis de binarios actuales junto con algunas aplicaciones y una demo en Ghidra.
El laboratorio de la materia consistió en realizar un intérprete del lenguaje que quieras en el lenguaje que prefieras. Podías hacerlo de forma libre o siguiendo los laboratorios de años pasados donde el intérprete era sobre LIS hecho en Haskell.
En mi caso, hice un intérprete (en C++) de una reducción de C/C++ con tipado dinámico (y otras variantes), basándome en el libro de Crafting Interpreters. Agregué unit testing con Catch2 y documentación autogenerada con Doxygen. El repositorio puede encontrarse aquí. Es probable que se sigan viendo cambios luego de la entrega del laboratorio (1era release) porque me gustó mucho para extenderlo como hobby.