Contenido de la tabla de símbolos

Una tabla de símbolos puede conceptualizarse como una serie de renglones, cada uno de los cuales contiene una lista de valores de atributos que son asociados con una variable en particular.

Las clases de los atributos que aparecen en una tabla de símbolos dependen en algún grado de la naturaleza del lenguaje de programación para el cual se escribe el compilador.

Por ejemplo, un lenguaje puede ser sin tipos, y por lo tanto el atributo tipo no necesita aparecer en la tabla. Similarmente, la organización de la tabla de símbolos variará dependiendo de las limitaciones de memoria y tiempo de acceso.

A continuación se presenta un ejemplo de una tabla de símbolos típica.

NúmeroNombre VariableDirección.TipoValorLínea

Declaración

Línea

Referenciada

Liga
1Empresa02129,14,253
2X3410312,140
3Formal832436,37,386
4B4810510,11,13,231
5Resp5210511,23,252
6M5660617,217
7Primero6410728,29,30,385

Los atributos que se manejan en la tabla anterior y que se describen enseguida, no son estrictamente necesarios para todos los compiladores; sin embargo, cada uno de tales atributos deberá ser considerado para la implementación de un compilador de un compilador en particular.

  1. Nombre de la variable.
  2. Dirección del código objeto.
  3. Tipo.
  4. Valor (o número de parámetros para uno procedimiento).
  5. Número de línea fuente donde fue declarada la variable.
  6. Números de línea fuente donde se hace referencia a la variable.
  7. Liga. Campo cuyos valores sirven para listar las variables en orden alfabético.

El nombre de la variable debe estar, en cualquier caso, formando parte de la tabla de símbolos, ya que es el medio por el cual una variable en particular es identificada en las etapas de análisis semántico y generación de código.

Para proveer un acceso rápido, es conveniente manejar un tamaño predefinido pero lo suficientemente grande para los nombres de las variables. Una longitud igual o mayor que 16 caracteres es bastante adecuado. El identificador completo puede almacenarse, justificado a la izquierda, en un campo de longitud fija en la tabla de símbolos.

Este criterio posibilita un acceso más rápido a la tabla de símbolos, a costa de no aprovechar eficientemente el espacio de almacenamiento en el caso de las variables con identificadores cortos.

Otro criterio para manejar los identificadores en la tabla de símbolos consiste en colocar una cadena descriptora en el campo Nombre_Variable de la tabla. El descriptor contiene los subcampos posición y longitud. El subcampo posición es un apuntador que indica la posición del primer carácter del nombre de la variable en un área general de cadenas, y el subcampo describe el número de caracteres del nombre de la variable. Este enfoque produce un acceso más lento a la tabla de símbolos, pero ofrece un ahorro considerable de espacio de almacenamiento.

En el proceso de compilación, una dirección de código objeto debe asociarse con todo variable en un programa. Esta dirección establece la ubicación relativa para los valores de la variable en tiempo de ejecución. La dirección del código objeto se coloca en la tabla de símbolos cuando la variable es declarada (o encontrada por primera vez).

Esta dirección es reinvocada desde la tabla cuando la variable es referenciada en el programa fuente. La dirección es luego utilizada en una instrucción objeto que accesa (carga o almacena) el valor de esa variable.

El atributo tipo se almacena en la tabla de símbolos cuando los lenguajes compilados tienen tipos de datos explícitos o implícitos. Tradicionalmente, el tipo de dato de una variable es almacenado codificada en la tabla de símbolos; por ejemplo 1 puede representar el tipo real, 2 el tipo integer, etc.

Los atributos número_de_dimensiones y número_de_parametros son importantes en la fase de análisis semántico. En las referencias a los arreglos, el número de dimensiones debe coincidir con el especificado en la declaración del arreglo, y esto debe ser verificado en la fase de análisis semántico.

El número de dimensiones se utiliza también como parámetro en el cálculo de la dirección de un elemento particular del arreglo. El número de parámetros de la invocación a un procedimiento también debe coincidir con el número usado en la declaración.

En la construcción de la tabla de símbolos, es conveniente considerar el número de parámetros de un procedimiento como su número de dimensiones y así combinar estos dos atributos en uno. Además de conveniente, este enfoque también es consistente, ya que el tipo de verificación semántica para ambos atributos es similar.

El atributo liga se ha incluido en la tabla de ejemplo simplemente para facilitar la producción de un listado de referencias cruzadas ordenado alfabéticamente por nombre de variable.