Prácticas del Segundo Cuatrimestre

  1. Asignación de Memoria.
    Seleccionar e implementar las estructuras necesarias que permitan realizar la asignación de memoria.

  2. Código Intermedio.
    Implementación de un intérprete de código intermedio.

  3. Generación de código intermedio (Expresiones).
    Partiendo del front-end de un compilador para un lenguaje sencillo, ampliarlo con la generación de un código intermedio para el tratamiento de expresiones.

  4. Generación de código intermedio (Tipos estructurados).
    Partiendo del front-end de un compilador para un lenguaje sencillo, ampliarlo con la generación de un código intermedio para el tratamiento de arrays y registros.

  5. Generación de código intermedio (Flujo de Control I).
    Resolver el problemas de las referencias hacia delante usando una tabla.

  6. Generación de código intermedio (Flujo de Control II).
    Solucionar el problema de las referencias hacia delante utilizando back-patching.

  7. Generación de código intermedio (Subprogramas).
    Admisión de la declaración en invocación de funciones, generando la representación intermedia en cada caso.

  8. Reconocimiento de Bloques Básicos.
    Partiendo de un código intermedio implementar un algoritmo que permita localizar los bloques básicos.

  9. Generación de código (Expresiones).
    Partiendo de un código intermedio implementar la generación de código para expresiones para una máquina real utilizando un generador de código ciego.

  10. Generación de código (Sentencias).
    Partiendo de un código intermedio implementar la generación de código para una má real de las sentencias que modifican el flujo de control, utilizando un generador de código ciego.

  11. Optimización de código.
    Implementar técnicas de optimización en el código para una máquina hipotética.