Você está na página 1de 21

TEMA 5. TRADUCCION DIRIGIDA POR LA SINTAXIS TEMA 6.

TABLAS DE S IMBOLOS
Francisco Jos Ribadas Pena e PROCESADORES DE LENGUAJES 4o Informtica a ribadas@uvigo.es 13 de marzo de 2007

c FJRP 2005 ccia PL

5.1 Sintaxis Concreta y Sintaxis Abstracta

Uso de rboles sintcticos como interfaz entre A. Sintctico y A. a a a Semntico a Para la semntica de un lenguaje hay detalles de la gramtica no a a relevantes Elementos para mejorar legibilidad separadores, palabras clave, ... S mbolos auxiliares para facilitar anlisis a elimin. recursividad, factorizacin, precedencia, ... o Arboles de Sintaxis Concreta Representacin directa de la secuencia de reglas gramaticales utilio zadas durante el anlsis a Incluye todos los terminales y no terminales implicados No cmoda para utilizar directamente en A. Semntico o a

Arboles de Sintaxis Abstractas Representacin condensada de la estructura del programa donde se o eliminan detalles supruos e Facilita el procesamiento semnticos a

c FJRP 2005 ccia PL

5.2 Gramticas de Atributos a

CFGs no son sucientes para representar ciertas caracter sticas de los lenguajes ni para realizar A. Semntico a Necesidad de un formalismo ms rico para el A. Semntico y la Gen. a a de Cdigo o Gramticas de Atributos a Las gram. de atributos son gramticas de contexto libre a cuyos a s mbolos (terminales y no terminales) se les asocia un conjunto de atributos semnticos a Adems, se denen reglas semnticas asociadas a las reglas graa a maticales que determinan/calculan los valores de los atributos Aplicables sobre sintaxis abstracta y concreta Atributos s mbolo X : X.a1, X.a2, ... notacion: Reglas semnticas A : { acciones } a Atributos Semnticos: Representan cualquier tipo de informacin a o asociada a los s mbolos Ej.: tipo, valor, secuencia de cdigo generado, punteros a entradas o TDS, ... Reglas Semnticas: a Cada regla gramatical tiene asociado un conjunto de reglas semnticas a Calculan el valor de los atributos en base a los valores de los dems atributos y al contexto (TDS) a Pueden incluir efectos laterales: emisin mensajes error, modicar o TDS, generar cdigo, ... o

c FJRP 2005 ccia PL

5.2.1 Tipos de Atributos

Dada la regla A A1 A2 . . . Ak, con a, a1, a2, ..., an atributos de los s mbolos de la regla Atributos Sintetizados: Su valor se calcula unicamente a partir de los valores de los atributos (sintetizados/heredados) pertenecientes a sus hijos en el rbol de anlisis a a A.a = f (A1.a1, A2.a2, ..., Ak.ak) Atributos Heredados: Su valor se calcula a partir de los valores de los atributos (sintetizados/heredados) pertenecientes al padre o a los hermanos de ese nodo en el rbol de anlisis a a Ai.ai = f (A1.a1, A2.a2, ..., Ai1.ai1, Ai1.ai1, ..., Ak.ak)

c FJRP 2005 ccia PL

Ejemplos 1. Atributos sintetizados y reglas para evaluacin de expresiones o aritmticas e


Atributos:

X.valor valor numrico de la subexpresin e o X.texto string asociado a un identicador Semntica a { E0 .valor := E1 .valor + T.valor } { E.valor := T.valor } { T0 .valor := T1 .valor F.valor } { T.valor := F.valor } { F.valor := E.valor } { F.valor := entero.valor } { F.valor := consultarT DS(ident.texto) }

Sintaxis E E+T ET T T F T F F (E) F entero F ident

2. Atributos heredados y reglas para propagacin de tipos o


Atributos:

X.tipo expresin de tipo de dato o X.texto string asociado a un identicador Semntica a { ListaIDS.tipo := N omT ipo.tipo } { insertarT DS(ident.texto, ListaIDs.tipo) } { ListaIDs1 .tipo := ListaIDs0 .tipo insertarT DS(ident.texto, ListaIDs0 .tipo) } { N omT ipo.tipo := real } { N omT ipo.tipo := entero }

