Atributos
Sigla: 
CI-0146
Créditos: 
4
Horas: 
5
Clasificación: 
Curso propio
Énfasis y ciclo: 
Ciencias de la Computación 4.I
Descripción: 

En este curso se estudiarán los conceptos y las técnicas necesarias para construir compiladores, mediante el uso de herramientas de generación y optimización de código.

Objetivo general: 

En este curso cada estudiante será capaz de construir compiladores sencillos de lenguaes libres de contexto mediante la descripción de las distintas etapas de un compilador, el estudio de algoritmos de generacoón de árboles sintácticos, técnicas de optimización y el uso de herramientas para la creación de compiladores.

Objetivos específicos: 

Durante este curso el estudiante desarrollará habilidades para:

  1. Describir las etapas de un compilador y la relación entre ellas
  2. Explicar los algoritmos utilizados para la construcción de árboles sintácticos, y su importancia en el proceso de compilación y generación de código
  3. Aplicar estrategias de optimización en el proceso de construcción de un compilador.
  4. Aplicar los algoritmos y conocimientos requeridos para la construcción de compiladores haciendo uso de herramientas de software.
Contenidos: 
Objetivo específico Eje temático Desglose
1 Introducción a los compiladores Descripción de las principales etapas del compilador: análisis léxico, análisis sintáctico, análisis semántico, generación de código, optimización de código. Conceptos básicos (gramáticas, árboles sintácticos, lexemas, componentes léxicos, entre otros). Comparación entre compiladores e intérpretes.
1,2 Análisis léxico y sintáctico Repaso de expresiones regulares y lenguajes libres de contexto. Gramáticas libres de contexto y sus características (ambigüedad, recursividad, entre otros). Forma Backus-Naur, forma normal de Chomsky.
2 Construcción de árboles sintácticos. Método descendente: LL(1). Métodos ascendentes: LR(0), SLR, LR(1), LALR (1). Otros algoritmos: CYK, GLR, Earley. Ventajas y desventajas de cada método.
1,2 Análisis semántico y generación de código. Verificación de tipos. Subtipos. Alcance de la tabla de símbolos. Enlace dinámico de objetos. Generación de código para expresiones. Esquemas de traducción. Traducción dirigida por la sintaxis. Llamados a funciones.
3 Optimización de código. Optimizaciones locales. Código intermedio. Optimizaciones globales. Análisis de flujo del código. Propagación de constantes. Relocalización de registros.
1, 2, 3, 4 Construcción de compiladores Uso de herramientas generadoras de analizadores léxicos y sintácticos (Lex/Flex, Yacc/Bison, PLY, JavaCC, AntLR, entre otros) para la construcción de compiladores.
Bibliografía: 
  1. Aho, Alfred V. and Sethi, Ravi and Ullman, Jeffrey D., "Compilers: Principles, Techniques, and Tools", Addison-Wesley Longman Publishing Co., Inc. (1986).
  2. Aho, Alfred V. and Lam, Monica S. and Sethi, Ravi and Ullman, Jeffrey D., "Compilers: Principles, Techniques, and Tools (2Nd Edition)", Addison-Wesley Longman Publishing Co., Inc. (2006).
  3. Appel, Andrew W., "Modern Compiler Implementation in C: Basic Techniques", Cambridge University Press (1997).
  4. Appel, Andrew W. and Palsberg, Jens, "Modern Compiler Implementation in Java", Cambridge University Press (2003).
  5. Fischer, Charles N. and Cytron, Ronald K. and LeBlanc, Richard J., "Crafting A Compiler", Addison-Wesley Publishing Company (2009).
  6. Grune, Dick and Jacobs, Ceriel J. H., "Parsing Techniques: A Practical Guide", Ellis Horwood (1990).
  7. Hopcroft, John E. and Motwani, Rajeev and Ullman, Jeffrey D., "Introduction to Automata Theory, Languages, and Computation (3rd Edition)", Addison-Wesley Longman Publishing Co., Inc. (2006).
  8. Torczon, Linda and Cooper, Keith, "Engineering A Compiler", Morgan Kaufmann Publishers Inc. (2011).
LIberación de responsabilidad: 

Este no es un documento oficial. Documentos oficiales se entregan en la secretaría de la escuela.