Sunteți pe pagina 1din 13

Universidad Nacional del Santa

Curso: Teora de Compiladores

TABLA DE SMBOLOS
La tabla de smbolos es una estructura de datos que contiene toda la informacin relativa a cada identificador que aparece en el programa fuente. Los identificadores pueden ser de variables, tipos de datos, funciones, procedimientos, etc. Evidentemente cada lenguaje de programacin tiene unas caractersticas propias que se reflejan en la tabla de smbolos. Cada elemento de la estructura de datos que compone la tabla de smbolos est formado al menos por el identificador y sus atributos. Los atributos son la informacin relativa de cada identificador. Los atributos habituales son: Especificacin del identificador: variable, tipo de datos, funcin, procedimiento, etc. Tipo: en el caso de variables ser el identificador de tipo (real, entero, carcter, cadena de caracteres, o un tipo definido previamente). En el caso de las funciones puede ser el tipo devuelto por la funcin. Los procedimientos se pueden marcar como funciones que no devuelven nada (void). Dimensin o tamao. Puede utilizarse el tamao total que ocupa una variable en bytes, o las dimensiones. As en el caso de variables simples se coloca la dimensin cero, para los arrays la dimensin del array, en el caso de estructuras (struct) o registros (record) el nmero de campos o miembros, en el caso de funciones o procedimientos se puede almacenar el nmero de parmetros, etc. Direccin de comienzo para generar el cdigo objeto. En el cdigo mquina no hay nombre de identificadores, tan slo direcciones de memoria para datos (static, stack,y heap) o para cdigo (usadas por los procedimientos y funciones). Listas de informacin adicional. Contienen informacin de tamao variable, por

Ejemplo: los tipos de los campos miembros de las estructuras o registros, los tipos de los parmetros de estructuras o uniones. Los atributos pueden variar de unos lenguajes a otros, debido a las caractersticas propias de cada lenguaje y a la metodologa de desarrollo del traductor. La tabla de smbolos se crea por cooperacin del anlisis lxico y el anlisis sintctico. El anlisis lxico proporciona la lista de los identificadores, y el anlisis sintctico permite rellenar los atributos correspondientes a cada identificador. El analizador semntico tambin puede rellenar algn atributo. El analizador semntico y el generador de cdigo obtienen de la tabla de smbolos la informacin necesaria para realizar su tarea. Las operaciones fundamentales que se realizan en la tabla de smbolos son la insercin y bsqueda de informacin. En algunos lenguajes de programacin tambin se realizan las operaciones set y reset que activan y desactivan los identificadores locales

Docente: Ing. Mirko Manrique Ronceros

~1~

Universidad Nacional del Santa

Curso: Teora de Compiladores

respectivamente. Dada la cantidad de veces que se accede a la tabla de smbolos es necesario que la estructura de datos que alberga la informacin, y los algoritmos de acceso sean optimizados al mximo. En general se utilizan mtodos hash para el manejo de las tablas de smbolos. Las tablas de smbolos constituyen el recipiente donde se almacena toda la informacin relativa al programa fuente en tiempo de compilacin y por tanto se destruyen una vez finalizada la traduccin. Tan slo hay una excepcin en el caso de que se activen opciones de depuracin (debugging), en ese caso los compiladores graban en fichero la tabla de smbolos para poder dar informacin de los identificadores usados en el programa fuente en tiempo de ejecucin. Los fabricantes de compiladores incluyen para esos casos informacin de la tabla de smbolos que emplean.

OBJETIVOS DE LA TABLA DE SMBOLOS


