Compiladores

Instructor: Francisco Gómez

Clase: Lunes y Miércoles (4:00 pm a 6:00 pm)

Programa: programa

Horario atención estudiantes: Lunes de 11:00 am a 12:00 m

email: fagomezj@unal.edu.co

Libros de texto y material guía: Aho et al. (2014). Compilers: principles, techniques and tools. Torczon et al. (2011) Engineering A Compiler, Morgan Kaufmann Publishers Inc. Thain, D. (2019). Introduction to Compilers and Language Design. Lulu. com.

Descripción del curso:

El curso busca ofrecer una visión general de los conceptos y las técnicas necesarias para la construcción de compiladores. En particular aspectos relacionados con las fases de análisis y síntesis, los aspectos computacionales necesarios para su implementación, y su aplicación en diferentes problemas de las ciencias de la computación.

Programación

    1. Introducción a los compiladores. Estructura de un compilador. Evolución de los compiladores. Aplicaciones de los compiladores. Elementos de un lenguaje de programación.


    1. Análisis léxico. Tokens y los lexemas. Especificación formal de los tokens con expresiones regulares. Reconocimiento de tokens utilizando autómatas finitos. Conversión entre expresiones regulares y autómatas finitos. Implementación de un analizador léxico. Aplicaciones del análisis léxico.


    1. Análisis sintáctico. Gramáticas. Especificación de gramáticas utilizando gramáticas libres de contexto. Reconocimiento de la sintaxis utilizando gramáticas. Parsing top-down y bottom up. Gramáticas LR y LL. Implementación de un analizador sintáctico. Aplicaciones del análisis sintáctico.


    1. Análisis semántico. Abstractos semánticos. Verificación de la consistencia semántica de un programa. Verificación de tipos. Verificación de etiquetas. Verificación de control de flujo. Manipulación de árboles abstractos semánticos.


    1. Generación de código. Tipos y declaraciones. Verificación de tipos. Control de flujo. Representaciones intermedias. Grafos de flujo. Generación de código.


    1. Optimización de código. Introducción a la optimización independiente de máquina. Introducción al paralelismo a nivel de instrucción. Introducción al análisis procedural.

Recursos

Recursos

Estrategia de calificación

Ejercicios (40%), Proyecto (Código github + reporte escrito) (30%), Examen final (30%).