You are on page 1of 5

Tabla de smbolos

1.- Introduccin
La tabla de smbolos se implementar con una estructura de vector que contendr
registros variantes. Se ir insertando en ella los smbolos que se van declarando en el cdigo
del programa.
Esta tabla de smbolos tiene la particularidad de que debe permanecer tras el proceso de
compilacin, para poder visualizar correctamente la gestin de la memoria en tiempo de
ejecucin. Para ello se utilizar una estructura en orma de rbol de bloques, seg!n el
anidamiento de los mismos. Se utilizar una estructura algo dierente a una tabla de smbolos
com!n, que permitir seguir la evolucin del proceso de compilacin.
"sicamente se utilizarn dos pilas durante la compilacin, cu#os undamentos se
e$plicarn ms tarde, # al inal, la tabla se volcar en un ic%ero, de manera que conserve la
orma de rbol de bloques.
2.- Tipos de smbolos
Los tipos de smbolos que se insertarn en la tabla de smbolos son los siguientes&
a' Tipobase& Se %a decidido incluir al principio de la tabla de smbolos los cuatro tipos
predeinidos ()nteger, Long)nt, *%ar, "oolean', que se situarn al inicio del primer
bloque. Esto se %ace porque las variables contendrn un puntero al tipo que les
corresponda.
b' Etiqueta.
c' *onstante.
d' Tipode& Tipos deinidos.
e' +ariable.
' ,uncin& Se reiere a procedimientos # unciones. -.P/0 123 4/
SEP505067
g' 0istra.
%' 8atriz.
i' Puntero.
j' Enumerado& Para listas de identiicadores.
9' 0egistro& Tendr su propia lista de campos. Si tiene partes variantes, contendr
apuntadores a las mismas.
l' +ariante& *orresponde a la parte variante del registro.
3.- Estructura de los registros
Parte ija&
- 4ombre
- Tipo de smbolo
Parte variante&
: Tipobase& ; Tama<o en b#tes.
: Etiqueta& ; Procedimiento al que pertenece.
; 4ivel de anidamiento del procedimientoal que pertenece.
; 4= de bloque dentro de la uncin>procedimiento que la engloba.
; 4ivel de anidamiento de bloque, relativo a la uncin>proc al que
pertenece.
; ,lag que indica si se trata de un parmetro o no.
: +ariable& ; Procedimiento al que pertenece.
; 4ivel de anidamiento del procedimientoal que pertenece.
; 4= de bloque dentro de la uncin>procedimiento que la engloba.
; 4ivel de anidamiento de bloque, relativo a la uncin>proc al que
pertenece.
; Puntero al tipo de datos (otro registro de la tabla'.
; ,lag que indica si es una variable o un parmetro.
; 8odo de acceso cuando sea un parmetro.
: *onstante& ; Procedimiento al que pertenece.
; 4ivel de anidamiento del procedimientoal que pertenece.
; 4= de bloque dentro de la uncin>procedimiento que la engloba.
; 4ivel de anidamiento de bloque, relativo a la uncin>proc al que
pertenece.
; +alor.
; Tipo (directamente, no un puntero& n!mero, 4)L, string, constante'.
: ,uncin& ; Procedimiento al que pertenece.
; 4ivel de anidamiento del procedimientoal que pertenece.
; 4= de bloque dentro de la uncin>procedimiento que la engloba.
; 4ivel de anidamiento de bloque, relativo a la uncin>proc al que
pertenece.
; Tipo (Procedimiento o uncin'.
-...7
-,5LT5& ristra, matriz, tipode, puntero, enumerado7
: 0egistro& ; 4= de campos m$imo (contando con los variantes'.
; Tama<o del registro (m$imo, con los variantes'.
; +ector con los nombres de los campos.
; Tipo de cada campo.
; ?esplazamiento de cada campo, relativo al registro.
; 4ombre de la parte variante activa.
: +ariante& ; 4= de campos.
; Tama<o de la parte variante.
; Puntero al tipo de cada campo.
; ?imensin.
; Puntero variante (vector'.
; Lista de campos.
; 4ombre de la parte variante activa.
4.- Funcionamiento de la tabla de smbolos
*omo se dijo anteriormente, tenemos una estructura de rbol de bloques, en la cual
simularemos un recorrido en postorden. Esto nos lleva al uso de dos pilas, %asta que se %a#an
construido todas las ramas del rbol.
Las pilas las llamaremos P5?0E e @)A/S. Podemos implementarlas mediante
vectores, # direccionarlas por n!meros enteros que indiquen las posiciones.
La pila @)A/S contendr al inal la tabla de smbolos con los encadenamientos entre
bloques correspondientes a la estructura del rbol que orman. Pero para construirla, ser
necesario la pila P5?0E, donde iremos inclu#endo bloques, # los mantendremos mientras no se
encuentre su in.
En la pila P5?0E se insertar primero los registros de los tipos predeinidos, en el
primer bloque (raz', # a continuacin se ir insertando todos los registros correspondientes a los
smbolos declarados en dic%o bloque. *on cada nuevo bloque seguiremos insertando los
smbolos, %asta encontrar un in de bloque (%abremos llegado a una de las %ojas del rbol', con
lo que %abr decrementado el nivel de bloque.
Llegados a este punto, e$traeremos el bloque superior de la pila P5?0E, para insertarlo
en la pila @)A/S. Para la transerencia, nos ocuparemos de trasladar todos los registros cu#o
nivel de bloque sea el que tengo en la cima. 5dems debo encadenar el bloque superior que
queda en la pila P5?0E con el que acabo de transerir a la pila @)A/S, que ser su %ijo.
Para acilitar la transerencia de P5?0E a @)A/S, puedo tener almacenado en otra pila,
que podemos llamar 850*5S, unos valores que me indiquen el principio o in de cada uno de
los bloques de la pila P5?0E.
2na vez %a#a transerido un bloque completo, no solo debo encadenarlo con su padre en
la pila P5?0E, sino tambiBn con todos sus %ijos dentro de la pila @)A/S. Esto supone tener un
espacio en el bloque destinado a dic%os punteros, que bien puede ser al inal.
Para almacenar la pila @)A/S de manera que sea posible reconstruir el rbol,
incluiremos los punteros de cada %ijo a su padre, para lo cual se reservar un espacio en la cima
de cada bloque. *uando se transiera el padre de alg!n bloque, recorreremos los
encadenamientos que posea el bloque %acia abajo, # se rellenar el espacio del bloque %ijo
reservado para este puntero, con la direccin de su padre.
La pila P5?0E sirve para comprobar si una variable es accesible en un punto dado del
programa cuando se reerencia, #a que contiene todos los bloques anidados %asta la posicin
actual.
Para poder realizar lo descrito, es necesario incluir otro tipo de smbolos en la estructura
de la tabla. 4o se trata realmente de un smbolo, sino de un registro que %ar de puntero&
Puntero"loque&
; )ndicador de si es puntero al padre o al %ijo.
; Posicin dentro de la pila @)A/S donde comienza el bloque
direccionado.
5.- Gestin de la tabla de smbolos
4ecesitaremos cuatro unciones para el manejo de la tabla&
a' ,uncin de "!squeda Local&
"usca en la tabla un determinado smbolo, pero slo dentro del mbito del bloque
actual. La b!squeda se realiza por el nombre. )nternamente, se buscar en la pila
P5?0E, si e$iste un smbolo con el mismo nombre # nivel de bloque.
b' ,uncin de "!squeda Clobal&
Se encarga de buscar la deinicin de un smbolo dentro del mbito general
correspondiente al punto del programa actual, que inclu#e a todos los bloques que
engloban al actual. Se buscar en toda la pila P5?0E la reerencia al smbolo en
cuestin.
c' )nsercin&
0ealiza la uncin de crear la estructura correspondiente al registro asociado al
smbolo nuevo que se %a#a deinido. )nicializar todos los campos de la estructura, # lo
insertar en la pila P5?0E.
d' Transerencia&
Ser la que transiera los bloques completos entre las pilas P5?0E e @)A/S. Este
trabajo se realiza de una orma compacta, gracias a la pila 850*5S, que es donde se
guarda la posicin de inicio del bloque actual en la pila P5?0E.
El clculo del n!mero de elementos a transerir viene a ser& n= elementos D n= en
P5?0ES E 8arcas(inicio del bloque actual'.
Se transerirn los elementos del bloque atendiendo a lo siguiente& si es un smbolo,
se sit!a en @)A/S, # se incrementa el puntero que recorre el bloque en P5?0ES, pero si
es un puntero, se situar al inal del bloque (sumando el n=elementos al inicio del bloque
en @)A/S', # decrementarB el n= de elementos, para poder situar el siguiente puntero.
5l inal de la transerencia se dejar una posicin libre para el encadenamiento al
padre. Tras esto se realiza en encadenamiento de P5?0E a @)A/S. F para encadenar
los %ijos a sus padres, de recorrer la pila @)A/S mediante los encadenamientos del
bloque actual %acia sus %ijos, para poner en el espacio reservado para dic%o puntero en
los bloque %ijos, la direccin del bloque actual, que es su padre.
La estructura queda como sigue&
reser!ado al padre 12
" al #i$o %4& 11
'I()*+* 1,
'I()*+* -
al padre %-& .
al #i$o %,& /
) 'I()*+* 0
'I()*+* 5
'I()*+* 4
al padre %4& 3
1 'I()*+* 2
'I()*+* 1
'I()*+* Tipos prede2inidos ,
0.- 1ontrol de errores
Los posibles errores a controlar, que se pueden generar por el manejo de la tabla de
smbolos son estos&
- ?uplicidad de declaracin& *uando se intenta insertar un smbolo deinido, cu#o resultado
de la b!squeda en la tabla %a dado positivo, es decir, que #a e$iste un smbolo con ese
nombre.
- Smbolo no declarado& *uando se intenta reerenciar un smbolo cu#a b!squeda en la tabla
%a dado negativa, es decir, que el smbolo no se %a declarado a!n %asta la posicin actual
del cdigo del programa.

You might also like