Lab 11 (Optimizaciones)
1. Introducción
El objetivo de este laboratorio es preparar el AST para la generación de código, aplicandole la optimización de Constant Folding.
Antes de empezar, obtener los archivos desde Github Classroom:
2. Descripción
En lugar de generar código de forma directa, realizaremos una de las optimizaciones mas simples: aplicaremos Constant Folding a la gramatica empleada en el laboratorio anterior, la cual solo tiene definiciones de funciones, operaciones matematicas y condiciones. En los archivos que descargaron, se les proporciona el codigo base del lexer, parser y AST para que ustedes puedan agregar el código necesario para implementar las optimizaciones. Esta es la gramatica:
3. Constant Folding
Para poder realizar esta fase, ustedes deben recorrer el AST de forma similar a la fase de semant, y la de cgen. El archivo que deben modificar es cool-tree.java, en la clase Main. Ahi deben implementar el metodo llamado optimize, el cual es su punto de inicio. Ademas de esto, son libres de modificar cualquier otra clase que deseen, como hint, otra clase que les seria util, podria ser TreeNode.java. Una vez implementada la función, si tienen el siguiente fragmento de código:
su programa debera optimizarlo, operando la suma y luego escribiendo una unica constante, de la siguente manera:
tomen en cuenta que para las llamadas a funciones tambien pueden realizar optimizaciones:
lo cual deberian cambiarlo a:
El output de su código debe ser el AST optimizado por lo que las operaciones matemáticas entre constantes deben aparecer como una sola constante (usted no debe preocuparse por desplegar el AST esto ya lo hace el código que se le proporciona, usted solo debe modificar la estructura del AST).
4. Autograder
Para comprobar que su código funciona correctamente, pueden escribir make check:
Last updated
Was this helpful?