s9.1-tabla de tipos.pdf

24
Tabla de tipos y símbolos Prof. Diego Mosquera @diegomosuz

Upload: natacharivera

Post on 09-Dec-2015

248 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: S9.1-Tabla de tipos.pdf

Tabla de tipos y símbolosProf. Diego Mosquera

@diegomosuz

Page 2: S9.1-Tabla de tipos.pdf

Introducción

• 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 programación con tipos, se declaran usando tipos.

• A las variables y subprogramas se les denomina símbolos.

Page 3: S9.1-Tabla de tipos.pdf

Introducción

• La tabla de símbolos es una estructura compleja que, normalmente, incluye información acerca de:

• Los tipos del lenguaje.

• Los símbolos.

• Existen implementaciones de la tabla de símbolos que:

• Utilizan dos tablas diferentes: tipos y símbolos.

• Utilizan una única tabla de símbolos (que incluye la información de tipos).

• Cuando un lenguaje admite ámbitos se suelen implementar pilas de tablas.

Page 4: S9.1-Tabla de tipos.pdf

Introducción

Page 5: S9.1-Tabla de tipos.pdf

Tabla de tipos

• Es necesaria para satisfacer el proceso de análisis semántico que hace un compilador.

• La tarea básica de un analizador semántico es la comprobación de tipos en variables, funciones y parámetros.

• Debe ser lo suficientemente dinámica 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.

Page 6: S9.1-Tabla de tipos.pdf

Tabla de tipos

• Si el lenguaje admite ámbitos de ejecución, utilizar alguna estrategia para manejar la tabla en esos ámbitos:

• Una única tabla con información de ámbito.

• Una pila de tablas.

• RECUERDE: Cuando hay ámbitos anidados, desde dentro de un ámbito se puede acceder sólo 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 símbolos) con el mismo nombre dentro de diferentes ámbitos, el análisis del compilador debe hacerse partiendo del ámbito más interno.

Page 7: S9.1-Tabla de tipos.pdf

Tabla de tipos

• Para implementar la tabla de tipos (o símbolos) suelen utilizarse tablas hash:

• Tienen el tiempo de acceso más reducido.

• Los campos mínimos necesarios para la tabla de tipos son:

• Nombre: identificador del tipo (Ej. En Java podría 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).

• Dimensión: número de elementos de un tipo básico que están contenidos en un tipo compuesto. Por ejemplo, para un tipo int la dimensión es 1, pero para un tipo int[5], la dimensión es de 5.

Page 8: S9.1-Tabla de tipos.pdf

Tabla de tipos

• Los campos mínimos necesarios para la tabla de tipos son (cont…):

• Mínimo: Para la definición de vectores (a veces definida por el programador, Ej. Pascal).

• Máximo: Para la definición de vectores (a veces definida por el programador, Ej. Pascal).

• Ámbito: Si se utiliza una única tabla, el ámbito es un número entero que, normalmente, comienza en 0.

