Documentos de Académico
Documentos de Profesional
Documentos de Cultura
La Tabla de Símbolos
Luis Ochoa
ziul1979@gmail.com
Introducción
• Tabla de Símbolos:
▫ La tabla de símbolos es la estructura de datos
utilizada por el compilador para gestionar los
nombres (identificadores) que aparecen en el
programa fuente: las constantes, las variables, los
tipos, las acciones, etc.
▫ Cuando el compilador encuentra un identificador,
guarda en esta tabla la información que lo
caracteriza: su nombre, su categoría (acción,
variable, constante, clase, tipo, etc.), la dirección de
memoria que se le asigna, su tamaño y el resto de
información, que depende de la categoría concreta.
Introducción
▫ Cuando el identificador es referenciado en el programa, el
compilador consulta la tabla de símbolos y obtiene la
información que necesita.
▫ Una vez se acaba el ámbito de definición del identificador,
se elimina y desaparece de la tabla de símbolos.
▫ RESUMIENDO:
La tabla de símbolos es una estructura global utilizada por
distintos módulos del compilador
Contiene una entrada para cada uno de los símbolos definidos
en el programa fuente.
Sobre los identificadores, y opcionalmente sobre las palabras
reservadas y las constantes.
Información sobre el lexema, tipo de datos, ámbito y dirección
en memoria.
Uso de la tabla de símbolos durante
las fases del proceso de compilación
• El analizador léxico lee los caracteres del
código fuente y detecta los lexemas que
coinciden con los patrones de los testigos.
Cuando encuentra un identificador comprueba
si está introducido en la tabla de símbolos y, si
no lo está, crea una nueva entrada para el
mismo.
Uso de la tabla de símbolos durante
las fases del proceso de compilación
• El analizador sintáctico generalmente sólo
trabaja con los símbolos formados en la fase
anterior y añade información a los campos de
atributos. Sin embargo, en algunos casos puede
crear nuevas entradas en la tabla, como cuando
se define un nuevo tipo de datos que se debería
tratar como una palabra reservada y no como un
identificador.
Uso de la tabla de símbolos durante
las fases del proceso de compilación
• El conjunto de rutinas del análisis semántico,
que verifican el significado del programa fuente,
debe acceder a la tabla para consultar el tipo de
datos de los símbolos.
• El generador de código puede:
▫ Extraer información de la tabla. Por ejemplo, leer el
tipo de datos de una variable para poder saber cuánto
espacio le tiene que reservar el programa objeto.
▫ Guardar información en la tabla. Por ejemplo, debe
guardar la dirección de memoria en la que se situará
una variable. Cada vez que la variable aparezca en el
programa objeto, debe sustituirse por esta dirección.
Uso de la tabla de símbolos durante
las fases del proceso de compilación
• Nota Importante: Hay que recordar que el
compilador es el que utiliza la tabla de símbolos, y
no el programa compilado. La tabla de símbolos no
está presente en la ejecución del programa, excepto
cuando se incluye un depurador simbólico en la fase
de ejecución o en los casos de los intérpretes en los
que la compilación y la ejecución se alternan.
• También es importante conocer, que la tabla de
símbolos se puede inicializar con las palabras
reservadas del lenguaje para que el analizador
léxico deba verificar menos patrones, tenga menos
estados y se ejecute con mayor rapidez.
Estructura de los registros de la tabla
de símbolos
• Los registros que componen la tabla de símbolos
suelen tener una longitud fija y contienen el
nombre del símbolo y una serie de atributos
como la dirección de memoria, el número de
línea en el que se ha declarado, el tipo de dato,
etc.
Estructura de los registros de la tabla
de símbolos
• Los campos de estos registros pueden guardar
directamente la información para la que están
destinados, o bien un apuntador a la posición de
memoria en la que se guarda esta información, y de esta
manera reducir, en muchos casos, el espacio total
ocupado.
Estructura de los registros de la tabla
de símbolos
• Según el lenguaje que se compila y la estructura
del compilador, los campos del registro pueden
variar. Veremos a continuación los campos
principales más detalladamente:
▫ Nombre del símbolo. En este campo se
guardan todos los lexemas de los símbolos del
programa fuente (identificadores, constantes
numéricas y cualquier otro elemento que el
lenguaje sea capaz de gestionar). Para guardar los
lexemas se pueden utilizar dos técnicas básicas:
Estructura de los registros de la tabla
de símbolos
Interna: El campo de la tabla de símbolos se define
como de tipo cadena de caracteres de dimensión fija (por
ejemplo 127 o 255). Los inconvenientes de esta técnica
son los siguientes:
La longitud máxima de los identificadores está restringida al
valor fijado.
Se desaprovecha mucho espacio, ya que los identificadores
no suelen ocupar todos los caracteres asignados.