Las Tablas de Smbolos (en adelante TS) son estructuras de datos que almacenan toda la informacin de los identificadores del lenguaje fuente. Las misiones principales de la TS en el proceso de traduccin son: Colaborar con las comprobaciones semnticas. Facilitar ayuda a la generacin de cdigo. La informacin almacenada en la TS depende directamente del tipo de elementos del lenguaje especfico a procesar y de las caractersticas de dicho lenguaje. Habitualmente los elementos del lenguaje que requieren el uso de la TS son los distintos tipos de identificadores del lenguaje (nombres de variables, de objetos, de funciones, de etiquetas, de clases, de mtodos, etc.). La informacin relativa a un elemento del lenguaje se almacena en los denominados atributos de dicho elemento. Estos atributos tambin varan de un tipo de lenguaje a otro y de un elemento a otro. As ejemplos de atributos tales como nombre, tipo, direccin relativa en tiempo de ejecucin, dimensiones de los arrays, nmero y tipo de los parmetros de procedimientos, funciones y mtodos, tipos de acceso a los elementos de una clase (public, private, protected), etc. se recogen y se guardan en la TS. Los atributos se obtienen unas veces directamente del anlisis del programa fuente, es decir, estn en forma explcita (por ejemplo en la seccin de declaraciones del programa fuente) y otras veces los atributos se obtienen de forma implcita a travs del contexto en el que aparece el elemento en el programa fuente. En el proceso de compilacin se accede a la TS en unos determinados puntos que dependen inicialmente del nmero y la naturaleza de las pasadas del procesador de lenguaje y del propio lenguaje fuente a procesar.

Docente: Ing. Mirko Manrique Ronceros

~2~

Universidad Nacional del Santa

Curso: Teora de Compiladores

En los traductores y compiladores, las TS existen nicamente en tiempo de compilacin, aunque en depuracin (debug) pueden estar almacenadas en disco y dar informacin en tiempo de ejecucin para identificar los smbolos que se deseen inspeccionar. En los intrpretes contienen informacin en tiempo de ejecucin. Las palabras reservadas no estn en la TS.

CONTENIDOS DE LA TABLA DE SMBOLOS


Una TS se puede definir como una estructura de datos organizada en funcin de los identificadores que aparecen en el programa fuente. Aunque su nombre parece indicar una estructuracin en una tabla no es necesariamente sta la nica estructura de datos utilizada, tambin se emplean rboles, pilas, etc. Lo que la estructura debe permitir es establecer un homomorfismo entre los mbitos de utilizacin de los smbolos en el programa fuente y el modo en que aparecen en las sucesivas bsquedas en la tabla. Para ello debe manejar diferentes contextos de bsqueda que imiten los diferentes tipos de bloques del lenguaje fuente que se compila. Los smbolos se guardan en la tabla con su nombre y una serie de atributos opcionales que dependern del lenguaje y de los objetivos del procesador. Este conjunto de atributos almacenados en la TS para un smbolo determinado se define como registro de la tabla de smbolos (symbol-table record) IDENTIFICADOR companhia x3 forma1 b DIRECCIN STATIC+0 STATIC+10 STATIC+12 STATIC+13 TIPO C I B F DIMENSIN 10 0 0 3 OTROS ATRIBUTOS

Tabla 1. Tabla de smbolos sencilla.

Una forma de organizacin simple es imaginar la TS como una tabla con una serie de filas, cada fila contiene una lista de atributos que estn asociados a un identificador, tal como se muestra en la Tabla 1. Las clases de atributos que aparecen en una TS dependen de la naturaleza del lenguaje de programacin para el cual est escrito el compilador. Por ejemplo, un lenguaje de programacin puede no tener tipos, entonces el atributo tipo no necesita aparecer en la tabla. La organizacin de la TS variar segn las limitaciones de memoria y tiempo de acceso donde se implemente el compilador.

Docente: Ing. Mirko Manrique Ronceros

~3~

Universidad Nacional del Santa

Curso: Teora de Compiladores

La lista siguiente de atributos no es necesaria para todos los compiladores, sin embargo cada uno de ellos se puede utilizar en la implementacin de un compilador particular. Nombre 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 la variable est declarada. 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. Nombre del Identificador Los nombres de los identificadores deben estar siempre asociados en la TS, pues as son localizados por el analizador semntico y por el generador de cdigo. El primer problema en la organizacin de la TS es la variacin en la longitud de los nombres de los identificadores. En las primeras versiones de los lenguajes de los aos sesenta tales como el BASIC y el FORTRAN, los identificadores tenan como mximo seis caracteres significativos, el problema era mnimo y poda almacenarse el identificador completo en una longitud de campo con un tamao fijado de antemano. Sin embargo las normas ANSI e ISO de los lenguajes C, C++ y PASCAL permiten un mnimo de 31 caracteres. Si se reservase un espacio fijo de 31 caracteres, las TS que utilicen esta forma de almacenamiento gestionaran la memoria de una forma poco eficiente, aunque el acceso a las tablas es rpido. La poca eficiencia se debe a los huecos dejados por los identificadores con nombres cortos. La manera en que se implementar el nombre depender del lenguaje de programacin en que se implemente la propia TS. En los lenguajes como C y C++ se puede utilizar un campo del tipo puntero a carater (char*) y reservar la memoria dinmica necesaria en cada caso. Tambin en lenguajes como C++, Java, C#, etc. se puede utilizar directamente el tipo String (o equivalente) de la propia biblioteca del lenguaje. Otra solucin para almacenar los nombres de las variables es colocar un descriptor de cadenas de caracteres (strings) en el campo del nombre del identificador. El descriptor Docente: Ing. Mirko Manrique Ronceros ~4~

Universidad Nacional del Santa

Curso: Teora de Compiladores

contiene la posicin y longitud de los subcampos del string donde se encuentra el nombre del identificador tal y como se muestra en la Figura 1, esta forma de acceso a los identificadores es ms lenta pero puede ahorrar bastante almacenamiento.

Figura 1. Descriptor de nombres de identificadores (string).

Atributos de los Identificadores Los identificadores se describen por medio de los atributos que dependern del lenguaje que se est compilando. Algunos de estos atributos se describen en los siguientes prrafos. Direccin en Memoria (Offset) Los lenguajes de alto nivel tienen identificadores, sin embargo en cdigo mquina no existen identificadores, tan solo hay las direcciones donde estn colocados. Si el cdigo objeto que genera el compilador es de muy bajo nivel se tiene que asociar en todo momento a cada identificador su direccin de comienzo. En algunos casos puede que el cdigo objeto sea a nivel de ensamblador, en dicho caso pueden no hacer falta direcciones dado que en el ensamblador se pueden utilizar identificadores. La TS ayuda al generador de cdigo a generar el cdigo objeto, sustituyendo los identificadores por sus direcciones. Las direcciones suelen ser relativas, es decir desplazamientos (offsets) desde una direccin base. As en la Tabla 1 se han colocado STATIC+X, sealando STATIC a la direccin de comienzo de los identificadores del segmento esttico (habitualmente constantes y variables globales). El montador de enlaces (linker) es el encargado de pasar direcciones relativas a absolutas.

Docente: Ing. Mirko Manrique Ronceros

~5~

Universidad Nacional del Santa Tipo

Curso: Teora de Compiladores

