Creación de Tablas de Tokens

16
ANÁLISIS LÉXICO Creació n de Tablas de T okens

Transcript of Creación de Tablas de Tokens

ANLISIS LXICOCreacin de Tablas de TokensTabla de Smbolos Tambin se la llama tabla de nombres o tabla de identificadores. Es una estructura de datos que contiene un registro para cada identificador utilizado en el cdigo fuente, con campos que contienen informacin relevante para cada smbolo (atributos).Es una estructura de datos que usa el proceso de traduccin de un lenguaje de programacin, por un compilador o un intrprete, donde cada smbolo en el cdigo fuente de un programa est asociado con informacin tal como la ubicacin, el tipo de datos y el mbito de cada variable, constante o procedimiento.FUNCIONES PRINCIPALES:Efectuar chequeos semnticos. Generacin de cdigo. Ambas funciones se realizan insertando o recuperando desde la tabla de smbolos los atributos de las variables usadas en el programa fuente. Estos atributos, tales como: el nombre, tipo, direccin de almacenamiento y dimensin de una variable, usualmente se encuentran explcitamente en las declaraciones o ms implcitamente a travs del contexto en que aparecen los nombres de variables en el programa.Muchos compiladores configuran una tabla en el momento del anlisis lxico y le agregan informacin de los smbolos utilizados durante el anlisis semntico, cuando se conoce mas informacin sobre las variables. La organizacin de la tabla de smbolos variar dependiendo de las limitaciones de memoria y tiempo de acceso. Una tabla de smbolo provee la siguiente informacin: Da un identificador. Que informacin es asociada con un nombre. Como se asocia esa informacin con un nombre. Como acceder esta informacin.La tabla almacena la informacin que en cada momento se necesita sobre las variables del programa, informacin tal como: nombre, tipo, direccin de localizacin, tamao, etc. La gestin de la tabla de smbolos es muy importante, ya que consume gran parte del tiempo de compilacin. De ah que su eficiencia sea crtica. Tambin sirve para guardar informacin referente a los tipos creados por el usuario, tipos enumerados y, en general, a cualquier identificador creado por el usuario.Registro de la tabla de smbolos (symbol-table record)

Lista de Atributos de la Tabla de TokensNombre de identificador. Direccin en tiempo de ejecucin a partir de la cual se almacenar el identificador si es una variable. En el caso de funciones puede ser la direccin a partir de la cual se colocar el cdigo de la funcin. Tipo del identificador. Si es una funcin, es el tipo que devuelve la funcin. Nmero de dimensiones del array, o nmero de miembros de una estructura o clase, o nmero de parmetros si se trata de una funcin. Tamao mximo o rango de cada una de las dimensiones de los arrays, si tienen dimensin esttica. Tipo y forma de acceso de cada uno de los miembros de las estructuras, uniones o clases. Tipo de cada uno de los parmetros de las funciones o procedimientos. Valor del descriptor del fichero y tipo de los elementos del fichero en el caso de lenguajes basados en ficheros homogneos. Nmero de la lnea del texto fuente en que se hace referencia a la variable. Campo puntero para construir una lista encadenada que permita listar las variables en orden alfabtico en las fases de depuracin de cdigo.

Almacenamiento del nombre Se puede hacer con o sin lmite. Si lo hacemos con lmite, emplearemos una longitud fija para cada variable, lo cual aumenta la velocidad de creacin, pero limita la longitud en unos casos, y desperdicia espacio en la mayora. Otro mtodo es habilitar la memoria que necesitemos en cada caso para guardar el nombre.Direccin de memoria donde se guardarEsta direccin es necesaria, porque las instrucciones que referencian a una variable deben saber donde encontrar el valor de esa variable en tiempo de ejecucin, tambin cuando se trata de variables globales. En lenguajes que no permiten recursividad, las direcciones se van asignando secuencialmente a medida que se hacen las declaraciones.En lenguajes con estructuras de bloques, la direccin se da con respecto al comienzo del bloque de datos de ese bloque, (funcin o procedimiento) en concreto. El nmero de dimensiones de una variable array, o el de parmetros de una funcin o procedimiento junto con el tipo de cada uno de ellos es til para el chequeo semntico. Aunque esta informacin puede extraerse de la estructura de tipos, para un control ms eficiente, se puede indicar explcitamente. El tipo tambin se almacena en la tabla. Tambin podemos guardar informacin de los nmeros de lnea en los que se ha usado un identificador, y de la lnea en que se declar.

Consideraciones sobre la Tabla de SmbolosLa tabla de smbolos puede iniciarse con cierta informacin til, tal como: Constantes: PI, E, etc. Funciones de librera: EXP, LOG, etc. Palabras reservadas. Esto facilita el trabajo al lexicogrfico, que tras reconocer un identificador lo busca en la tabla de smbolos, y si es palabra reservada devuelve un token asociado.Conforme van apareciendo nuevas declaraciones de identificadores, el analizador lxico, o el analizador sintctico segn la estrategia que sigamos, insertar nuevas entradas en la tabla de smbolos, evitando siempre la existencia de entradas repetidas. El analizador semntico efecta las comprobaciones sensibles al contexto gracias a la tabla de smbolos, y el generador de cdigo intermedio usa las direcciones de memoria asociadas a cada identificador en la tabla de smbolos, al igual que el generador de cdigo.El optimizador de cdigo no necesita hacer uso de ella .

La tabla de smbolos contiene informacin til para poder compilar, por tanto existe en tiempo de compilacin, y no de ejecucin.

Sin embargo, en un intrprete, dado que la compilacin y ejecucin se producen a la vez, la tabla de smbolos permanece todo el tiempo.

Ejemplo Vamos a hacer un intrprete. Recordar que en un intrprete la entrada es un programa y la salida es la ejecucin de ese programa. Suponemos que queremos hacer las siguientes operaciones: a = 7 * 3 b = 3 * a En la segunda instruccin necesitamos saber cuanto vale a; es decir el valor de a debe estar guardado en algn sitio. Para ello utilizaremos una lista de pares:

De forma que cuando nos encontremos con la instruccin a = 7 * 3, miremos en la tabla, si no est a en la tabla, creamos un nodo para introducirla

A continuacin nos encontramos con b = 3 * a. Qu es a? Busco en la tabla de smbolos y vemos que el valor de a es 21. b = 3 * a Ahora buscamos b en la tabla de smbolos y como no est lo creamos:

Si ejecutramos ahora la instruccin: a = a + b Tendramos a a y b en la tabla de smbolos con lo cual solo tendramos que modificar el valor de a.

Bibliografahttp://www.angelfire.com/planet/ispr/Unidad3/3.4.htmhttp://10380054.galeon.com/u5.htmhttp://www.escet.urjc.es/~ci/material/lexico.pdf