Professional Documents
Culture Documents
Agenda
Introduccin Contenidos de la Tabla de Smbolos Operaciones con la Tabla de Smbolos Organizacin de la Tabla de Smbolos Lenguajes no estructurados en bloques Lenguajes estructurados en bloques Tablas de smbolos orientadas a objetos
Introduccin y Contenidos
Introduccin
El A. Sintac. se limita a comprobar, mediante una GLC, que un identificador forma parte de una expresin. Una vez comprobado que la sentencia es sintcticamente correcta, el A. Sem. deber verificar que el identificador empleado como parte de Las Tablas de Smbolos son estructuras de datos que almacenan toda la una expresin haya sido declarado informacin de los identificadores del lenguaje fuente. previamente. Para llevar a cabo esta tarea, es tpica la utilizacin de una estructura de datos adicional denominada tabla de smbolos.
En un compilador de varias pasadas, la TS se crea durante el anlisis lxico y sintctico (pasada 1). En los compiladores modernos la TS se crea durante el primer recorrido del rbol AST, una vez creado ste mediante al analizador sintctico (pasada 2). El AL separa el programa fuente en tokens que compara con las palabras reservadas. Si el token comparado no es una palabra reservada se asume que es un identificador y durante el
Figura 1
Compilador de Varias Pasadas
Figura 2
Tabla de smbolos en un compilador de varias pasadas con generacin de AST
Otros Atributos
Utilizan informacin de la TS en tiempo de
ejecucin, por lo que las distintas implementaciones de los compiladores incorporan informacin adicional en la TS para estas herramientas que acompaan a los compiladores. Las listas de referencias cruzadas son otros tipos de atributos que proporcionan una ayuda Identificador Tipo Dimensin Declarada en importante cuando se est en fase de Referencias depuracin. anho int 0 5 11, 23, 25
b companhia forma1 m real int char proc 0 1 2 0 5 2 4 6 10, 11, 13, 23 9, 14, 25 36, 37, 38 17, 21
Operaciones y Organizacin
Se accede al rbol a travs del nodo raz (nodo ms alto). El proceso de Puntero bsqueda se realiza descendiendo Identificad Dimensi Otros Posicin Tipo n atributos Izquierdo Derecho desde el or nodo raz hasta el nodo 1 1 0 2 5 buscadofirst hasta un campo de tipo o 2 b 1 0 3 4 punteroanhio nulo, que se0 denota por 00. 3 1 0
4 5 6 7 companhia m forma1 x3 2 6 3 1 1 0 2 0 0 6 0 0 0 7 0 0
Se llama subrbol izquierdo de un nodo a la parte del rbol que contiene todos
TS con Estructura en rbol (AVL) binario, todo nodo situado en un subrbol En un rbol
izquierdo precede alfabticamente a la raz del subrbol. Todo nodo situado en un subrbol derecho sigue alfabticamente a la raz del subrbol. Por ejemplo, si se desea insertar un registro de la variable cuenta en el rbol del ejemplo anterior, se llega al rbol de la figura. Se observa que se inserta como una hoja del rbol a la derecha de la variable companhia.
Esta estructura se cre con los registros introducidos por el orden: first, b, anhio, companhia, m, forma1 y x3 o tambin: first, b, m, anhio, companhia, forma1 y x3 Sin embargo si el orden de insercin es: forma1, b, companhia, anhio, m, x3, y first
Es obvio que en el caso anterior la estructura del rbol binario ha n +1 L I = con una LMI de: M degenerado en una lista 2
Esta situacin es la que ocurre en los rboles binarios equilibrados ptimos. En tales estructuras las distancias (longitud de las trayectorias) de la raz a cualquiera de los nodos incompletos del rbol difiere como mximo en una unidad. Desafortunadamente, el principal problema que se presenta en los rboles binarios equilibrados ptimos, se produce en la insercin de registros en la estructura.
rboles AVL
Un rbol AVL es un rbol binario cuyos nodos estn en uno de los estados siguientes: Un nodo es pasado a izquierda (leftheavy) si la longitud de sus trayectorias en el subrbol izquierdo tienen una unidad ms que las del subrbol derecho. Lo denotaremos por L. Un nodo est equilibrado si la longitud de sus trayectorias en los dos subrboles son iguales. Lo denotaremos
Desequilibrado
rboles AVL
Stone demostr que la longitud de camino mxima de un rbol AVL de n nodos es: 1.5 log(n + 1) Knuth hace el mismo clculo con algunas suposiciones empricas y obtiene la siguiente expresin: log(n + 1) + const
Conceptos
Espacio de nombres (zona de nombres) Tambin llamado espacio de identificacin o espacio de claves .Es el conjunto K de los nombres de las variables que pueden aparecer en un programa, las cuales estn formados por caracteres alfanumricos y especiales que son muy adecuados para manejarse con operaciones aritmticas o lgicas.
Conceptos
Funcin Hash (o transformacin de claves). Es una aplicacin H del conjunto K (de claves) en el conjunto A (de localizaciones de registros). La funcin hash H toma el nombre de una identificador y calcula la direccin de la Letra 0 1 9 A B Z # + tabla en que se almacenan los atributos Cdigo 1 2 10 11 12 36 37 38 39 de dicho identificador. Esta funcin H realiza los clculos por medio de operaciones aritmticas o lgicas con el
Mtodos Hash
POSICIONES ALTERNATIVAS Cuando a varias direcciones diferentes se les asigna la misma direccin se dice que ha ocurrido una colisin. Al proceso de generar direcciones alternativas se le llama manejo de colisiones o resolucin de colisiones (collision resolution). MTODO HASH CUADRTICO Este mtodo se basa en multiplicar la clave por s misma y extraer varios dgitos centrales que constituyen la
Mtodos Hash
MTODO DE REDUCCIN Consiste en partir la clave en grupos de dgitos con el mismo nmero de dgitos excepto el ltimo grupo que puede tener un nmero menor. Los distintos grupos de dgitos se suman excepto el ltimo, pudindose dar la vuelta al orden de los dgitos. Por ejemplo, sea la clave 18724965321, si se divide en grupos de tres dgitos, se tiene: 187 249 653 21
Mtodos Hash
MTODO DEPENDIENTE DE LA LONGITUD Utiliza la longitud del nombre de la variable en conjunto con alguna parte del nombre para determinar una direccin de la tabla directamente. En otros casos se calcula una clave intermedia que puede usar. Por ejemplo: sea la variable ID#1, se toma el cdigo decimal del primero y ltimo carcter, se suman y luego se
Manejo de Colisiones
Es el suceso que se produce cuando se asignan dos claves a la misma direccin. Cundo ocurre esto se calcula una direccin alternativa para la segunda clave, llamndose a este proceso manejo de colisiones. Las dos tcnicas ms utilizadas para el manejo de colisiones son: Direccionamiento vaco o hash cerrado Encadenamiento directo o hash abierto
el
siguiente lugar de la tabla hasta encontrar la variable buscada o una posicin vaca. Cuando se llega al final de la tabla se pasa al primer lugar de la tabla y se contina buscando. Si se llega al lugar de partida sin encontrar la variable buscada entonces no est en la tabla. Si no se encuentra espacio para introducirla es que la tabla est llena. La desventaja de que los elementos tienden a agruparse alrededor de las
1 2
Inspeccin Aleatoria
Consiste en generar posiciones aleatorias en vez de las posiciones ordenadas que se generaban en la inspeccin lineal. Se genera m posiciones aleatorias entre 1 y m. La tabla se considera completa cuando se repite el nmero generado. Ntese que la generacin es cclica. R(y) = (y + c) mod n, para todo c y m PESI donde y es la direccin inicial generada
Se entiende por lenguaje estructurado en bloques a todo lenguaje con estructura de bloques o mdulos que a su vez puede contener submdulos anidados y de manera que cada submdulo pueda contener un conjunto de identificadores con mbito local. Un identificador declarado dentro de un mdulo A es accesible dentro del mdulo a no ser que el mismo nombre del identificador se redefina dentro del
TEST1, F, J, M2, M1, NAME, X, IND X, Y TEST1, F, X, IND Reset BLK3 J, M2, M1, NAME, X, Y J, M2, M1, NAME, X, Y, Reset BLK1 TEST1, F, X,IND
T abla de Smbolos con Estructura Hash Implementadas enimposible utilizar A primera vista parece Pilas
transformaciones de claves para lenguajes estructurados en bloques, pues las variables de un bloque deben de estar agrupadas y las funciones hash no preservan ningn orden. En este apartado se utilizarn funciones hash que usan la tcnica de hash abierto para resolver los problemas de colisiones, por ser en general ms ventajoso tal como se estudi
T abla de Smbolos con Estructura Hash Nombre del Identificador Direccin Implementadas en Pilas1 X
M1 NAME IND J TEST1 F Y M2 1 3 5 5 6 8 8 11
Representacin OO de Smbolos y Tipos en Compiladores de Una Pasada Hay dos lenguajes implicados que
pueden ser orientados a objetos: El lenguaje a compilar El lenguaje de implementacin del compilador
Tabla de tipos, que es la que guarda la estructura de tipos definida en el programa fuente: las clases, las interfaces, los tipos bsicos, TablaTipos etc. insert()
search()
La Jerarqua de Smbolos
Describe todos los posibles smbolos que pueden aparecer en el cdigo fuente. A partir de la tabla de smbolos se accede a estos smbolos. Cada smbolo tiene tipo y debe poderse acceder a dicho tipo a travs del smbolo. El mtodo de acceso puede ser representado como en este caso por una agregacin.
Jerarqua de Smbolos
Diagrama de clases UML de la jerarqua de smbolos
Simbolo nombre : String direccion : String getTipo() : Tipo getNombre() : String getDireccion() : String
+tiene tipo
Tipo
VariableLocal
Parametro
Campo
Propiedad
Atributo
Jerarqua de Smbolos
Versin simplificada de la jerarqua de smbolos
Haga clic en el icono para agregar una TablaSimbolos insert() imagen search()
set() reset()
nombre
SimboloGenerico nombre : String direccion : String getTipo() : Tipo getNombre() : String getDireccion() : String
+tiene tipo
Tipo
La Jerarqua de Tipos
Tenemos una jerarqua de tipos donde pueden estar todos los tipos bsicos del lenguaje y los tipos definidos por el usuario (con typedef, clases, etc.). En el momento en que el cdigo comienza a describir clases, arrays, mtodos, interfaces, etc. Va creando los nuevos tipos y metindolos en la tabla.
Jerarqua de Tipos
Jerarqua y tabla de tipos
TablaTipos
Sim bolo
+ tiene
tipo + atributo
Tipo
+ cam po
Constructor
Arreglo
+ tipo
Cla se
n + extiende n
Interfaz
nom bre
n + extiende n
Funcion
nom bre
Registro
nom bre
Puntero
+ tipo
+ contiene
+ contiene
Jerarqua de Tipos
La clase contiene mtodos y atributos
Clase
nombre +contiene
n +extiende n +metodo
Funcion
+valor retorno posicion
+contiene
Jerarqua de Tipos
Relacin cualificada y atribuida para determinar el componente de la clase y los atributos.
+contiene nombre
Clase
n +extiende n
Jerarqua de Tipos
La herencia se implementa mediante interfaces y clases de manera que las interfaces pueden heredar entre ellas y las clases pueden heredar de otras clases o implementar interfaces.
Clase
n
+extiende n
Interfaz +extiende
n n
En los siguientes prrafos se muestra el trozo de cdigo que se desea compilar para ver 17: smbolos. 1: forward funciona su tabla depublic class TabSimb como class TabSimb
2: { 3: public int procesa (int k); 4: public static void main (); 5: } 6: 7: class TSdos 8: { 9: private static int r; 10: 11: public static void m (TabSimb ts, int g) 12: { 13: ts.procesa(g); 14: } 15: } 16: 18: { 19: double p; 20: 21: public int procesa (int k) 22: { 23: int m; 24: double d = k * m; 25: p = 2 * d; 26: return d; 27: } 28: 29: public static void main () 30: { 31: TabSimb t = new TabSimb(); 32: TSdos.m(ts,7); 33: } 34: }
Funcionamiento y Acceso a la TS
Tipos de Usuario
1: struct Concepto { 2: 3: 4: 5: }; 6: 7: main() { 8: int i; int cantidad; String descrip; float precio;
Tipos de Usuario
rbol AST generado por el analizador sintctico para el ejemplo
Tipos de Usuario
Insercin del tipo Struct
Tipos de Usuario
Referencias de declaracin y tipo en el rbol AST para el tipo Struct
Tipos de Usuario
Declaracin de arreglos
Declaraciones Forward
Declaracin de prototipos