1151049 - Compiladores

Instructor: Rodrigo Alexander Castro Campos.
Trimestre: 2022-O.

Grupo: CSI01.
Horario: Lunes, miércoles y viernes de 11:30 a 13:00.
Salón: E306.

Contenido oficial del curso:
  • Traductores y lenguajes.
  • Lenguaje y máquina objetivo.
  • Análisis léxico.
  • Análisis sintáctico descendente.
  • Análisis sintáctico ascendente.
  • Análisis semántico.
  • Ambientes de ejecución.
  • Generación de código.
  • Mejoramiento de código.
Calificación:

Habrán ocho tareas con un valor de 12.5 puntos cada una. El curso se impartirá en el lenguaje C++. Las tareas consistirán en escribir programas para la plataforma omegaUp que resuelvan el problema de programación indicado para la evaluación. Sus datos deberán enviarse mediante este formulario antes de la entrega de la primera tarea. No se calificarán programas de ninguna otra forma. Cada tarea estará disponible con al menos una semana de anticipación con respecto a la fecha de entrega. No habrá evaluación terminal.

Una tarea sólo cuenta si aparece resuelta al 100% según omegaUp. La calificación final se obtiene de sumar los puntos provenientes de las tareas. La escala de calificación en acta es:
  • Al menos 60 puntos para acreditar con S.
  • Al menos 73 puntos para acreditar con B.
  • Al menos 87 puntos para acreditar con MB.

De acuerdo al Reglamento de Alumnos de la UAM, es falta de los alumnos en contra de la institución el suplantar o permitir ser suplantado en la realización de actividades académicas y se impondrá desde amonestación escrita hasta suspensión por dos trimestres. Los alumnos que incurran en esta falta no tendrán derecho a aprobar el curso.

¡¡¡ Participa en el XVII Concurso de Programación de la UAM "Luis Erick González Moreno" !!!

Pueden consultar esta lista de problemas de "Programación Estructurada" para que practiquen.
Pueden consultar esta lista de problemas de "Algoritmos y Estructuras de Datos" para que practiquen.

Calendario: El siguiente calendario es tentativo y podrá cambiar a lo largo del curso.

  • 17/10: Presentación del curso. Introducción a omegaUp 12. Prueba diagnóstica.
  • 19/10: Expresiones regulares y autómatas finitos.
  • 21/10: Motores de expresiones regulares y características.
  • 24/10: Capturas de subgrupos. Expresiones regulares en programación. Biblioteca y código de ejemplo.
  • 26/10: Presentación de la tarea 1 y sesión de práctica/asesoría. Tarea 1 para el 08/11. Envíos aceptados.
  • 28/10: Gramáticas libres de contexto y algoritmos de análisis. Código de ejemplo.
  • 31/10: Gramáticas LL y análisis descendente. Código de ejemplo.
  • 02/11: Día de descanso obligatorio.
  • 04/11: Gramáticas LR y análisis ascendente.
  • 07/11: Presentación de la tarea 2 y sesión de práctica/asesoría. Tarea 2 para el 18/11. Envíos aceptados.
  • 09/11: Lenguajes, traductores, compiladores e intérpretes. Estudio de un lenguaje de bajo nivel. Referencia de máquina virtual.
  • 11/11: Implementación de la ejecución de instrucciones de un intérprete para el lenguaje de bajo nivel. Código de ejemplo.
  • 14/11: Implementación del análisis léxico, sintáctico y semántico de un intérprete para el lenguaje de bajo nivel. Código de ejemplo.
  • 16/11: Presentación de la tarea 3 y sesión de práctica/asesoría. Código de ejemplo. Tarea 3 para el 28/11. Envíos aceptados.
  • 18/11: Estudio de un lenguaje de alto nivel. Referencia de lenguaje de alto nivel.
  • 21/11: Estructura general de un compilador.
  • 23/11: Tipos de símbolos, anotaciones a símbolos y estrategias de depuración y manejo de errores.
  • 25/11: Implementación del análisis léxico del lenguaje de alto nivel. Código de ejemplo. Preprocesador de inclusiones.
  • 28/11: Presentación de la tarea 4 y sesión de práctica/asesoría. Tarea 4 para el 07/12. Envíos aceptados.
  • 30/11: Expresiones, sentencias y árboles de sintaxis abstracta.
  • 02/12: Tipos de expresiones y sus algoritmos de análisis sintáctico.
  • 05/12: Análisis sintáctico de expresiones con operadores binarios.
  • 07/12: Implementación del análisis sintáctico para sentencias. Código de ejemplo.
  • 09/12: Presentación de la tarea 5 y sesión de práctica/asesoría. Tarea 5 para el 23/12. Envíos aceptados.
  • 12/12: Tablas de símbolos y estructuras de datos auxiliares para el análisis semántico.
  • 14/12: Implementación del análisis semántico para el ámbito global.
  • 16/12: Implementación del análisis semántico de sentencias.
  • 19/12: Implementación del análisis semántico de expresiones. Código de ejemplo.
  • 21/12: Presentación de la tarea 6 y sesión de práctica/asesoría. Tarea 6 para el 16/01. Envíos aceptados.
  • 23/12: Lenguaje destino y la etapa de generación de código.
  • 09/01: Generación de código para funciones y para el inicio del programa. Código de ejemplo.
  • 11/01: Generación de código para sentencias y expresiones. Tarea 7 para el 19/01. Envíos aceptados.
  • 13/01: Optimización de código y asignación de registros. Tarea 8 para el 19/01. Envíos aceptados.
  • Calificaciones finales.
Entornos de programación que pueden usar localmente:
Entornos de programación que pueden usar en línea:
Bibliografía:
  • Aho V., Ullman J., Lam M., Seti R., "Compiladores: principios, técnicas y herramientas", Pearson, 2007.
  • Appel W., "Modern Compiler Implementation in C", Cambridge University Press, 1998.
  • Brown D., Levine J., Mason T., "lex & yacc", O'Reilly Media, 1992.
  • Grune D., Bal H. E., Jacobs C. J., Langendoen K. G., "Diseño de compiladores modernos", McGraw-Hill, 2007.
  • Louden K. C., "Construcción de compiladores", Thomson, 2004.
  • Morgan B., "Building and Optimizing Compiler", Digital Press, 1998.
  • Muchnick S. S., "Advanced Compiler Design & Implementation", Morgan Kauffman, 2003.
Enlaces de interés: