You are on page 1of 5

COMPILADORES

Ing. T c. de Inform tica de e a Sistemas. 3o Curso

Pr ctica 1: Tabla de Smbolos. a


OBJETIVOS
El objetivo principal de esta pr ctica es implementar una tabla de smboa los que nos ayude durante todo el proceso de traduccion, o compilacion, de programas escritos en el lenguaje Marit neos c . a Este lenguaje tiene estructura de bloques, por lo que la tabla de smbolos tam bi n nos ayudar a cumplir las reglas de visibilidad de dichos smbolos. e a

TABLA DE SIMBOLOS
El funcionamiento b sico de una tabla de smbolos se puede denir como a un objeto donde se almacenan smbolos y con soporte para la denicion de diferentes ambitos anidados.

Figura 1: Esquema de datos La implementacion de la tabla de smbolos se realizar mediante una lista a desordenada de smbolos. Para la gestion de los ambitos y sus anidamientos 1

deberemos implementar los smbolos con un campo especial, que denotare mos como el identicador de ambito. Este identicador ir aumentando o dis a minuyendo en funcion de si se crean o se destruyen ambitos.La visibilidad de un identicador ser su ambito y todas los que est n anidados. a e Estos smbolos ser n de diversos tipos, que escribiremos en un interface a (ISimbolo), para poder manejarlos como constantes. Dentro de cada smbolo, deberemos de almacenar el nombre el tipo de dato el tipo de smbolo identicador de ambito y todos los par metros que nos sean necesarios,p.ej., en el caso de las a funciones la lista de par metros. a Cuando se introduce un smbolo se coloca al nal (o al principio) de la lista, asign ndole el ambito correspondiente (autom tico desde la lista). Tambi n se a a e deber de comprobar que no existe ningun smbolo con el mismo nombre en a el mismo ambito. Implementaremos todos los m todos necesarios para el uso de la tabla, de e forma que podamos detectar duplicados y generar errores sem nticos. a

Elementos a desarrollar.
Crearemos el paquete compiladores.tabla donde guardaremos todos los elementos desarrollados. Los elementos descritos en esta memoria son los mnimos para su imple mentacion, teniendo el alumnos que realizar adicionalmente todos los que crea necesarios.

Interface ITabla
1 2 3 4 5 6 7 8 9 10 11 12 13

package compiladores . t a b l a ; import compiladores . t a b l a . simbolo . Simbolo ; p u b lic i n t e r f a c e I T a b l a { p u b lic boolean I n s e r t a r S i m b o l o ( Simbolo Nombre ) ; p u b lic Simbolo Buscar ( S t r i n g Nombre ) ; p u b lic Simbolo BuscarenAmbito ( S t r i n g Nombre ) ; p u b lic boolean CrearAmbito ( ) ; p u b lic I T a b l a DestruirAmbito ( ) ; }

InsertarSimbolo(SimboloNombre): Inserta el smbolo dentro del ambito actual, respetando las leyes de unicidad de nombres. Devuelve True si la insercion es correcta. Buscar(StringNombre): Busca un nombre de smbolo en TODA la tabla de smbolos, devolviendo el Smbolo de la primera ocurrencia encontra da, respetando la jerarqua de ambitos.Devuelve null si no lo encuentra. BuscarenAmbito(StringNombre): Realiza la misma tarea que buscar, pero unicamente en el ambito actual. CrearAmbito(): Crea un objeto ambito y lo congura como ambito actual. Devuelve True si la operacion tiene exito. DestruirAmbito(): Saca el ambito actual de la tabla de smbolos. Devuel ve una tabla con todos los objetos que se han eliminado del ambito. La implementacion de la tabla del alumno deber implementar ese interfa a ce.

Clase Simbolo
La clase abstracta Simbolo contendr los campos necesarios y comunes para a todos los smbolos. Estos campos comunes son: Tipo de Smbolo Nombre del smbolo Tipo de dato asociado al smbolo direccion de memoria que ocupar a Los smbolos implementan los interfaces ITipoDato y ISimbolo que contienen listas de constantes. En IT ipoDato se almacenan la lista de tipos de datos diferentes de este lenguaje.
1 2 3 4 5 6 7 8 9 10

package compiladores . c o n f i g ; p u b lic i n t e r f a c e ITipoDato { p u b lic f i n a l s t a t i c i n t p u b lic f i n a l s t a t i c i n t p u b lic f i n a l s t a t i c i n t p u b lic f i n a l s t a t i c i n t p u b lic f i n a l s t a t i c i n t p u b lic f i n a l s t a t i c i n t }

T ENTERO T REAL T CARACTER T CADENA T LOGICO T VECTOR

= = = = = =

1; 2; 3; 4; 5; 6;

Y en ISimbolo nos encontraremos la lista de los simbolos diferentes a implementar.


1 2 3 4 5 6 7 8

package compiladores . t a b l a ; p u b lic i n t e r f a c e ISimbolo { p u b lic f i n a l s t a t i c i n t p u b lic f i n a l s t a t i c i n t p u b lic f i n a l s t a t i c i n t p u b lic f i n a l s t a t i c i n t }

S CONSTANTE S VARIABLE S VECTOR S FUNCION

= = = =

1; 2; 3; 4;

Cada uno de estos smbolos deber n de tener m s atributos que ser n par a a a ticulares de cada uno.

GESTION DE ERRORES
La gestion de errores es muy b sica, ya que la mayora de los procedimien a tos devolver n True si la sem ntica es correcta y False en caso contrario. a a En el caso de que el resultado sea False, se deber de informar del error a con un mensaje aclarativo y una aproximacion de la situacion de donde se ha producido el error.

DOCUMENTACION A ENTREGAR
La documentacion a entregar para esta pr ctica debe incluir la siguiente a informacion: 1. Codigo fuente de todas las clases desarrolladas. 2. Documentacion de todas las clases usadas mediante la herramienta Java Doc. 3. Memoria explicativa de como se ha implementado la pr ctica, cu les son a a los principales problemas encontrados y modo en el que lo han solucionado. 4. Descripcion de un conjunto de pruebas realizadas que cubran todas las ordenes de la tabla de smbolos, y que deber n de adjuntar a la memoria. a

El da de entrega es: 15/11/2010 a las 20:00 horas. y el modo, ser mediante la plataforma de ensenanza virtual. a http://moodle.uhu.es