Sintaxis Declarac N ombT ipo : ListaIDs; ListaIDs ident ListaIDs ListaIDs, ident

N omT ipo f loat N omT ipo int

c FJRP 2005 ccia PL

5.2.2 Evaluacin de Atributos o

Arbol decorado: rbol sintctico (concreto/abstracto) con todos a a sus atributos evaluados. Dos posibilidades en evaluacin de atributos o 1. A la vez que se realiza al A. Sintctico a A medida que se va analizando el chero de entrada se aplican las reglas semnticas a Muy dependiente de la estrategia de anlisis (ascendena te/descendente) Puede utilizarse para generar rboles abstractos que sern a a procesados posteriormente Almacenar nodos en los atributos de los s mbolos Al completar el reconocimiento de las reglas crear nodo para lado IZQ y enlazar con sus sucesores en el lado DER. 2. Despus del A. Sintctico e a Una vez construido el rbol de anlisis (concreto/abstrato) a a se recorre en el orden adecuado para evaluar las reglas semnticas en sus nodos a Aproximacin ms general o a En ambos casos obtendremos un rbol sintctico decorado a a (impl cito o expl cito). Donde se habrn calculado todos los atributos asociados a los a nodos Servir de base a las siguientes fases de A. Semntico/Gen. a a Cdigo o

c FJRP 2005 ccia PL

5.3 Decoracin de Arboles Sintcticos independiente o a del Anlisis a

Las reglas semnticas de las gramticas de atributos : a a Establecen una relacin funcional entre atributos o No determinan explicitamente el orden de evaluacin de las reglas o Para extraer el orden de evaluacin se construye un grafo de o dependencias para el programa analizado a partir de la gramtica a Construccin del grafo de dependencias: o La regla que calcula el atributo A.a se representa A.a = f (a1, a2, ..., ak), siendo ai los atributos de otros s mbolos. Al grafo de dependencias se le aadirn arcos de la forma n a (ai, A.a) i, indicando que el atributo A.a no puede ser calculado hasta que se calculen todos los atributos ai. A partir del grafo se determina un orden de evaluacin de las reglas o semnticas a Se aplican las reglas en ese orden para calular los valores de los atributos Esquema general:

Ejemplo:

c FJRP 2005 ccia PL

5.4 Decoracin de Arboles Sintcticos durante el o a Anlisis a


Idea: Aprovechar el proceso de reconocimiento sintctico para evaa luar, a la vez, los atributos. No se necesita disponer explicitamente del rbol de anlisis a a Uso de pilas semnticas a No slo pila de s o mbolos gramaticales Se incluyen atributos semnticos asociados a los elementos de la a pila Se utilizan los atributos de los s mbolos presentes en la pila del analizador para calcular los nuevos atributos Visin parcial y local del rbol sintctico global o a a El mtodo de A. Sintctico impone limitaciones a la hora de calcular e a atributos Determina un recorrido del rbol a No se dispone de todos los atributos del rbol a (a) TIPOS DE GRAMATICAS DE ATRIBUTOS 1. Gramticas S-atribuidas: a Slo contienen atributos sintetizados. o 2. Gramticas L-atribuidas: a Todos los atributos heredados asociados a un s mbolo Xi del lado derecho de A X1X2...Xi...Xk dependen slo de: o Los atributos heredados del antecedente A Los atributos heredados y sintetizados de los s mbolos a su IZQ, X1, X2, ...Xi1: 3. Gramticas LC-atribuidas: (LC: left corner) a Todos los atributos heredados de los s mbolos del lado DER dependen slo de los atributos (heredados o sintetizados) de sus o hermanos IZQ.
c FJRP 2005 ccia PL 7

5.4.1 Evaluacin en algoritmos descendentes (LL(1)) o

LL(1) realiza anlisis descendente de IZQ a DER. a Permite el anlisis y evaluacin simultnea de atributos para gramtia o a a cas L-atributidas (y LC-atribu das). Dada la forma en que se ejecuta al algoritmo LL(1) y la denicin o de gram. L-atributida, se puede demostrar que en todo momento tendremos disponible, en posiciones conocidas de la pila, todos los valores de atributos necesarios para calcular los nuevos atributos Ejemplo de funcionamiento: Uso de pila semntica para mantener los atributos asociados a a los s mbolos gramaticales Manejo de la pila: al predecir la regla X Y Z (1) (2) (3) (4) (5) (6) push(atrib. heredados de X ) push(atrib. heredados de Y ) Despus de reconocer Y : push(atrib. sintetizados de Y ) e push(atrib. heredados de Z ) Despus de reconocer Z : push(atrib. sintetizados de Z ) e Reconocido X : pop(atrib. s mbolos lado DER: Y y Z ) push(atrib. sintetizados de X )

c FJRP 2005 ccia PL

5.4.2 Evaluacin en algoritmos ascendentes (LR(1)) o

LR(1) realiza anlisis ascendente salto-reducc. de IZQ a DER. a Tambin utiliza pila semntica e a En LR el s mbolo de la IZQ de una regla no se mete en la pila hasta que se han reconocido todos sus hijos no es posible que un s mbolo herede atributos de su padre Tipo de gramticas evaluables: a 1. Si se soportan atributos sintetizados Al realizar la reduccin de una regla estn disponibles en la o a pila los atributos de s mbolos de la parte DER Se podr calcular el valor de los atributos sintetizados del a s mbolo del lado IZQ 2. Es posible soporte limitado de atributos heredados Slo se podr heredar de s o a mbolos de la parte DER de la regla que estn actualmente en la pila e Es decir, se puede heredar de los hermanos IZQ del s mbolo actual Por (1): LR soporta gram. S-atribuidas Resumen:
Por (1) y (2) LR soporta gram. LC-atribuidas

c FJRP 2005 ccia PL

c FJRP 2005 ccia PL

10

c FJRP 2005 ccia PL

11

TEMA 6. Tablas de Simbolos 6.1 Introduccin o


Tabla de S mbolos (TDS): Estructura de datos usada por el compilador para asociar a cada s mbolo(nombre) del programa una representacin de su contenido semntico(atributos). o a Funcin anloga a un diccionario o a Mecanismo para representar el contexto en un programa Mantiene la info. que se ha recogido acerca de un s mbolo desde el momento de su declaracin o Mecanismo utilizado en A. Semntico para implementar las restrica ciones t picas de los lenguajes de programacin o Control de unicidad de identicadores Asegurar que toda variable fue declarada antes de ser usada Vericacin de tipos o Implementacin de reglas de mbito (en leng. con estructura de o a
bloques)

TDSs slo existen durante compilacin, no suelen incorporarse al ch. o o objeto. Se puede incorporar para facilitar depuracin (acceso a variables por o
nombre, etc.) Tambin, se incorpora en los intrpretes (alternan compilacin y ejecucin) e e o o

c FJRP 2005 ccia PL

12

La info. guardada (campos) depende del elemento almacenado, del lenguaje y de la estructura del compilador: Atributos en TDS Nombre del s mbolo: string Direccin en memoria: dir. donde se guardarn los valores de las o a variables durante la ejecucin. o No dir. absolutas, sino relativas a una zona de memoria durante la ejecucin o No contiene valores, slo info. de almacenamiento o Tipo: codicacin correspondiente al tipo de dato asociado al o s mbolo Localizacin (no l o nea, nombre chero): Info. auxiliar para depuracin. o TDS puede estar inicializada con info. sobre s mbolos especiales del lenguaje (palabras reservadas, funciones de librer constantes a, predenidas, etc...) Operaciones en TDS (interfaz) Insertar un s mbolo en la tabla (comprobando repeticiones) Buscar y recuperar info. de un s mbolo mbolo Modicar info. de un s Borrar En lenguajes con estructura de bloques: NuevoBloque: inicio de un bloque a FinBloque: n del mbito de un bloque

c FJRP 2005 ccia PL

13

6.2 Implementacin de TDS o

Determinar cmo implementar funciones insertar y buscar. o Opciones: 1. Tablas no ordenadas: arrays, listas,... Fcil implementacin a o Poco ecientes 2. Tablas ordenadas: arrays y listas ordenadas, rboles binarios, tablas a hash,... Ms ecientes y complejos. a 6.2.1 Arboles Binarios de Bsqueda u Bsqueda e insercin rpida, si se mantienen balanceados u o a Bsqueda O(log2(n)) en el mejor caso u Ecientes en trminos de espacio e Espacio (no nodos) necesario proporcional al no de s mbolos a almacenar Tablas hash tienen tamao jo, independiente del no de s n mbolos almacenado Ventajoso en sistemas con mltiples TDSs u 6.2.2 Tablas HASH Muy usados por su buena eciencia (acceso directo en el mejor caso) Idea: Mapear un espacio grande (nombres de s mbolo) a un espacio de menor tamao (TDS), que se corresponde con una tabla hash con un n no jo de posiciones.

c FJRP 2005 ccia PL

14

Funciones de hashing: Responsables del mapeo. Propiedades deseables: hash(n) depende slo de n (nombre). o hash(n) debe poder ser calculada rpidamente a Debe de distribuir los nombres de forma aleatoria y uniforme sobre las posiciones de la TDS Colisiones: Funcin hash asigna a 2 s o mbolos la misma posicin o Resolucin de colisiones o Resolucin lineal: Si hash(n) est ocupado, probar (hash(n) + o a 1)mod m, (hash(n) + 2)mod m,..., con m=tamao tabla n Resolucin cuadrtica: Probar con: (hash(n) + 12)mod m, o a
(hash(n) + 22 )mod m, (hash(n) + 32 )mod m,...

Resolucin con encadenamiento o Los nombres no se incluyen directamente en las entradas de la tabla hash Las entradas de la tabla guardan un puntero a una lista de entradas Nombres con idntica posicin en hash estn en una lista e o a enlazada Evita degeneracin a bsqueda lineal y minimiza espacio extra o u necesario Evita un error fatal en caso de llenar la tabla completamente

c FJRP 2005 ccia PL

15

6.3 TDS estructuradas en bloques


Lenguajes de prog. suelen estructurarse en bloques de cdigo (subproo gramas, paquetes, mdulos, bloques,...) o Es posible anidar bloques y acceder a s mbolos de otros bloques (mbitos de visibilidad) a Esta estructuracin condiciona la implementacin de las TDS (y o o viceversa). Toda l nea de cdigo pertenece a uno o ms bloques: o a Bloque ms interno mbito actual a a Ambito actual + bloques que lo incluyesen mbitos abiertos a Bloques que no engloban a la l nea actual mbitos cerrados a Reglas de Visibilidad: En un punto dado del programa, slo los nombres declarados en el o mbito actual y en los dems mbitos abiertos son accesibles. a a a Si un nombre est declarado en ms de un mbito abierto, se usar la a a a a declaracin ms interna(la ms cercana). o a a Las nuevas declaraciones slo tienen efecto en el mbito actual (y o a en los incluidos en l) e Todas las declaraciones de un mbito cerrado son inaccesibles. a NOTA: Los nombres de los parmetros de un subprograma son locales al a cuerpo de ese subprograma El nombre del subprograma est incluido en el mbito en el que a a se declara el subprograma. Los subprogramas recursivos tambin deben incluirse en el e mbito de su propio cuerpo. a

c FJRP 2005 ccia PL

16

6.3.1 Aproximaciones para implementar TDS en leng. con estructura de bloques 1. Una tabla individual para cada mbito/bloque a Necesidad de un mecanismo que asegure que las bsquedas de u nombres siguen las reglas de visibilidad para bloques anidados. Estructuracin de las distintas TDS en forma de pila o El mbito ms interno estar en la cima a a a Al abrir un nuevo mbito/bloque se aade su TDS a la pila a n Cuando se sale de un mbito/bloque se saca de la pila su TDS a En compiladores de 1 pasada se puede eliminar esa TDS En compiladores de mltiples pasadas: u se guarda la TDS, asocindola al bloque a para cada TDS habr un puntero apuntado a la TDS del a bloque padre da lugar a una estructura en forma de rbol a Para buscar un nombre se consulta la TDS de la cima y se va bajando hasta que: se encuentra el mbito cuya TDS contiene ese nombre a se agota la pila. Ejemplo: INCONVENIENTES: Necesidad de buscar a travs de mltiples TDSs e u vars. globales buscar en todas las TDS Problemas con tablas hash (TDS de tamao jo) n Si tabla grande desaprovecha espacio si hay pocos s mbolos Si tabla pequea muchas colisiones, se enlentece bsquen u da (listas largas) No problema con rboles de bsqueda a u