El atributo tipo se almacena en la TS cuando los lenguajes a compilar tienen distintos tipos de datos definidos explcita o implcitamente. Por supuesto, los lenguajes sin tipos no tienen este atributo. Un ejemplo de tipos definidos implcitamente se da en el lenguaje FORTRAN, pues si no se asignan o se declaran previamente, todas las variables cuyo nombre comienza con I, J, K, L M son variables enteras. Todas las dems son reales. El tipo de la variable se utiliza en las comprobaciones semnticas de las sentencias. El tipo tambin se usa como indicacin de la cantidad de memoria que debe ser reservada en tiempo de ejecucin. Por ejemplo, si el tipo es integer, suele ocupar la mitad de un float. Generalmente, el tipo de una variable se almacena en forma de cdigo, as el tipo de float se puede codificar como F, integer como I, carcter como C, etc. El tamao de los tipos de datos depender de cada implementacin del lenguaje, aunque el constructor del compilador suele aprovechar al mximo las caractersticas de mximo rendimiento de la mquina objeto. Nmero de Dimensiones, de Miembros o de Parmetros Los atributos nmero de dimensiones, nmero de miembros y nmero de parmetros son importantes para la verificacin semntica. El nmero que indica la dimensin de un array tambin se utiliza como parmetro en la frmula general de clculo de la direccin de un elemento particular del array. El nmero de parmetros en la llamada a un procedimiento o funcin debe coincidir con el nmero que aparece en la declaracin del procedimiento o funcin. Dependiendo del lenguaje en que se implemente la TS, puede ser conveniente combinar los dos atributos anteriores en uno, ya que la verificacin semntica de ambos es similar. En la Tabla 1 se ha considerado que la dimensin de los identificadores simples es 0, de los arrays unidimensionales 1, de los arrays bidimensionales 2, etc Valor Mximo de las Dimensiones o Rangos de Arrays En la TS debe almacenarse el valor mximo que puede alcanzar un array, as cuando se declara una array en C o en C++, el rango de valores comienza en cero, pero debe almacenarse el nmero de elementos del array: int vector [10], matriz[20][30]; El valor 10 (nmero de elementos del array) o 9 (ltimo subndice permitido) debe almacenarse como atributo del vector, dado que es necesario para calcular la posicin de los elementos vector[i] en la generacin de cdigo. Lo mismo se puede decir de los valores 20 y 30 del array bidimensional matriz. Docente: Ing. Mirko Manrique Ronceros ~6~

Universidad Nacional del Santa

Curso: Teora de Compiladores

En lenguajes como PASCAL se permite definir un rango de valores entre los cuales varan los subndices de los arrays, as por ejemplo: VAR vector : ARRAY [10..20] OF INTEGER; matriz : ARRAY [-10..10, -25..100] OF INTEGER; En estos casos es necesario almacenar el valor inferior y superior del rango. Si el lenguaje de programacin no tiene un valor mximo de dimensiones de los arrays, es necesario definir una lista dinmica con los valores mximos o rangos de cada dimensin del array. Una solucin ms rpida, pero mucho ms limitada, es definir un tamao mximo de dimensiones de los arrays y dejar un campo de tamao fijo para almacenarlos. Esto ltimo era clsico en los compiladores de FORTRAN77, dado que en dicho lenguaje slo se permitan arrays pentadimensionales. Tipo y Forma de Acceso de los Miembros de Estructuras, Registros, Uniones y Clases El tipo de cada uno de los miembros de una estructura, unin o clase, debe ser almacenado en la TS. En el caso de clases tambin debe almacenarse la forma de acceso, as por ejemplo C++ permite las formas de acceso public, private y protected. En el caso de la declaracin de funciones amigas (friend), tambin el nombre de estas debe ir ligado a la clase. En el caso de los tipos simples, en la TS, los tipos se representan habitualmente por las constantes indicadas en el apartado 0. Sin embargo una estructura puede tener anidada otra estructura. En el caso de aparecer otras estructuras definidas previamente, se utilizar el identificador que representa a dicha estructura. Tambin puede ocurrir que tengan varias variables de un tipo estructura al cual no se le ha dado un nombre, en ese caso puede optarse por un puntero que seale donde est definida la estructura o por repetir la estructura para cada identificador. La representacin de las uniones es similar a la de las estructura, excepto en el tamao que ocupan, las uniones tan solo utilizan el tamao del miembro mayor en bytes. Las clases tienen datos y mtodos. La parte de datos se representa como las estructuras, pero los mtodos se almacenan de forma parecida a las funciones, indicando el nombre, tipo de resultado que devuelven, as como el nmero y tipo de parmetros. Por otro lado, tambin tiene que asociarse los accesos (private, public, protected), se sealan las funciones amigas (friend) y se deben almacenar los constructores, destructores y mtodos virtuales.

Docente: Ing. Mirko Manrique Ronceros

