Creación de Tabla de Símbolos
Creación de Tabla de Símbolos
Creación de Tabla de Símbolos
Programacin de Sistemas
Tabla de Smbolos
Tambin se la llama tabla de nombres o tabla de identificadores.
Es una estructura de datos que usa el proceso de traduccin de un lenguaje de programacin, por un compilador o un intrprete, donde cada smbolo en el cdigo
Funciones principales:
Efectuar chequeos semnticos. Generacin de cdigo.
Muchos compiladores configuran una tabla en el momento del anlisis lxico y le agregan informacin de los smbolos utilizados durante el anlisis semntico, cuando se conoce mas informacin sobre las variables.
La organizacin de la tabla de smbolos variar dependiendo de las limitaciones de memoria y tiempo de acceso.
La tabla almacena la informacin que en cada momento se necesita sobre las variables del programa, informacin tal como: nombre, tipo, direccin de localizacin, tamao, etc.
La gestin de la tabla de smbolos es muy importante, ya que consume gran parte del tiempo de compilacin. De ah que su eficiencia sea crtica.
Tambin sirve para guardar informacin referente a los tipos creados por el usuario, tipos enumerados y, en general, a cualquier identificador creado por el usuario, nos vamos a centrar principalmente en las variables de usuario.
Lista de Atributos
Nombre de identificador.
Direccin en tiempo de ejecucin a partir de la cual se almacenar el identificador si es una variable. En el caso de funciones puede ser la direccin a partir de la cual se colocar el cdigo de la funcin.
Nmero de dimensiones del array, o nmero de miembros de una estructura o clase, o nmero de parmetros si se trata de una funcin.
Tamao mximo o rango de cada una de las dimensiones de los arrays, si tienen dimensin esttica.
Tipo y forma de acceso de cada uno de los miembros de las estructuras, uniones o clases. Tipo de cada uno de los parmetros de las funciones o procedimientos. Valor del descriptor del fichero y tipo de los elementos del fichero en el caso de lenguajes basados en ficheros homogneos.
Nmero de la lnea del texto fuente en que se hace referencia a la variable. Campo puntero para construir una lista encadenada que permita listar las variables en orden alfabtico en las fases de depuracin de cdigo.
Si lo hacemos con lmite, emplearemos una longitud fija para cada variable, lo cual aumenta la velocidad de creacin, pero limita la longitud en unos casos, y desperdicia espacio en la mayora.
guardar el nombre.
En lenguajes que no permiten recursividad, las direcciones se van asignando secuencialmente a medida que se hacen las declaraciones.
El nmero de dimensiones de una variable array, o el de parmetros de una funcin o procedimiento junto con el tipo de cada uno de ellos es til para el chequeo semntico.
Aunque esta informacin puede extraerse de la estructura de tipos, para un control ms eficiente, se puede indicar explcitamente.
Tambin podemos guardar informacin de los nmeros de lnea en los que se ha usado un identificador, y de la lnea en que se declar.
Conforme van apareciendo nuevas declaraciones de identificadores, el analizador lxico, o el analizador sintctico segn la estrategia que
El analizador semntico efecta las comprobaciones sensibles al contexto gracias a la tabla de smbolos, y el generador de cdigo intermedio usa las direcciones de memoria asociadas a cada identificador en la tabla de smbolos, al igual que el generador de cdigo.
Ejemplo
Vamos a hacer un intrprete. Recordar que en un intrprete la entrada es
un programa y la salida es la ejecucin de ese programa.
En la segunda instruccin necesitamos saber cuanto vale a; es decir el valor de a debe estar guardado en algn sitio. Para ello utilizaremos una lista de pares:
Tabla de smbolos
Nombre Valor
Nombre Valor
Nombre Valor
De forma que cuando nos encontremos con la instruccin a = 7 * 3, miremos en la tabla, si no est a en la tabla, creamos un nodo para introducirla Ts
a
21
A continuacin nos encontramos con b = 3 * a. Qu es a? Busco en la tabla de smbolos y vemos que el valor de a es 21. b = 3 * a Ahora buscamos b en la tabla de smbolos y como no est lo
creamos
Ts
a
21
b
63
Si ejecutramos ahora la instruccin: a = a + b Tendramos a a y b en la tabla de smbolos con lo cual solo tendramos que modificar el valor de a.
Ts
a
84
b
63