Compiladores


Semestre:

Fecha de elaboración:

Enero de 2014

Fecha de revisión:

Febrero de 2014

Elaborado por:

Lorena Díaz González

Ciclo de formación:

Profesional

Área curricular:

Ciencias de la Disciplina

Tipo de unidad:

Teórica

Carácter de unidad:

Obligatoria

Clave:

CO01FP050010

Créditos:

10

Semestre:

Horas Teoría:

5

Horas Práctica:

0

Programas académicos en los que se imparte:

Licenciatura en Ciencias Áreas terminales en Matemáticas, Física, Bioquímica y Biología Molecular, y Ciencias Computacionales y Computación Científica

Prerrequisitos:

Domina los conceptos básicos utilizados en representación de datos y su organización en estructuras más complejas. Así como técnicas y algoritmos adecuados para operar sobre las representaciones anteriores con base en el lenguaje C.

Antecedentes Recomendadas:

Ninguna

Consecuentes Recomendadas:

  • Teoría de la Computación

Presentación de la unidad de aprendizaje:

Se presentan conceptos y técnicas básicas del diseño de un compilador. En esta unidad de aprendizaje el estudiante hace uso de modelos matemáticos formales (autómatas, expresiones regulares, gramáticas independientes del contexto, etc.) para definir rigurosamente el léxico, la sintaxis y la semántica de los lenguajes de programación.


Propósito de la unidad de aprendizaje:

Comprender cómo está construido internamente un compilador. Verificar cómo los modelos matemáticos formales ayudan a expresar la definición de un lenguaje de programación. Comprender las entidades de un nuevo lenguaje de programación. Conocer las fases de análisis, funcionamiento y gestión de errores, asunto de vital importancia a la hora de estar programando en un determinado lenguaje.


Competencias profesionales:

Utiliza o elabora programas o sistemas de computación para el procesamiento de información, cálculo numérico, simulación de procesos o control de experimentos.Trabaja datos experimentales y contribuye a su análisis.

Contribución al perfil de egreso:

Para el cumplimiento del perfil, se desarrolla la capacidad para integrarse en ambientes industriales, así como profesional en los equipos de desarrollo e innovación.


Secuencia temática:

  1. I Introducción.
    1. Historia de los compiladores.
    2. Fases de un compilador.
    3. Propiedades deseables en un compilador.
  2. II Analizador léxico.
    1. Funciones principales de un analizador léxico.
    2. Introducción a la teoría de lenguajes y expresiones regulares.
    3. Especificación de los componentes léxicos mediante gramáticas y expresiones regulares.
    4. Autómatas de estado finitos y diagrama de transición.
    5. Determinación de los componentes léxicos mediante autómatas finitos.
    6. Conversión de una expresión regular a un autómata finito determinista.
    7. Práctica: aprender a realizar la implementación del analizador léxico. Utilizar la herramienta LEX para reconocer expresiones regulares.
  3. III Analizador sintáctico.
    1. Funciones principales de un analizador sintáctico.
    2. Fundamentos de la teoría de gramáticas: conceptos de gramática formal (BNF).
    3. Tipos de gramáticas.
    4. Árboles de derivaciones.
    5. Ambiguedad.
    6. Descripción de métodos y algoritmos de análisis sintáctico.
    7. Análisis sintáctico descendente: método recursivo y método no recursivo.
    8. Análisis sintáctico ascendente.
    9. Práctica: implementación de los tipos de análisis sintáctico anteriores usando estructuras de datos avanzadas.
  4. IV Tabla de símbolos.
    1. Tablas de símbolos como parte del análisis semántico: atributos de las tablas de símbolos.
    2. Operaciones con tablas de símbolos.
    3. Detección y recuperación de errores.
    4. Práctica: implementación de la tabla de símbolos mediante estructuras de datos avanzadas.

Criterios de Evaluación:

  • Exámenes parciales: 30%
  • Examen final: 30%
  • Participación en clase: 10%
  • Búsqueda de información: 10%
  • Otra (especifique): Tareas.: 20%


Bibliografía básica:

  • Aho, Alfred V., Lam, Mónica S., Sethi, Ravi y Ullman, Jeffrey D. 2008. Compiladores: principios, técnicas y herramientas. Ed. Addison-Wesley.
  • Debray, S. 2002. Making compiler design relevant for student who will (most likely) never design a compiler. Proceedings of the 33rd SIGCSE technical symposium on computer science education, pp. 341-345, Covington, Kentucky. Estados Unidos.
  • Grune, Dick., Bal, Henri E., Jacobs, Ceril J. H. y Langendoen, Koen G. 2007. Diseño de compiladores modernos. Ed. McGraw-Hill.

Bibliografía complementaria:

  • Ramez A. Elmasri y Shamkant B. Fundamentals of Database Systems. Ed. Navathe Addison-Wesley Pub Co.