690 likes | 899 Views
Área de Autómatas y Lenguajes. Traducción Dirigida por la Sintáxis. Diseño y Construcción de Compiladores 2008. El significado de una sentencia de entrada está relacionado con su estructura sintáctica.
E N D
Área de Autómatas y Lenguajes TraducciónDirigidapor la Sintáxis Diseño y Construcción de Compiladores 2008
El significado de una sentencia de entrada está relacionado con su estructura sintáctica. • Encierran aquellos formalismos utilizados para especificar las traducciones para las construcciones de los lenguajes de programación guiadas por una GLC. • Se Asocian Atributos a los símbolos de la gramática. • Se computan los valores de atributos por reglas semánticas asociadas a las producciones de la gramática. TraducciónDirigidapor la Sintáxis Compiladores 2008 - Traducción Dirigida por la Sintáxis
La evaluación de las reglas semánticas puede: • Generar Código. • Insertar información en la Tabla de Símbolos. • Relizar el Chequeo Semántico. • Dar mensajes de error • Etc. TraducciónDirigidapor la Sintáxis Compiladores 2008 - Traducción Dirigida por la Sintáxis
Existen dos notaciones para asociar información a las reglas semánticas: • Definiciones Dirigidas por la Sintáxis: es una especificación de alto nivel que oculta detalles de implementación. • Esquemas de traducción: están más orientados a la implementación porque indican el orden en el cual se evalúan las reglas semánticas. TraducciónDirigidapor la Sintáxis Compiladores 2008 - Traducción Dirigida por la Sintáxis
Gramáticas de Atributos • Definiciones Dirigidas por la Sintáxis. • Definiciones S-Atribuidas • Definiciones L-Atribuidas • Implementación de las Definiciones Dirigidas por la Sintáxis: • Grafo de Dependencias • Definiciones S-Atribuidas • Definiciones L-Atribuidas • Esquemas de Traduccion Índice Compiladores 2008 - Traducción Dirigida por la Sintáxis
Gramáticas de Atributos Compiladores 2008 - Traducción Dirigida por la Sintáxis
Una Gramática de Atributos define la sintaxis y la semántica de un lenguaje. • También define la información que se necesita almacenar en el Árbol de Sintaxis Abstracta para llevar a cabo el Análisis Semántico y la Generación de Código. • Dicha información se almacena como atributos de los nodos del Árbol de Sintáxis Abstracta. Gramáticas de Atributos Compiladores 2008 - Traducción Dirigida por la Sintáxis
Sea G=<N,T,P,S> una Gramática Libre de Contexto. G es una Gramática de Atributos (GA) si: • Cada X N T está asociado con dos conjuntos disjuntos, H(X), el conjunto de los atributos hereddos y S(X) el conjunto de los atributos sintetizados. X N T. • El conjunto de atributos de G es Atr= H S. Donde H= X N H(X), S= X N T S(X). • X0 X1X2….Xm P y aj Atr(Xi), 0 i m, entonces Xi.aj es el atributo aj de Xi y Dxi,aj es el dominio de valores de Xi.aj. • Una regla semántica asociada con X0 X1X2….Xm P es de la forma Xi.aj=f(b1j1,…..,bkjk), 0 jl m, 0 i m, donde cada bljl Atr(Xjl). Gramáticas de Atributos Compiladores 2008 - Traducción Dirigida por la Sintáxis
Atributo Sintetizado: Un atributo a es sintetizado si, dada una regla de una gramática AX1X2….Xn la ecuación asociada con a es de la forma: A.a=f(X1.a1,….X1.ak,….,Xn.a1,…Xn.ak). En otras palabras a es un atributo sintetizado si su valor depende de los valores de atributos de sus hijos. X0 X1 Xi Xn AtributosSintetizados Compiladores 2008 - Traducción Dirigida por la Sintáxis
Atributo Heredado: Un atributo que no es sintetizado es un atributo heredado. En otras palabras un atributo heredado es aquel cuyo valor de atributo está definido en términos de los valores de atributos del padre o de sus hermanos. X0 X1 Xi Xn AtributosHeredados Compiladores 2008 - Traducción Dirigida por la Sintáxis
Dada la siguiente gramática G1: • NRO DIG | NRODIG • DIG 0|1|2|3|4|5|6|7|8|9 Calcular el valor de los números generados por G usando un atributo sintetizado val. Ejemplos de Gramáticas de Atributos Compiladores 2008 - Traducción Dirigida por la Sintáxis
La siguiente gramática expresa declaraciones en una sintaxis similar a la usada por el lenguaje C: G2: • DECL TYPEVAR-LIST • TYPE INT | FLOAT • VAR-LIST ID,VAR-LIST | ID Usando un atributo heredado determine el tipo de los identificadores Ejemplos de Gramáticas de Atributos Compiladores 2008 - Traducción Dirigida por la Sintáxis
Ejercicio: La siguiente gramática permite expresar números en decimal y octal: G3: • BNRONROB • B O|D • NRO NRODIG | DIG • DIG 0|1|2|3|4|5|6|7|8|9 Defina los atributos y reglas semánticas necesarias para calcular el valor del número. Ejemplos de Gramáticas de Atributos Compiladores 2008 - Traducción Dirigida por la Sintáxis
DefinicionesDirigidaspor la Sintáxis Compiladores 2008 - Traducción Dirigida por la Sintáxis
DDS: Son Gramáticas de Atributos en las cuales no se especifica el orden de evaluación de las reglas semánticas. Las gramáticas de atributos G1 y G2 son ejemplos de definiciones dirigidas por la sintaxis. DDS Compiladores 2008 - Traducción Dirigida por la Sintáxis
Cada producción A está asociada con un conjunto de reglas semánticas de la foma: b=f(c1,c2,...,ck) donde f es una función y • b es un atributo Sintetizado de A y c1,c2,...,ckson atributos de los símbolos en A, o • b es un atributo Heredado de un símbolo de la gramática en , y c1,c2,...,ckson atributos de los símbolos de la gramática en o atributos de A. DDS-Formato Compiladores 2008 - Traducción Dirigida por la Sintáxis
Se asume que los símbolos terminales tienen atributos sintetizados proporcionados por el Analizador Lexicográfico. • Las llamadas a procedimientos definen valores de atributos sintetizados ficticios (Dummy) del no terminal del lado izquierdo de la producción. DDS Compiladores 2008 - Traducción Dirigida por la Sintáxis
Si en una DDS el orden de evaluación de los atributos no esta especificado entonces como se realiza la evaluación de los atributos? • Respuesta: • Utilizando un grafo de dependencias. DDS-Evaluación de Atributos Compiladores 2008 - Traducción Dirigida por la Sintáxis
La implementación de una DDS consiste en encontrar un orden de evaluación de los atributos. • Cada atributo tiene que estar disponible cuando la computación se realiza. DDS-Evaluación de Atributos Compiladores 2008 - Traducción Dirigida por la Sintáxis
Un Grafo de Dependencia muestra las interdependencias entre los atributos de varios nodos en un Árbol de Parse. • Hay un nodo para cada atributo. • Si un atributo b depende de un atributo c hay un arco desde el nodo c al nodo b. • Regla de Dependencia: Si un atributo b, en el nodo n, en un árbol de derivación depende del atributo c luego la regla semántica que define a b se debe evaluar después de la regla semántica que define a c. • La interdependencia entre atributos heredados y sintetizados se puede dibujar como un grafo dirigido. Este grafo se conoce con el nombre de Grafo de Dependencias. DDS-Grafo de Dependencias Compiladores 2008 - Traducción Dirigida por la Sintáxis
Para cada nodo n el el árbol Hacer Para cada atributo a del simbolo de G hacer Construir un nodo en el grafo de dependencia FinPara FinPara Para cada nodo n el el árbol Hacer Para cada regla semántica b=f(c1,…,ck) asociada con la producción usada en el nodo n Hacer Para i=1 hasta k Hacer Construir un arco desde ci hacia el nodo b FinPara FinPara FinPara DDS-Grafo de Dependencias Compiladores 2008 - Traducción Dirigida por la Sintáxis
Grafo de Dependencias para la Producción 1 NRO1.val DIG.val NRO2.val Grafo de Dependendia - Ejemplo Compiladores 2008 - Traducción Dirigida por la Sintáxis
Grafo de Dependencias para la Cadena 345 NRO.val NRO.val DIG.val NRO.val DIG.val DIG.val Grafo de Dependencias Árbol de Parse Grafo de Dependendia - Ejemplo Compiladores 2008 - Traducción Dirigida por la Sintáxis
Construir el árbol de parsing para la entrada x. • Construir el Grafo de Dependencias. • Construir el Ordenamiento Topológico. • Evaluar las reglas semánticas en el orden indicado por el Ordenamiento Topológico. DDS: Grafo de Dependencias-Orden de Evaluación Compiladores 2008 - Traducción Dirigida por la Sintáxis
Ejercicio: Construir Grafos de Dependencias para las Gramáticas G1 y G2 para diferentes cadenas aceptadas por las mismas. Grafo de Dependendia - Ejemplo Compiladores 2008 - Traducción Dirigida por la Sintáxis
Se utiliza un Ordenamiento Topológico • Algoritmo Destructivo (Sólo para propósito pedagógico). Algoritmo: Ordenamiento Topológico(G,T) Entrada: G grafo de dependencias. Salida: T el ordenamiento topológico de G. Open el conjunto de nodos a tratar. Open←minimales(G); Mientras Open Hacer Sea x Open Eliminar x de G Insertar x en T Open ← Open – {x} Open ← minimales(G) Fin Mientras Retornar T Grafo de Dependendia – Orden de Evaluación Compiladores 2008 - Traducción Dirigida por la Sintáxis
b b g g g g a c c c c f f f f d d e e e d e a a b a a d Completar el ejemplo! Grafo de Dependendia – Orden de Evaluación Compiladores 2008 - Traducción Dirigida por la Sintáxis
De el orden de evaluación del siguiente grafo de dependencias NRO.val NRO.val DIG.val NRO.val DIG.val DIG.val Grafo de Dependendia – Orden de Evaluación Compiladores 2008 - Traducción Dirigida por la Sintáxis
Ejercicio: Elaborar un algoritmo que permita extraer un Ordenamiento Topológico sin destruir el grafo subyacente. Ejercicio: Elaborar un algoritmo no destructivo que permita extraer un Ordenamiento Topológico Inverso. Ejercicios Compiladores 2008 - Traducción Dirigida por la Sintáxis
Problemas con el método: • Falla si el grafo de dependencias tiene un ciclo. • Consume tiempo debido a la construcción del grafo de dependencias. • Solución: • Diseñar la DDS de tal forma que los atributos se puedan evaluar en un orden fijo evitando la construcción del grafo de dependencias (este método es el utilizado por muchos compiladores). Grafo de Dependencias-Orden de Evaluación Compiladores 2008 - Traducción Dirigida por la Sintáxis
En las DDS no circulares se puede establecer un orden de evaluación fijo en tiempo de construcción del compilador. • Hay dos clases importantes de definiciones no circulares: • S-Atribuidas • L-Atribuidas DDS Compiladores 2008 - Traducción Dirigida por la Sintáxis
DDS S-Atribuida Compiladores 2008 - Traducción Dirigida por la Sintáxis
DDS S-Atribuida: Es una DDS que sólo utiliza atributos sintetizados. • Esta clase de DDS es interesante porque los valores de atributo pueden ser obtenidos a través de un barrido Post Orden del Árbol de Parse. DDS S-Atribuida Compiladores 2008 - Traducción Dirigida por la Sintáxis
Ejercicio: Determine Cuáles de las GA presentadas previamente son DDS S-Atribuidas? DDS S-Atribuida Compiladores 2008 - Traducción Dirigida por la Sintáxis
Los atributos sintetizados se pueden evaluar usando un parserbottom-up cuando se analiza la cadena de entrada evitando la construcción del grafo de dependencias. • El parser mantiene los valores de los atributos sintetizados en su pila. • Cuando se realiza una reducción A, el atributo para A se calcula a partir de los atributos de que se encuentran en la pila. • De esta manera una DDS S-Atribuida se puede implementar extendiendo la pila de un parser LR. DDS S-Atribuida Compiladores 2008 - Traducción Dirigida por la Sintáxis
Se incorporan campos extras a la pila para mantener los valores de los atributos sintetizados. • Por ejemplo si se está trabajando con un solo atributo sintetizado la pila tiene la siguiente forma • El tope de la pila se mantiene con un puntero top. • Antes de que la reducción AXYZ se realize, se calcula el atributo sintetizado de A: • A.a=f(val[top],val[top-1],val[top-2]) DDS S-AtribuidaEvaluación Compiladores 2008 - Traducción Dirigida por la Sintáxis
Ejercicio: Utilice la gramática G3 para evaluar la cadena 345 usando la aproximación propuesta para las gramáticas S-Atribuidas. Muestre el contenido de la pila. DDS S-Atribuida Compiladores 2008 - Traducción Dirigida por la Sintáxis
DDS L-Atribuida Compiladores 2008 - Traducción Dirigida por la Sintáxis
Son útiles para expresar la dependencia de una construcción en el contexto en el cual aparece. • A diferencia de los atributos sintetizados el orden en el cual aparecen los atributos heredados es importante. • Es siempre posible reescribir la DDS con sólo atributos sintetizados. No obstante es más natural usar atributos heredados y sintetizados. DDS L-Atribuida Compiladores 2008 - Traducción Dirigida por la Sintáxis
Definición: Una DDS es L-Atribuida si cada atributo heredado de Xj, 1 j n, en el lado derecho de una producción del tipo X0X1…Xj-1Xj….Xn depende solo de: • Los atributos sintetizados de X1…Xj-1, a la izquierda de Xj. • Los atributos heredados de X0. DDS L-Atribuida Compiladores 2008 - Traducción Dirigida por la Sintáxis
Importante: • Toda definición S-Atribuida es L-Atribuida. • Teorema: Los atributos heredados en DDS L-Atribuidas se pueden computar por un recorrido Pre-Orden del árbol de parse. • Las definiciones L-Atribuidas cubren todas las traducciones que se pueden realizar sin construir explicitamente el árbol de parse. DDS L-Atribuida Compiladores 2008 - Traducción Dirigida por la Sintáxis
Las DDS L-Atribuidas son una clase de DDS cuyos atributos siempre se pueden evaluar por un recorrido del árbol de parse. • El procedimiento mezcla los recorridos Post Orden (sintetizado) y Pre-Orden (heredado). Evaluación de DDS L-Atribuidas Compiladores 2008 - Traducción Dirigida por la Sintáxis
Algoritmo: L-Eval (n) Entrada N: un nodo del árbol de parse anotado. Salida: La evaluación de atributos Comenzar Para cada hijo m de n, desde izquierda a derecha Hacer Evaluar los atributos heredados de m; L-Eval(m) FinPara Evaluar los atributos sintetizados de n Fin Evaluación de DDS L-Atribuidas Compiladores 2008 - Traducción Dirigida por la Sintáxis
Esquemas de Traducción Compiladores 2008 - Traducción Dirigida por la Sintáxis
Los esquemas de traducción están más orientados a la implementación que las DDS porque indican el orden de evaluación de las reglas semánticas. Definición: Un ET es una gramática libre del contexto que cumple con las siguientes condiciones: • Los atributos están asociados con los símbolos de la gramática. • Las acciones semánticas están encerradas entre { y } y están embebidas dentro del lado derecho de las producciones. Esquemas de Traducción Compiladores 2008 - Traducción Dirigida por la Sintáxis
Los ET pueden tener atributos sintetizados y heredados. • Las acciones semánticas son tratadas como símbolos terminales • Los esquemas de traducción son útiles para evaluar definiciones L-Atribuidas en tiempo de parsing. Esquemas de Traducción Compiladores 2008 - Traducción Dirigida por la Sintáxis
Esquemas de Traducción Compiladores 2008 - Traducción Dirigida por la Sintáxis
Ejercicio: Construir el Árbol de Parse para la siguiente declaración: Real id1, id2, id3. Ejercicio: Evaluar el ET. Esquemas de Traducción Compiladores 2008 - Traducción Dirigida por la Sintáxis
1er Caso: Atributos Sintetizados: se puede construir un ET creando una acción semántica que es una asignación y se ubica esta acción al final de la parte derecha de la producción. ET Diseño Compiladores 2008 - Traducción Dirigida por la Sintáxis
2do Caso: Atributos heredados y sintetizados. • Un Atributo heredado por un símbolo de la parte derecha de una producción se debe calcular en una acción que se realice antes de dicho símbolo. ET Diseño Compiladores 2008 - Traducción Dirigida por la Sintáxis