[UCR]
[/\]

Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
[<=] [home] [<>] [\/] [=>]

CI-1322 Autómatas y Compiladores

II Semestre 2006 Profesor Adolfo Di Mare

 

REQUISITOS

CI-1221 Estructuras de Datos y Análisis de Algoritmos Horas: 4
CI-1220 Ensambladores y Microprocesadores Créditos: 4

 

OBJETIVO

      Introducir los conceptos principales sobre el diseño e implementación de compiladores para lenguajes modernos.

 

OBJETIVOS ESPECIFICOS

      Al finalizar el curso el estudiante será capaz de:

 

CONTENIDOS

  1. Repaso de grafos y árboles
  2. Autómatas de estado finito y expresiones regulares.
  3. Gramáticas: gramáticas libres de contexto.
  4. Introducción a la compilación: compiladores y traductores, fases y pasadas de un compilador, preprocesadores.
  5. Análisis léxico: reconocimiento de tokens, detección y recuperación de errores.
  6. Análisis sintáctico: analizadores top-down y bottom-up, analizadores LL y LR.
  7. Análisis semántico y chequeo de tipos.
  8. Traducción orientada a la sintaxis, gramáticas con atributos, traducción top-down.
  9. Generación de código intermedio: lenguajes de tres direcciones, parcheo de referencias.
  10. Ambiente de ejecución: manejo de memoria, acceso a variables, paso de parámetros.
  11. Generación de código objeto.
  12. Optimización de código.
  13. Uso de herramientas automatizadas para la construcción de compiladores.

      Las tareas escritas consistirán en "premios", esto es, asignaciones cortas que cada estudiante debe cumplir. Es obligación del estudiante el realizar todas las lecturas asignadas, y también entregar un resumen de una página por cada una de las lecturas. En la medida de lo posible, el profesor asignará una lectura o tarea corta en cada lección.
      Al comienzo de cada lección el estudiante debe entregar un hoja compuesta de 4 filminas en las que resuma el material cubierto en la lección anterior. Estas fichas de estudio le servirán luego para repasar la materia cubierta.

 

INDICE DE MATERIALES DEL CURSO

Exámenes
P1  -  P2  -  P3
Final
Tareas
#1  -  #2  -  #3
#4  -  #5  -  #6
Tareas
# 1: Índice jerárquico de un documento HTML
# 2: Compilación de un programa
# 3: La calculadora de varios dígitos
# 4: La gramática de XML
# 5: La gramática de XML
# 6: Javascript para leer la cédula

 

EVALUACION

      El peso de la evaluación estará en los exámenes, aunque es indispensable que todos los estudiantes realicen los proyectos.

Tareas, proyectos, quices   20%    (Prof. Di Mare)    [Carta al Estudiante]
Examen Parcial #1   10%    Lunes 18 setiembre
Examen Parcial #2   10%    Lunes 25 setiembre
Examen Parcial #3   25%    Lunes 6 noviembre
Examen Final   35%    Miércoles 29 noviembre

Examen Parcial #1   15%    Miércoles 23 de setiembre    (Prof. Gang)
Examen Parcial #2   17.5%    Sábado 4 de noviembre    [Carta al Estudiante]
Examen Final   20%    Sábado 2 de diciembre    [Cronograma de Trabajo]
Trabajo en clase 10%
Quices y tareas cortas   17.5%
Tareas programadas 20%


 

LIBRO DE TEXTO

[ASU-86]
                
Aho, Alfred V & Sethi, Ravi & Ullman, Jeffrey D.: Compilers: Principles, Techniques and Tools, Addison Wesley. 1979.


 

OBRAS DE CONSULTA

Albahari, Ben & Drayton, Peter & Merril, Brad
C# Essentials, 2nd Edition, O'Reilly, ISBN 0-596-00315-3, 2002.
Fisher, C. N. & Leblanc, R.
Crafting a Compiler. Benjamin Cummings 1988.
Hopcroft, John E. & Motwani, Rajeev & Ullman., Jeffrey D.
Introducción a la Teoría de Autómatas, Lenguajes y Computación, segunda edición, ISBN 84-7829-056-7, Pearson Educación S.A, Madrid, 2002.
Hopcroft, John E. & Ullman., Jeffrey D.
Introduction to Automata Theory, Languages and Computation, Addison Wesley. 1979.
Lennan, B.J.
Principles of Programming Languages. HRW editores. 1987.
Levine, John R. & Mason, Tony & Brown, Doug
Lex & Yacc, 2nd Edition, O'Reilly & Associates, ISBN 1-56592-000-7, Octubre 1992.
Muchnick, Steve
Advanced Compiler Design and Implementation. Morgan Kaufmann Publishing, 1997.
Pratt, Terrence W. & Zelkowitz, Marvin V.
Lenguajes de Programación: Diseño e implementación, 3era edición, Prentice-Hall Hispanoamericana, ISBN 0-13-678012-1, 1998.
Sethi., R.
Lenguajes de Programación. Conceptos y constructores. 1992
Teufel, Bernard & Schmidt, Stephanie & Teufel, Thomas
Compiladores Conceptos fundamentales. Addisson-Wesley Iberoamericana, ISBN 0-201-65365-6, 1995.


C++: FAQ's y Links
[Alb-2000] Albahari, Ben: A Comparative Overview of C# (A comparison of C# to C++ and Java), 2000.
      http://www.genamics.com/visualj++/csharp_comparative.htm
[Bou-91] Boundy, David: A taxonomy of programmers, ACM SigSoft, Vol.16 No.4, pp [23-30], Octubre 1991.
[HU-79]
                     
Hopcroft, John E. & Ullman, Jefrrey D.: Introduction to Automata Theory, Languages and Computation, Addisson-Wesley Publishing Co., ISBN 0-201-02988-X, pp [1-37, 46-54, 77-94], 1979.
[Mus-98] Musser, David R.: The C++ Standard Template Library (Internet reference index), 1998.
      http://www.cs.rpi.edu/~musser/stl-book/
[Osb-2000] Osborne, John: Deep Inside C#: An Interview with Microsoft Chief Architect Anders Hejlsberg , 2000.
      http://windows.oreilly.com/news/hejlsberg_0800.html
[Ret-91] Rettig, Marc: Nobody Reads Documentation, Communications of the ACM, Vol.34 No.7, pp [19-24], Julio 1991.
[Sch-93] Schwartz, Randall L.: Learning Perl, O'Reilly & Associates, Inc. ISBN 1-56952-042-2, http://www.perl.com, 1994.
[Set-92] Sethi, Ravi: Activación de Procedimientos, Capítulo 4 del libro Lenguajes de Programación: conceptos y constructores, pp [121-172], Addisson-Wesley Iberoamericana, ISBN 0-201-51858-9, 1992.
[Str-98] Stroustrup, Bjarne: The C++ Programming Language, 3rd edition, ISBN 0-201-88954-4; Addison-Wesley, 1998.
      http://www.research.att.com/~bs/papers.html

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2006
Derechos de autor reservados © 2006
[home] <> [/\]