c FJRP 2005 ccia PL

17

2. Una unica tabla global Todos los nombres, para todos los mbitos, en un sla tabla a o Cada mbito tiene asociado un nmero de mbito a u a Un nombre puede aparecer varias veces, cada una con un no de mbito diferente a Bsqueda debe considerar el nmero de mbito actual u u a Se apoya en una pila de nmeros de mbito u a VENTAJAS E INCONVENIENTES Implementacin eciente con tablas hash o Rpido y relativamente eciente en espacio a Fcil aadir s a n mbolos e identicar los que ya no son visibles Manejo complejo con rboles de bsqueda a u Eliminar s mbolos al salir de un bloque recorrer todo el rbol a Ejemplo:

c FJRP 2005 ccia PL

18

6.4 Extensiones de la Estructuracin en Bloques o


Alteraciones de reglas de visibilidad usuales que afectan al diseo de n TDS 6.4.1 Campos y Registros Nombres de campo slo son visibles si estn calicados con el nombre o a del registro (Pascal: record. C: struct) Nombres de campo slo deben ser unicos dentro del registro, pueden o aparecer de nuevo en el mbito sin causar conicto. a Dos posibilidades de implementacin: o 1. Asociar una TDS a cada tipo registro Cada tipo registro tiene su propia TDS para almacenar info. sobre sus campos Ser un atributo de la denicin del tipo registro a o No se aade a la pila de mbitos n a Cada nueva TDS de campos no ampl el conj. de s a mbolos que pueden aparecer, sino que lo sustituye. Bsqueda en dos fases (nomVar.nomCampo): u Nombre de variable de tipo registro en TDS del mbito actual a Nombre del campo en TDS del tipo registro. Implementacin simple. o Costosa en espacio (sobretodo son tablas hash) 2. Uso de nmero de registro u Asociar a cada tipo registro un nmero u Incluir nombres de campo en TDS del mbito incluyendo el no a de registro al que pertenecen Los nombres que no se reeran a campos tienen un no registro 0. Bsqueda de una referencia a un campo (nomVar.nomCampo) u Empieza buscado el nombre de la var. de tipo registro para recuperar el no registro. Se busca entre todos los s mbolos con nombre nomCampo,uno o con ese n .
c FJRP 2005 ccia PL 19

6.4.2 Reglas de Exportacin e Importacin o o En ciertos lenguajes es posible que determinados s mbolos de un bloques/mbito sean visibles desde otros mdulos separados, ms all de a o a a las reglas de visibilidad clsicas. a Ej.: unidades (Pascal), packages (ADA), mdulos (Modula-2), clases (C++),... o Soportar modularidad Utilidad: Permitir compilacin separada o Reglas de importacin/exportacin permiten determinar selectivamente o o que s mbolos han de ser conocidos entre diversos mdulos. o Pueden incluirse restricciones sobre esos s mbolos importados/exportados. (Ej.: slo lectura, lectura-escritura,...) o Se amplia interfaz de la TDS con 2 funciones: Exportacin de s o mbolos: Toma los s mbolos de un mbito (TDS) que, segn las reglas a u de exportacin, son exportables y los incorpora a otro mbito o a distinto. a mbito importador de nivel superior o fuera de mbitos abiertos actuales a a Importacin de s o mbolos: Toma un nombre s mbolo y lo busca en la TDS del mbito que a lo exporta. Copia esa entrada en la TDS del mbito que la importa. a Cuando los mdulos importador/exportador estn en distintas unidades o a de compilacin ( cheros), se habla de compilacin separada. o o Es necesario guardar parte de las TDS en los cheros objeto generados, para poder recuperar esa info. al compilar el mdulo importador. o NOTA: En C, es el programador quien maneja de forma expl cita la importacin/exportacin de s o o mbolos entre distintos chero fuente. uso chero cabecera .h y declaraciones extern
c FJRP 2005 ccia PL 20