COMPILADORES-Tabla de Simbolos

34
UNIVERSIDAD NACIONAL DEL CALLAO FACULTAD DE INGENIERIA DE INDUSTRAL Y DE SISTEMAS ESCUELA PROFESIONAL DE INGENIERIA DE SISTEM AS CURSO : COMPILADORES E INTERPRETES TEMA : TABLA DE SIMBOLOS CATEDRATICO : EDDIE CHRISTIAN MALCA VICENTE ALUMNOS : ALVARES ROMERO, JOSUE LEON MEZA, LILIAN ROSARIO MARCELO GONZALES, DIEGO

Transcript of COMPILADORES-Tabla de Simbolos

Page 1: COMPILADORES-Tabla de Simbolos

UNIVERSIDAD NACIONAL DEL CALLAO

FACULTAD DE INGENIERIA DE INDUSTRAL Y DE SISTEMAS

ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

CURSO : COMPILADORES E INTERPRETES

TEMA : TABLA DE SIMBOLOS

CATEDRATICO : EDDIE CHRISTIAN MALCA VICENTE

ALUMNOS : ALVARES ROMERO, JOSUE LEON MEZA, LILIAN ROSARIOMARCELO GONZALES, DIEGO

Page 2: COMPILADORES-Tabla de Simbolos
Page 3: COMPILADORES-Tabla de Simbolos
Page 4: COMPILADORES-Tabla de Simbolos
Page 5: COMPILADORES-Tabla de Simbolos

El compilador traduce el código escrito en un idioma a otro idioma

sin cambiar el sentido del programa. También está previsto que un compilador debe hacer el

código de destino eficaz y optimizado en términos de tiempo

y espacio.

Page 6: COMPILADORES-Tabla de Simbolos

ESTRUCTURA DE UN COMPILADOR

Page 7: COMPILADORES-Tabla de Simbolos

TABLA DE SIMBOLOSLa tabla de símbolos es una importante

estructura de datos creada y mantenida por los compiladores con el fin de almacenar información acerca de la ocurrencia de

diversas entidades, tales como nombres de variables, nombres de funciones, objetos,

clases, interfaces, etc. La tabla de símbolos se utiliza en el análisis y la síntesis de un

compilador.

Page 8: COMPILADORES-Tabla de Simbolos

o Para almacenar los nombres de todas las entidades de forma estructurada en un solo lugar.

o Para verificar si se ha declarado una variable.o Comprobación del tipo de implemento, revisando si las

expresiones en el código fuente son semánticamente correctas.

o Para determinar el alcance de un nombre (alcance de la resolución).

o Una tabla de símbolos puede ser lineal o una tabla hash.o Una tabla de símbolos se puede implementar en una de las

siguientes formas:– Lineal (ordenadas o desordenadas).– Árbol de búsqueda binaria.– Tabla Hash.

Page 9: COMPILADORES-Tabla de Simbolos

NECESIDAD DE LA TABLA DE SIMBOLOSLos compiladores utilizan una gramática libre de contexto para describir la sintaxis de lenguaje y una fase de análisis

semántico posterior para restringir las sentencias que “semánticamente” no pertenecen al lenguaje.

El analizador sintáctico se limita a comprobar, mediante una gramática libre de contexto, que un identificador forma parte

de un expresión. Luego si la sentencia es sintácticamente correcta, el analizador semántico deberá verificar que el

identificador empleado haya sido declarado . Para llevar a cabo esta tarea es necesaria la utilización de una

estructura de datos denominada tabla de símbolos. Esta poseerá una entrada por cada identificador declarado en el

contexto que se está analizando.

Page 10: COMPILADORES-Tabla de Simbolos

EJEMPLOExpresión:

Fuerza = Masa * Aceleración<id,1> < = > <id,2> < * > <id,3>

ID TOKENS

1 Fuerza

2 Masa

3 Aceleración

TOKEN 1 : FuerzaTOKEN 2 : =TOKEN 3 : MasaTOKEN 4 : * TOKEN 5 : Aceleración

Page 11: COMPILADORES-Tabla de Simbolos

OBJETIVOS DE LA TABLA DE SIMBOLOS Las TS son estructuras de datos que almacenan toda la información de los identificadores del lenguaje fuente.

Las misiones principales de la TS en el proceso de traducción son: Colaborar con las comprobaciones

semánticas. Facilitar ayuda a la generación de código.

Page 12: COMPILADORES-Tabla de Simbolos

COMPLEJIDAD TEMPORAL DE LOS ALGORITMOS

La complejidad de los algoritmos se puede estudiar estimando la dependencia entre el

tiempo que necesitan para procesar su entrada y el tamaño de ésta. El mejor rendimiento se obtiene si ambos son

independientes: el tiempo es constante.

Page 13: COMPILADORES-Tabla de Simbolos
Page 14: COMPILADORES-Tabla de Simbolos

Funciones hash

Se usará la siguiente notación para las funciones hash: sea K el conjunto de claves, sean 11 y m respectivamente las posiciones mínima y máxima de la tabla, y sea N el conjunto de los números naturales. Cualquier función hash h se define de la siguiente forma:

Page 15: COMPILADORES-Tabla de Simbolos

Funciones hash inyectivas

Page 16: COMPILADORES-Tabla de Simbolos

