Professional Documents
Culture Documents
Introduccin
En lenguajes tipeados existen dos clases de tipos:
Los tipos primitivos.
Los tipos definidos por el programador.
Introduccin
La tabla de smbolos es una estructura compleja que, normalmente,
incluye informacin acerca de:
Los tipos del lenguaje.
Los smbolos.
Introduccin
Tabla de tipos
Es necesaria para satisfacer el proceso de anlisis semntico que hace
un compilador.
La tarea bsica de un analizador semntico es la comprobacin de tipos en
variables, funciones y parmetros.
Tabla de tipos
Si el lenguaje admite mbitos de ejecucin, utilizar alguna estrategia
para manejar la tabla en esos mbitos:
Una nica tabla con informacin de mbito.
Una pila de tablas.
RECUERDE: Cuando hay mbitos anidados, desde dentro de un mbito se puede acceder
slo a su mbito superior.
Cuando se utiliza una tabla por cada mbito, stas deben destruirse una vez el
programa sale del mbito.
Tabla de tipos
Para implementar la tabla de tipos (o smbolos) suelen utilizarse
tablas hash:
Tienen el tiempo de acceso ms reducido.
Tabla de tipos
Los campos mnimos necesarios para la tabla de tipos son (cont):
Mnimo: Para la definicin de vectores (a veces definida por el programador,
Ej. Pascal).
Mximo: Para la definicin de vectores (a veces definida por el programador,
Ej. Pascal).
mbito: Si se utiliza una nica tabla, el mbito es un nmero entero que,
normalmente, comienza en 0.
Es habitual la inclusin de un cdigo (ID) de tipo.
Tabla de tipos
Ejemplo: Implementacin de una tabla de tipos de un lenguaje
sensible a las maysculas cuyos tipos primitivos son int y boolean.
Ver la clase Tipo, que implementa el cdigo relacionado con un tipo particular
del lenguaje.
Ver la clase TablaDeTipos, que implementa la tabla y su estrategia de gestin.
Tabla de tipos
Ejemplo de utilizacin:
Supongamos un subconjunto del lenguaje Pascal que permite, adems de los
tipos primitivos integer y boolean, la definicin de tipos vector y registro.
Supongamos que tenemos el siguiente cdigo:
Tabla de tipos
Ejemplo de utilizacin:
Supongamos que este lenguaje es sensible a las maysculas (aunque Pascal
no lo sea).
Veamos el procesamiento del programa y la gestin de la tabla de tipos:
Tabla de tipos
Inicializacin de la tabla:
Cdigo
Nombre
TipoBase
Padre
Dimensin Mnimo
Mximo
mbito
integer
-1
-1
-1
-1
boolean
-1
-1
-1
-1
Tabla de tipos
Procesamiento de las lneas 1 y 2 (en secuencia):
Cdigo
Nombre
TipoBase
Padre
Dimensin Mnimo
Mximo
mbito
integer
-1
-1
-1
-1
boolean
-1
-1
-1
-1
vector
-1
10
Tabla de tipos
Procesamiento de la lnea 3:
Cdigo
Nombre
TipoBase
Padre
Dimensin Mnimo
Mximo
mbito
integer
-1
-1
-1
-1
boolean
-1
-1
-1
-1
vector
-1
10
registro
-1
-1
-1
-1
-1
Tabla de tipos
Procesamiento de las lneas 4 y 5 (en secuencia):
Cdigo
Nombre
TipoBase
Padre
Dimensin Mnimo
Mximo
mbito
integer
-1
-1
-1
-1
boolean
-1
-1
-1
-1
vector
-1
10
registro
-1
-1
-1
-1
-1
-1
-1
-1
Tabla de tipos
Procesamiento de las lneas 6, 7 y 8 (en secuencia):
Cdigo
Nombre
TipoBase
Padre
Dimensin Mnimo
Mximo
mbito
integer
-1
-1
-1
-1
boolean
-1
-1
-1
-1
vector
-1
10
registro
-1
-1
-1
-1
-1
-1
-1
-1
vector
-1
Tabla de tipos
Procesamiento de la lnea 9:
Cdigo
Nombre
TipoBase
Padre
Dimensin Mnimo
Mximo
mbito
integer
-1
-1
-1
-1
boolean
-1
-1
-1
-1
vector
-1
10
registro
-1
-1
-1
-1
-1
-1
-1
-1
vector
-1
r1
-1
-1
-1
-1
-1
Tabla de tipos
Procesamiento de las lneas 10 y 11 (en secuencia):
Cdigo
Nombre
TipoBase
Padre
Dimensin Mnimo
Mximo
mbito
integer
-1
-1
-1
-1
boolean
-1
-1
-1
-1
vector
-1
10
registro
-1
-1
-1
-1
-1
-1
-1
-1
vector
-1
r1
-1
-1
-1
-1
-1
-1
-1
-1
Tabla de tipos
Procesamiento de las lneas 12 y 13 (en secuencia):
Cdigo
Nombre
TipoBase
Padre
Dimensin Mnimo
Mximo
mbito
integer
-1
-1
-1
-1
boolean
-1
-1
-1
-1
vector
-1
10
registro
-1
-1
-1
-1
-1
-1
-1
-1
vector
-1
r1
-1
-1
-1
-1
-1
-1
-1
-1
Tabla de tipos
Procesamiento de la lnea 14:
Cdigo
Nombre
TipoBase
Padre
Dimensin Mnimo
Mximo
mbito
integer
-1
-1
-1
-1
boolean
-1
-1
-1
-1
vector
-1
10
registro
-1
-1
-1
-1
-1
-1
-1
-1
Tabla de tipos
Procesamiento de las lneas 15 y 16:
Resultado: No existe la tabla de tipos (se puede eliminar).
La dimensin de vector
La dimensin de registro1 y registro2
La posicin del elemento 6 del tipo vector
La posicin de registro1.y[6]
La posicin de registro1.s
La posicin de registro2.k.y[6]