18

Click here to load reader

Tabla De Simbolos

Embed Size (px)

Citation preview

Page 1: Tabla De Simbolos

TABLA DE SIMBOLOS

Ing. Diego Andrés Manios M.

UNIVERSIDA ANTONIO NARIÑO

Page 2: Tabla De Simbolos

Que es una tabla de símbolos?

También se la llama tabla de nombres o tabla de identificadores y tiene dos funciones principales:

• Efectuar chequeos semánticos.• Generación de código.Permanece sólo en tiempo de compilación, no de ejecución, excepto en aquellos casos en que se compila con opciones de depuración.

Page 3: Tabla De Simbolos

La tabla almacena la información que en cada momento se necesita sobre las variables del programa, información tal como: nombre, tipo, dirección de localización, tamaño, etc. La gestión de la tabla de símbolos es muy importante, ya que consume gran parte del tiempo de compilación. De ahí que su eficiencia sea crítica. Aunque también sirve para guardar información 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.

Page 4: Tabla De Simbolos

Tabla de símbolos

La Tabla de Símbolos (TS) es una estructura de datos que usa un compilador para manipular los identificadores que aparecen en un código fuente.

Almacena todas las características necesarias de un identificador.

La estructura y organización de la TS depende de las características del Lenguaje Fuente.

La TS es consultada constantemente durante la compilación por tanto es importante que su organización sea eficiente.

Page 5: Tabla De Simbolos

La TS normalmente está vigente sólo durante la compilación del programa fuente por lo que, en general, se ubica en la memoria principal.

Es usada en varias fases de un compilador:

Semántico

» Para incluir nuevos identificadores

» Para verificar si un identificador ya existe

» Para verificación de tipos

Generación de código

» Para generar el código (direcciones de los operadores)

Page 6: Tabla De Simbolos

Algunas TS contienen también las palabras reservadas del Lenguaje, esto implica que sea creada inicialmente con todas las posibles Palabras Reservadas, para que después se incluyan los identificadores del programa. En este caso el léxico debe usar la TS para ver si una cadena es o no una palabra reservada.

Caso la TS contenga sólo identificadores, el léxico podrá mantener una Tabla de Palabras Reservadas para poder identificar si una cadena es o no palabra Reservada

Page 7: Tabla De Simbolos

La Tabla de Palabras reservada es una tabla estática que debe tener valores definidos por el mismo programa (constante). Debe estar organizada de

manera a tener un acceso eficiente.

La Tabla de palabras reservadas también debe incluir los nombres de las funciones intrínsecas del lenguaje

Page 8: Tabla De Simbolos

Tiene básicamente dos campos:

» Nombre

» Atributos

Campo Nombre: almacena la cadena de caracteres que representa el identificador.

Algunos Lenguajes permiten que los identificadores varíen su tamaño hasta 64 caracteres, otros permiten sólo hasta 31 y algunos más antiguos sólo permitían

hasta 7 caracteres.

Dependiendo de diseño del Compilador éste campo puede ser de tamaño fijo o puede ser un campo de tamaño variable.

Estructura TS

Page 9: Tabla De Simbolos

Campo Atributo: asociado al nombre que generalmente es compuesto y puede contener:

Tipo: indica si el identificador es variable, constante, entero, real, procedimiento, función, etc.

» Indicador: si el identificador tiene valor definido o no

» Valor: si se trata de una constante

» Ámbito del identificador: si fuera el caso

» Dimensión: (para arreglos) cuantas dimensiones y el rango para cada una

Page 10: Tabla De Simbolos

Dirección asignada al identificador, generalmente esuna posición relativa a una dirección base

Número y tipo de parámetros (si fuera procedimiento o función)

Page 11: Tabla De Simbolos

Un aspecto muy importante de la TS es su organización de manera tal que su acceso sea eficiente.

Se debe especificar las operaciones válidas sobre esta estructura y cada operación deberá estar asociada generalmente a una acción semántica (un método).

La operaciones más frecuentes son:

» Inclusión

» Consulta

» Modificación de algún subcampo de atributo

Organización TS

Page 12: Tabla De Simbolos

La TS debe organizarse de manera eficiente teniendo en cuenta las características del lenguaje.

Se puede proponer:

» Campos de tamaño fijo o variable

» Entradas ordenadas, tablas secuenciales indexadas

» Listas ligadas

» Árboles binarios

» Árboles B

» Dispersión

» Una combinación de los métodos anteriores

Page 13: Tabla De Simbolos

Campos fijos

Es usado generalmente cuando el nombre del identificador tiene un máximo de pocos caracteres

Page 14: Tabla De Simbolos

Campos Nombre Variables

Se usa generalmente cuando el número de caracteres máximo para un identificador es bastante grande

Page 15: Tabla De Simbolos

Campos Variables

Se usa cuando la estructura de la TS es muy variada para los diferentes tipos de entrada

Page 16: Tabla De Simbolos

Esta operación se realiza cada vez que aparece un nuevo identificador en el programa fuente.

La operación se ejecuta, generalmente, cuando no existe otro identificador con el mismo nombre.

Normalmente se incluye el nombre del identificador y el tipo del mismo.

Si se trata de un procedimiento o función será necesario crear entradas para los parámetros formales o realizar un proceso especial para guardar la declaración del procedimiento o función.

Inclusión

Page 17: Tabla De Simbolos

Toda vez que aparece la referencia a un identificador es necesario verificar si éste ya está en la TS. Dependiendo del lenguaje si el identificador no está:

» Hay que incluirlo (lenguajes sin declaración de variables)

» Hay un error (lenguajes con declaración de variables)

En el análisis Semántico se consulta para realizar la

verificación de tipos (entero, real, arreglos, etc).

En el generador de código se consulta para obtener la dirección asignada al identificador

Consulta

Page 18: Tabla De Simbolos

Algunos de los valores del atributo se conocen con posterioridad a la declaración/aparición por primera vez de la variable.

En este caso será necesario realizar una operación de modificación sobre un atributo como por ejemplo:

Dirección de memoria asignada

Si la variable tiene valor asignado o no.

Modificación