Funciones hash pseudoaleatorias

1. Se tira un dado con m caras.2. Se anota el valor de la cara superior (i).3. Se toma i como el valor hash para la clave k: h(k)=i.3. Se accede a la posición i de la tabla y se le asigna la información de la clave k.

1. Se tira un dado con m caras.2. Se anota el valor de la cara superior (j)3. Se define j como el valor hash para la clave k: h(k)=j.4. Se accede a la posición j de la tabla y se recupera la información almacenada en ella.

Page 17: COMPILADORES-Tabla de Simbolos

Funciones hash uniformesFunciones

Page 18: COMPILADORES-Tabla de Simbolos

Algunos valores de la función hash de multiplicación que utiliza Φ=∏y m=25. Se resaltan las colisiones.

Page 19: COMPILADORES-Tabla de Simbolos

Funciones hash de división

- m es el valor máximo de posición dentro de la tabla. Se le exige que sea primo.

Algunos valores de la función hash de división, para m=7. Se resaltan las colisiones.

Page 20: COMPILADORES-Tabla de Simbolos

Otras funciones hashEsta función hash es un algoritmo iterativo que calcula un valor auxiliar (hi) entre 0 y la longitud m de la clave id. El valor final h(id) se obtiene a partir de alguno de los bits del valor m-ésimo (hm).

• k es una constante deducida experimentalmente.• n es el tamaño de la tabla, deducido con k experimentalmente.• bits(x,j) es una función que obtiene los j bits menos significativos

del entero x.• ci es el código ASCII del carácter i-ésimo de id

Page 21: COMPILADORES-Tabla de Simbolos

Factor de cargaUn concepto muy importante en el estudio de la eficiencia es el factor de carga. Dada una tabla hash con espacio para m claves, en la que ya se han insertado n, se llama factor de carga y se representa mediante la letra λ, al cociente entre n y m.

Page 22: COMPILADORES-Tabla de Simbolos

Solución de las colisionesPuesto que se van a usar funciones hash que permiten colisiones, es necesario articular mecanismos para reaccionar frente a éstas. Aunque son muchas las alternativas posibles, en las siguientes secciones se explicarán algunas de ellas con detalle.Hash con direccionamiento abierto

Page 23: COMPILADORES-Tabla de Simbolos
Page 24: COMPILADORES-Tabla de Simbolos

Sondeo lineal

Posible estado de una tabla hash con direccionamiento abierto y sondeo lineal. Hay tres grupos de claves que colisionan, con tres, diez y nueve claves, respectivamente. La primera posición de cada grupo (por la izquierda) es la asignada por la función hash. Obsérvese que el último grupo continúa en las primeras posiciones de la tabla.

Factor de Carga Rendimiento

Page 25: COMPILADORES-Tabla de Simbolos

HASH CON ENCADENAMIENTO• Usa listas para contener las claves que

colisionan. • Para tener acceso a los datos de las claves, se

accede a la posición de colisión y luego se redirige a un nuevo vector donde se almacenan todos los valores de las llaves.

• El proceso de creación de nuevos vectores se puede realizar tantas veces como la limitación de la memoria del CPU se lo permita

Page 26: COMPILADORES-Tabla de Simbolos
Page 27: COMPILADORES-Tabla de Simbolos

TABLAS DE SÍMBOLOS PARA LENGUAJES CON ESTRUCTURAS DE BLOQUES

Hasta el momento solo se ha tratado con datos simples, pero también existen las

estructuras de datos como procedimientos o funciones.

Existen 2 métodos principales para poder manejar estructuras en una tabla hash.

Page 28: COMPILADORES-Tabla de Simbolos
Page 29: COMPILADORES-Tabla de Simbolos

USO DE UNA TABLA POR ÁMBITO

Este método consiste en usar una

tabla de Hash para cada estructura

que se defina en el código, existen 2

formas de ejecutar este método.

Page 30: COMPILADORES-Tabla de Simbolos

COMPILADORES DE UN PASO– Se utiliza una pila para almacenar las estructuras.– Cuando se abre la estructura se sitúa en la parte superior

a la estructura ya abierta (si existe).– Una vez se cierra la estructura se ejecuta una instrucción

pop donde se retira el bloque cerrado de la pila.– Lo más simple en este método es la inserción.– La complejidad reside en la búsqueda, si no se encuentra

el dato, se deberá explorar todas las tablas.

Page 31: COMPILADORES-Tabla de Simbolos
Page 32: COMPILADORES-Tabla de Simbolos

COMPILADORES DE MÁS DE UN PASO

Este método es igual al anterior, pero se diferencian en que las estructuras una

vez cerradas solo se marcan como CERRADAS y no son expulsadas de la

pila, es así como se transforma la pila en una lista de estructuras.

Page 33: COMPILADORES-Tabla de Simbolos
Page 34: COMPILADORES-Tabla de Simbolos

USO DE UNA SOLA TABLA PARA TODOS LOS ÁMBITOS

• Como su nombre lo dice hace uso de una sola tabla para almacenar todas la estructuras

• Este método busca solucionar el problema anterior que maximiza la cantidad de tablas, ocupando mucha memoria

• Este método implica guardar información adicional como :– la identificación del bloque– un apuntador hacia el bloque actual – un apuntador hacia donde se guardan los identificadores.