Compilación (1 Semestre, 3er Año)
Arquitectura general de un compilador. Fases del proceso de compilación, y ejemplificación en diversos lenguajes de programación reales. Expresiones regulares. Mecanismos reconocedores: autómatas de pila. Conversión entre los mecanismos generadores (gramáticas) y reconocedores (autómatas). Características de los lenguajes de programación reales en el contexto de los lenguajes formales. Algoritmos para la construcción de analizadores lexicográficos (lexer) a partir de lenguajes regulares. Algoritmos para la construcción de analizadores sintácticos (parsers) descendentes y ascendentes para lenguajes libres del contexto. Propiedades formales de los tipos de parsers y los tipos de gramáticas asociadas. Limitaciones de los lenguajes libres del contexto para representar lenguajes de programación reales. Gramáticas atributadas como un mecanismo para añadir contexto a los lenguajes libres del contexto. Relación entre gramáticas atributadas y los distintos tipos de parsers. Definición de árbol de sintaxis abstracta, y su proceso de obtención a partir de una gramática atributada. Problemas asociados a los lenguajes de programación que se resuelven en la fase de chequeo semántico: inferencia de tipos, determinar los símbolos válidos en un contexto, detectar inconsistencias del uso de tipos. Tipado estático y tipado dinámico, y su relevancia para el diseño de compiladores e intérpretes. Mecanismos para la implementación de compiladores de lenguajes orientados a objetos. Generación de código para diversas arquitecturas de máquina. Lenguajes intermedios y su importancia para la portabilidad. Ejemplos prácticos de servicios de compilación y su uso para el desarrollo de herramientas de asistencia a la programación.
Evaluación: Examen Final y Proyectos
Profesores:
- Prof. Asistente MSc. Alejandro Piad
- Prof. Instructor MSc. Juan Pablo Consuegra
- Prof. Instructor Lic. Rocío Cruz