~7~

Universidad Nacional del Santa

Curso: Teora de Compiladores

El tamao de una clase, adems, tambin debe reservar espacio para un puntero a la tabla de mtodos virtuales. Dado que los lenguajes de programacin no colocan un lmite al nmero de miembros de las estructuras, uniones y clases, ser necesario implementar una lista dinmica para almacenarlos. En algunas implementaciones sencillas se deja un campo de longitud fija, restringiendo el valor mximo del nmero de miembros Tipo de los Parmetros de las Funciones, Funciones Libres, Procedimientos o Mtodos de las Clases El tipo que devuelve una funcin suele ir asociado al tipo base del identificador (ver apartado 0), sin embargo los tipos de sus parmetros deben de ser almacenados en la TS para realizar las comprobaciones semnticas. Los tipos de los parmetros se obtienen en lenguajes como C y C++ de la declaracin de las funciones prototipo. Dado que los lenguajes de programacin no colocan un lmite al nmero de parmetros de las funciones y procedimientos, ser necesario implementar una lista dinmica para almacenarlos. En algunas implementaciones sencillas se deja un campo de longitud fija restringiendo el valor mximo de nmeros de parmetros. Descriptor de Ficheros En la TS se puede almacenar el descriptor del fichero o handle de bajo nivel que est asociado al identificador del fichero y que se utilizar en la generacin de cdigo. En el caso de lenguajes como PASCAL, en los cuales la declaracin del fichero incluye la definicin del tipo de sus elementos, tambin es necesario almacenar dicho tipo. Otros Atributos Los depuradores de cdigo (debuggers) y los analizadores de rendimiento (profilers) 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 importante cuando se est en fase de depuracin. Estas listas contienen algunos de los atributos vistos anteriormente, tambin contienen el nmero de lnea del texto fuente donde la variable se declar (si est declarada explcitamente) o donde se le hace referencia por primera vez (si su declaracin es implcita). Adems contienen los nmeros de las lneas donde se hace referencia a la variable.

Docente: Ing. Mirko Manrique Ronceros

~8~

Universidad Nacional del Santa IDENTIFICADOR anhio b companhia forma1 m TIPO int real int char proc DIMENSIN 0 0 1 2 0

Curso: Teora de Compiladores DECLARADA EN 5 5 2 4 6 REFERENCIAS 11, 23, 25 10, 11, 13, 23 9, 14, 25 36, 37, 38 17, 21

Tabla 2. Tabla de smbolos con referencias cruzadas como atributo de los smbolos.

La Tabla 2 nos muestra una lista de referencias cruzadas. Se pueden tener problemas cuando se representan todas las referencias a una variable, pues el nmero de lneas en que aparece puede ser grande y ocupar mucho espacio en la tabla. Generalmente se utiliza una lista. Por ltimo tambin existe la posibilidad de tener un atributo que sea un puntero cuya inclusin facilitar la construccin de la lista de nombres de las variables ordenados alfabticamente.

OPERACIONES CON LA TABLA DE SMBOLOS


Las dos operaciones que se llevan a cabo generalmente en las TS son las insercin y la bsqueda. La forma en que se realizan estas dos operaciones difiere levemente segn que las declaraciones del lenguaje a compilar sean explcitas o implcitas. Otras operaciones son activar (set) y desactivar (reset) las tablas de los identificadores locales o automticos. Declaraci n Explcita e Implcita Lenguajes con Declaraciones Explcitas Obligatorias Las dos operaciones se realizan en puntos concretos del compilador. Es obvio que la operacin de insercin se realiza cuando se procesa una declaracin, ya que una declaracin es un descriptor inicial de los atributos de un identificador del programa fuente. Si la TS est ordenada, es decir los nombres de las variables estn por orden alfabtico, entonces la operacin de insercin llama a un procedimiento de bsqueda para encontrar el lugar donde colocar los atributos del identificador a insertar. En tales casos la insercin lleva tanto tiempo como la bsqueda. Si la TS no est ordenada, la operacin de insercin se simplifica mucho, aunque tambin se necesita un procedimiento de colocacin. Sin embargo la operacin de bsqueda se complica ya que debe examinar toda la tabla.

