Lab 5 (Symbol Table)

1. Introducción

Han terminado las primeras 2 fases de su proyecto, y ahora es donde empieza la verdadera batalla contra el dragon. En la fase 3 se encargarán de hacer el análisis semántico del compilador, es decir, en pocas palabras, deben asignar un tipo a cada nodo del árbol generado en la fase 2, y así terminar de capturar cualquier error o inconsistencia en el código o programa a compilar. Para realizar esta fase, ustedes deben implementar una tabla de símbolos en donde guardarán todas las variables declaradas para validar su existencia en base a su scope, y poder asignar un tipo a cada una.

Para iniciar, ejecuten el comando para generar los archivos necesarios:

2. Tabla de Símbolos

Estos son los archivos necesarios para implementar la fase 3 del proyecto, pero por ahora nos enfocaremos únicamente en SymtabExample.java. Veán que este archivo contiene un ejemplo de como funciona la tabla de símbolos:

La tabla de símbolos (SymbolTable.java), en su implementación, utiliza un stack para los scopes, y adicional al ejemplo que tienen en el archivo, estos son los métodos que contiene la clase:

Vean que las entradas de la tabla de símbolos son pares (Key,Value), donde el valor es de tipo Object. En este laboratorio, para simplificar la calificación, ingresaremos únicamente valores de tipo String.

Ahora que se han familiarizado un poco con la tabla de símbolos, es hora de modificar el archivo SymtabExample.java. Agreguen a este un menú en el que se puedan realizar las siguientes operaciones:

  • Agregar Símbolo

  • Agregar Scope

  • Borrar Scope

  • Buscar en el scope actual (devolver el valor almacenado con el símbolo)

  • Buscar en cualquier scope (devolver el valor almacenado con el símbolo)

  • Comparar el valor de 2 simbolos diferentes

  • Imprimir tabla de símbolos

  • Salir

Para compilar su programa deben de hacer lo siguiente:

Para ejecutarlo:

Una vez terminado todo, envíen al GES un archivo .zip conteniendo únicamente el archivo SymtabExample.java

Last updated

Was this helpful?