• Es habitual la inclusión de un código (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 mayúsculas.

Page 9: S9.1-Tabla de tipos.pdf

Tabla de tipos

• Ejemplo: Implementación de una tabla de tipos de un lenguaje sensible a las mayúsculas cuyos tipos primitivos son int y boolean.

• Ver la clase Tipo, que implementa el código relacionado con un tipo particular del lenguaje.

• Ver la clase TablaDeTipos, que implementa la tabla y su estrategia de gestión.

Page 10: S9.1-Tabla de tipos.pdf

Tabla de tipos

• Ejemplo de utilización:

• Supongamos un subconjunto del lenguaje Pascal que permite, además de los tipos primitivos integer y boolean, la definición de tipos vector y registro.

• Supongamos que tenemos el siguiente código:

Page 11: S9.1-Tabla de tipos.pdf

Tabla de tipos

• Ejemplo de utilización:

• Supongamos que este lenguaje es sensible a las mayúsculas (aunque Pascal no lo sea).

• Veamos el procesamiento del programa y la gestión de la tabla de tipos:

Page 12: S9.1-Tabla de tipos.pdf

Tabla de tipos

• Inicialización de la tabla:

Código Nombre TipoBase Padre Dimensión Mínimo Máximo Ámbito

0 integer -1 -1 1 -1 -1 0

1 boolean -1 -1 1 -1 -1 0

Page 13: S9.1-Tabla de tipos.pdf

Tabla de tipos

• Procesamiento de las líneas 1 y 2 (en secuencia):

Código Nombre TipoBase Padre Dimensión Mínimo Máximo Ámbito

0 integer -1 -1 1 -1 -1 0

1 boolean -1 -1 1 -1 -1 0

2 vector 0 -1 10 0 9 0

Page 14: S9.1-Tabla de tipos.pdf

Tabla de tipos

• Procesamiento de la línea 3:

Código Nombre TipoBase Padre Dimensión Mínimo Máximo Ámbito

0 integer -1 -1 1 -1 -1 0

1 boolean -1 -1 1 -1 -1 0

2 vector 0 -1 10 0 9 0

3 registro -1 -1 -1 -1 -1 0

Page 15: S9.1-Tabla de tipos.pdf

Tabla de tipos

• Procesamiento de las líneas 4 y 5 (en secuencia):

Código Nombre TipoBase Padre Dimensión Mínimo Máximo Ámbito

0 integer -1 -1 1 -1 -1 0

1 boolean -1 -1 1 -1 -1 0

2 vector 0 -1 10 0 9 0

3 registro -1 -1 2 -1 -1 0

4 x 0 3 1 -1 -1 0

5 y 1 3 1 -1 -1 0

Page 16: S9.1-Tabla de tipos.pdf

Tabla de tipos

• Procesamiento de las líneas 6, 7 y 8 (en secuencia):

Código Nombre TipoBase Padre Dimensión Mínimo Máximo Ámbito

0 integer -1 -1 1 -1 -1 0

1 boolean -1 -1 1 -1 -1 0

2 vector 0 -1 10 0 9 0

3 registro -1 -1 2 -1 -1 0

4 x 0 3 1 -1 -1 0

5 y 1 3 1 -1 -1 0

6 vector 1 -1 9 0 8 1

Page 17: S9.1-Tabla de tipos.pdf

Tabla de tipos

• Procesamiento de la línea 9:

Código Nombre TipoBase Padre Dimensión Mínimo Máximo Ámbito

0 integer -1 -1 1 -1 -1 0

1 boolean -1 -1 1 -1 -1 0

2 vector 0 -1 10 0 9 0

3 registro -1 -1 2 -1 -1 0

4 x 0 3 1 -1 -1 0

5 y 1 3 1 -1 -1 0

6 vector 1 -1 9 0 8 1

7 r1 -1 -1 -1 -1 -1 1

Page 18: S9.1-Tabla de tipos.pdf

Tabla de tipos

• Procesamiento de las líneas 10 y 11 (en secuencia):

Código Nombre TipoBase Padre Dimensión Mínimo Máximo Ámbito

0 integer -1 -1 1 -1 -1 0

1 boolean -1 -1 1 -1 -1 0

2 vector 0 -1 10 0 9 0

3 registro -1 -1 2 -1 -1 0

4 x 0 3 1 -1 -1 0

5 y 1 3 1 -1 -1 0

6 vector 1 -1 9 0 8 1

7 r1 -1 -1 2 -1 -1 1

8 y 0 7 1 -1 -1 1

9 z 0 7 1 -1 -1 1

Page 19: S9.1-Tabla de tipos.pdf

Tabla de tipos

• Procesamiento de las líneas 12 y 13 (en secuencia):

Código Nombre TipoBase Padre Dimensión Mínimo Máximo Ámbito

0 integer -1 -1 1 -1 -1 0

1 boolean -1 -1 1 -1 -1 0

2 vector 0 -1 10 0 9 0

3 registro -1 -1 2 -1 -1 0

4 x 0 3 1 -1 -1 0

5 y 1 3 1 -1 -1 0

6 vector 1 -1 9 0 8 1

7 r1 -1 -1 2 -1 -1 1

8 y 0 7 1 -1 -1 1

9 z 0 7 1 -1 -1 1

Page 20: S9.1-Tabla de tipos.pdf

Tabla de tipos

• Procesamiento de la línea 14:

Código Nombre TipoBase Padre Dimensión Mínimo Máximo Ámbito

0 integer -1 -1 1 -1 -1 0

1 boolean -1 -1 1 -1 -1 0

2 vector 0 -1 10 0 9 0

3 registro -1 -1 2 -1 -1 0

4 x 0 3 1 -1 -1 0

5 y 1 3 1 -1 -1 0

Page 21: S9.1-Tabla de tipos.pdf

Tabla de tipos

• Procesamiento de las líneas 15 y 16:

• Resultado: No existe la tabla de tipos (se puede eliminar).

Page 22: S9.1-Tabla de tipos.pdf

Dimensión y acceso a los elementos de los tipos

• Cálculo de la dimensión:

• En los tipos básicos no hay problema (se conoce de antemano).

• En los tipos estructurados depende de la dimensión de cada uno de sus componentes.

• Cuando hay varios grados de anidamientos los cálculos se realizan de manera recursiva.

• Acceso a los elementos de un tipo estructurado:

• El acceso de los elementos depende de la dimensión de los tipos.

Page 23: S9.1-Tabla de tipos.pdf

Dimensión y acceso a los elementos de los tipos

• Ejemplo: Suponga el siguiente código:

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;

Page 24: S9.1-Tabla de tipos.pdf

Dimensión y acceso a los elementos de los tipos

• Del ejemplo anterior, calcule:

1. La dimensión de vector

2. La dimensión de registro1 y registro2

3. La posición del elemento 6 del tipo vector

4. La posición de registro1.y[6]

5. La posición de registro1.s

6. La posición de registro2.k.y[6]