Docente: Ing. Mirko Manrique Ronceros

~9~

Universidad Nacional del Santa

Curso: Teora de Compiladores

La operacin de bsqueda se lleva a cabo en todas las referencias de los identificadores, excepto en su declaracin. La informacin que se busca (por ejemplo: tipo, direccin en tiempo de ejecucin, etc.) se usa en la verificacin semntica y en la generacin de cdigo. Lenguajes con Declaraciones Implcitas de los Identificadores Las operaciones insercin y bsqueda estn estrechamente unidas. Cualquier identificador que aparezca en el texto fuente deber ser tratado como una referencia inicial, ya que no hay manera de saber a priori si los atributos del identificador ya han sido almacenados en la TS. Operacione s con Lenguajes Estructurados en Bloques Def iniremos en este apa rtad o como lenguajes estructurados en b loques a todos los que t iene a lgn t ipo de bloq ue que defina mb itos de u tilizac in y vis in de identificadores, por tanto estn incluidos en este apartado tambin los lenguajes orientados a objetos y no slo los lenguajes estructurados. Operaciones de Activacin y Desactivacin de Tablas de Smbolos Los lenguajes estructurad os en bloques tienen dos operaciones ad iciona les llama da s set y res et. La operacin de set s e uti liza cuando el compilador detecta el comienzo d e un bloque o mdulo en el cua l s e pueden declarar identificad ores locales o automticos. La operacin complementaria reset, se utiliz a cuando se detec ta el final del bloque o mdulo. La naturaleza y n eces ida d de estas opera ciones se muestra en el sigu iente fragmento de progra ma: En el fragmento del progra ma anterior, la variable X se declara en ms de un b loque y en cada uno d e estos bloques X t ien e distintos atributos. En un lenguaje an idado es necesario asegurarse, en cada caso, que el nombre de la variab le s e aso cia con un conjunto nico de atributos o de huecos en la TS. La solucin de este pro blema son las opera c iones set y r eset. Con la entrad a de un bloque, la operacin set crea una nueva subta bla (dentro de la TS) en la cual los atr ibutos de las variables declara das en el nuevo b loque se a lmacenan. La forma de crear esta subtabla depende de la Docente: Ing. Mirko Manrique Ronceros ~ 10 ~

Universidad Nacional del Santa

Curso: Teora de Compiladores

orga nizacin de la TS. En los apa rtados 0 y 0 se vern varias t cnicas par a la creaci n de las subtab las. Mediante el uso de subtab las se so luciona la amb igedad pro vocada por la bsqueda de identifi cad ores del mism o nombr e en d istintos b loques. Por ejemplo, supongamos que se realiza una operacin de bsqueda de la variable X en el progr ama anterior y que las subtablas activas en este momento estn ordenada s de manera que la inspeccin com ienc e por la ltima creada y siga por las an teriores hasta llegar a la primera (como s e muestra en la Figura 1).

Figura 1. Subtablas de un programa estructurado en bloques.

Con esta inspec cin en orden inverso de creac in s e gar antiza que la primera X que aparezca ser la del bloque ms cercano al uso de dicha variable qu e es lo que s emnticame nte pretende el compilador. Ntes e que no est permitido usar dos variables con el mismo nombre en mismo bloque, de esta forma queda resuelto el problema de la ambigedad de los nombr es de las variabl es. Con la salida del bloque, la opera cin reset suprime las entrada s a la subtabla del bloque qu e se acaba de cerrar. Esta supresin de las entrad as significa que las variables del b loque recin acab ado no tienen va lide z en el resto del progr ama. Las tcnicas para el cierre de las subtablas se vern tamb in en los apa rtad os 0 y 0.

Docente: Ing. Mirko Manrique Ronceros

