Sunteți pe pagina 1din 4

TABLA DE SIMBOLOS La tabal de smbolos lleva el registro de la informacin sobre el mbito y el encale de los nombres, dicha tabla es examinada

cada vez que se encuentra un nombre en el texto fuente. Si se descubre n nuevo nombre o informacin de alguno existente, se guardan los cambios en la tabla. La tabla de smbolos maneja mecanismos para agregar nuevos registros y tambin para realizar consultas, entre esos mecanismos se encuentran las listas lineales y las tablas de dispersin. La primera es ms fcil de realizar, aunque puede resultar poco eficiente; por el contrario los esquemas de dispersin tienen un mejor rendimiento pero de igual manera requiere de mayor esfuerzo en la programacin y tambin gasto de memoria. Entradas de la tabla de smbolos Cada entrada de la tabla corresponde a la declaracin de un nombre y puede implantarse como un registro que conste de una secuencia de palabras consecutivas. El formato de las entradas no tiene que ser uniforme porque la informacin de un nombre depende del uso de dicho nombre. Cabe mencionar que no toda la informacin se introduce en la tabla de smbolos. Las palabras clave se introducen y el analizador lxico busca en la tabla de smbolos para determinar si se ha encontrado una palabra clave reservada o un nombre. Caracteres dentro de un nombre Las cadenas de caracteres suelen ser difciles de manejar, debido a esto los compiladores utilizan el lexema. Este es necesario cuando por primera vez se establece la entrada de la tabla de smbolos y cuando se realiza una bsqueda. El lexema que representa un nombre debe almacenarse para garantizar los usos del mismo nombre y registrarlo en la tabla de smbolos. Informacin sobre la asignacin de memoria En este subtema existen varios puntos a considerar, para empezar hay que mencionar que la tabla de smbolos mantiene la informacin acerca de las posiciones de memoria que se ligaran a nombres. Sin embargo hay que tener en cuenta el cdigo objeto, si este fue generado en lenguaje ensamblador, el ensamblador se encarga de las posiciones de memoria para los distintos nombres; pero si el compilador genera cdigo maquina, entonces se debe investigar acerca de la posicin de cada objeto de datos relativo a un origen.

La estructura de datos tipo lista para las tablas de smbolos Como ya se ha mencionado anteriormente la forma mas sencilla de implantar una estructura de datos es una lista lineal de registros. En ella se usan matrices para almacenar la informacin asociada. La bsqueda de un nombre se realiza desde el final hasta el principio de la matriz y cuando se localiza dicho nombre, la informacin se localiza en palabras situadas a continuacin. Construir una entrada y buscar el nombre son operaciones independientes. Si la tabla contiene n nombres, El trabajo necesario para insertar un nombre nuevo es constante si se realiza la insercin sin comprobar si el nombre ya se encuentra en la tabla. La estructuracin proporciona datos valiosos acerca de donde emplea su tiempo un compilador y puede utilizarse para decidir si se utiliza demasiado tiempo en buscar en listas lineales. Tablas de dispersin Conocida tambin como dispersin abierta donde abierta se refiere a que no hay lmite al nmero de entradas que pueden construirse en la tabla. Este esquema permite la realizacin de e consultas sobre n nombres en un tiempo proporcional. Cada registro en la tabla de smbolos aparece en solo una lista. La memoria para los registros puede obtenerse de una matriz de registros. Tambin se pueden usar las ventajas para la asignacin dinmica de memoria aunque con esto se pierde deficiencia. Representacin de la informacin sobre el mbito Las reglas del mbito del lenguaje fuente determinan que declaracin es la apropiada. Un enfoque sencillo consiste en mantener una tabla de smbolos distinta para cada mbito. Asimismo pude asociar los nombres locales de un procedimiento al nodo correspondiente al procedimiento en un rbol sintctico del programa. Con este enfoque la tabla de smbolos se integra a l a representacin inmediata de la entrada. Basura La memoria asignada dinmicamente puede volverse inaccesible. Si esta no puede referirse, se denomina basura. Referencia suspendida

Puede surgir una complicacin adicional con la designacin explicita. Puede producirse una referencia suspendida, es decir, se hace referencia a memoria desasignada. Las referencias suspendidas ocurren si se produce la des asignacin antes de la ultima referencia, mientras que existe basura si se produce la ultima referencia antes de la des asignacin. Tcnicas para la asignacin bsica de la memoria Por lo general este proceso depende de la forma en que se desasigne la memoria. Si esto se hace de manera implcita el paquete de apoyo es el encargado de cuando un bloque de memoria deja de ser necesario. Si se hace de manera explicita por el programador, el compilador tendr menos trabajo. Asignacin explicita de bloques de tamao fijo Esta es la forma mas fcil de hacer la asignacin, adems se hace de manera rpida y tambin puede incluirse la des asignacin. La asignacin consiste en sacar un bloque de la lista y la des asignacin en devolver el bloque a la lista. Asignacin explicita de bloques de tamao variable Cuando se asignan y desasignan bloques, la memoria se puede fragmentar. La fragmentacin no trae consecuencias si los bloques son de tamao fijo, pero si son de tamao variable muy probablemente los habrn. Un mtodo para signar bloques de tamao variable es el mtodo del primer ajuste. Este consiste en buscar un bloque disponible que sea lo suficientemente grande y si este se excede, la cantidad de memoria restante se convierte en un nuevo bloque. Des asignacin implcita Consiste en saber por parte del paquete de ejecucin, cuando un bloque de memoria ha dejado de funcionar. Lo anterior se hace en cooperacin con el programa de usuario. Para este proceso, existen problemas que hacen un poco complejo la situacin, entre esos problemas podemos mencionar los lmites del bloque, ya que son importantes para determinar si puede ser utilizado debido a su tamao.

El segundo problema es la disponibilidad del bloque. Esto puede determinarse, ya que si un bloque esta en uso, es posible que el programa de usuario haga referencia a la informacin contenida en el bloque. Existen dos enfoques para realizar la des asignacin implcita, las cuales se mencionan a continuacin: Cuenta de referencias: se lleva la cuenta del nmero de bloques que apuntan directamente al presente bloque. Si en algn momento la cuenta disminuye a 0, entonces se puede desasignar el bloque porque no se le puede hacer referencia. Tcnicas de marca: consiste en suspender temporalmente la ejecucin del programa de usuario y utilizar los apuntadores congelados para determinar los bloques que estn siendo utilizados. Este enfoque exige conocer todos los apuntadores.

S-ar putea să vă placă și