You are on page 1of 24

Tabla de tipos y smbolos

Prof. Diego Mosquera


@diegomosuz

Introduccin
En lenguajes tipeados existen dos clases de tipos:
Los tipos primitivos.
Los tipos definidos por el programador.

Normalmente, las variables y subprogramas de un lenguaje de


programacin con tipos, se declaran usando tipos.
A las variables y subprogramas se les denomina smbolos.

Introduccin
La tabla de smbolos es una estructura compleja que, normalmente,
incluye informacin acerca de:
Los tipos del lenguaje.
Los smbolos.

Existen implementaciones de la tabla de smbolos que:


Utilizan dos tablas diferentes: tipos y smbolos.
Utilizan una nica tabla de smbolos (que incluye la informacin de tipos).

Cuando un lenguaje admite mbitos se suelen implementar pilas de


tablas.

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.

Debe ser lo suficientemente dinmica para:


Inicializarse con los tipos primitivos del lenguaje.
Agregar los tipos definidos por el programador (normalmente a partir de tipos
primitivos).

Se deben utilizar estructuras eficientes porque:


Normalmente el acceso a la tabla de tipos es muy recurrente.

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.

Si el lenguaje permite redefinir tipos (o smbolos) con el mismo


nombre dentro de diferentes mbitos, el anlisis del compilador debe
hacerse partiendo del mbito ms interno.

Tabla de tipos
Para implementar la tabla de tipos (o smbolos) suelen utilizarse
tablas hash:
Tienen el tiempo de acceso ms reducido.

Los campos mnimos necesarios para la tabla de tipos son:


Nombre: identificador del tipo (Ej. En Java podra ser int).
TipoBase: cuando hay tipos compuestos (Ej. String[] tipo, el tipo base es
String).
Padre: es el tipo para el caso de registros (o estructuras).
Dimensin: nmero de elementos de un tipo bsico que estn contenidos en
un tipo compuesto. Por ejemplo, para un tipo int la dimensin es 1, pero para
un tipo int[5], la dimensin es de 5.

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.

IMPORTANTE: Para saber si un tipo ya est incluido en una tabla de


tipos, se debe tomar en cuenta si el lenguaje es sensible a las
maysculas.

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).

Dimensin y acceso a los elementos de los tipos


Clculo de la dimensin:
En los tipos bsicos no hay problema (se conoce de antemano).
En los tipos estructurados depende de la dimensin de cada uno de sus
componentes.
Cuando hay varios grados de anidamientos los clculos se realizan de manera recursiva.

Acceso a los elementos de un tipo estructurado:


El acceso de los elementos depende de la dimensin de los tipos.

Dimensin y acceso a los elementos de los tipos


Ejemplo: Suponga el siguiente cdigo:
type vector = array[0..10] of boolean;
type registro1 = record
x : integer;
y : vector;
s : boolean;
end;
type registro2 = record
z : boolean;
k : registro1;
end;

Dimensin y acceso a los elementos de los tipos


Del ejemplo anterior, calcule:
1.
2.
3.
4.
5.
6.

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]

You might also like