~ 11 ~

Universidad Nacional del Santa

Curso: Teora de Compiladores

ORGANIZACIN DE LA TABLA DE SMBOLOS


Par a estudiar la organizacin de la s tablas de smbolos se estud iar en primer lugar el caso ms sencillo en el que no existen identificadores locales y por tanto tampoco subtablas, es el caso de los lenguajes no estructura dos en bloqu es. En s egundo lugar se est udiarn los lenguaje s estructura dos en bloques y por ltimo los lenguajes or ientados a objetos. Lenguaje s No Estructurados en Bloques Se ent iende por lenguaje no estruct urad o en bloques al lenguaj e en el c ua l cada unidad compilada separadamente es un mdulo s imple que no t iene submdulos. Todas las variables declara das en un mdulo s e conocen en todo el mdulo. Las orga nizaciones de la TS qu e se presentan en este apa rtad o son conceptua lmente las m s simpl es. E n ellas se estud iar la efic ienc ia de los accesos a las tablas para hacer comparativas entre las diferentes implem entacio nes. Interesa determinar numricame n te organizaciones de la TS. la efic iencia de las dist inta s

El primer estimador que se usar para medir la complejidad de una operacin en la TS es la Longitud Med ia de In vest igacin (av erage length of search), en ad elante LMI. Se d efine la LMI como el nmero m edio de comparaciones que se nec esitan par a encontrar un registro de la tabla de smbolos en una organizacin dada. Como se ha definido anteriormente, el conjunto de atributos almacenados en la TS par a un smbolo determ inado se define como registro de la tabla de smbolos (s ymbol-table record). Lenguaje s Estructurados en Bloques En este apartad o se estudiarn los problemas que se presentan en el manejo de tablas de Smbolos c uando se compilan lenguajes estructurad os en bloques. (Aunque tambin sean lenguajes estructurados los lenguajes orientados a objetos se tratarn en o tro apar tado). Se entiende por lenguaje estructur ado en bloques a todo lenguaje c on estructura de bloques o mdulos qu e a su vez pu ede cont ener submd u los anidados y de manera que cada submdulo pueda contener u n conjunto de identificad ores con mb ito local. Docente: Ing. Mirko Manrique Ronceros ~ 12 ~

Universidad Nacional del Santa

Curso: Teora de Compiladores

Un identificador declara do dentro de un mdulo A es accesible dentro de l mdulo a no ser que el m ismo nombre del identificador se redefina dentr o del subm dulo A. La redef inic in de una variab le es v lida exclus ivame nt e dentro del mbito (scope) del Sub mdulo. Por ejemplo en FORTRAN el mb ito de una variable es una subrut ina. E n general este concepto se apl icar ms a los lenguajes tipo ALGOL, PASCAL, C e inc luso a los propios lenguajes or ientad os a objetos. Representacin OO de Smbolos y Tipos en Compiladores de Una Pasada En los sistemas orientados a objetos apa recen nuevos prob lemas a la hora de implementar la tabla d e s mbolos que s e estudian en los sigu ien tes apar tados. En estos momentos hay dos lenguaje s implicados que pueden ser or ientad os a objetos: el lenguaje a compi lar y el lenguaje d e implementacin del comp ilad or, en este caso el lenguaj e de implem entac in de la pr opia ta bla de smbolos (Figur a 2). En los siguientes pr rafos se considera que el lenguaje de implementaci n es orienta do a obj etos, esto pr opor ciona benefic ios de impleme ntacin de la TS. Todo lo estud iado en este apa rtado es aplicable par a el caso de lenguajes fuente estructurados (tamb in or ien tados a objetos). Queda fuera del alcance de este documento las TS de lenguajes OO implementados en lenguajes estruc turados convenciona les.

Figura 2. Esquema del compilador (t) en que se muestra que el lenguaje fuente y el de implementacin son orientados a objetos.

Docente: Ing. Mirko Manrique Ronceros

~ 13 ~

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