1 / 67

Traducción Dirigida por la Sintáxis

Á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.

haruko
Download Presentation

Traducción Dirigida por la Sintáxis

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Área de Autómatas y Lenguajes TraducciónDirigidapor la Sintáxis Diseño y Construcción de Compiladores 2008

  2. 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

  3. 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

  4. 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

  5. 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

  6. Gramáticas de Atributos Compiladores 2008 - Traducción Dirigida por la Sintáxis

  7. 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

  8. 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

  9. Atributo Sintetizado: Un atributo a es sintetizado si, dada una regla de una gramática AX1X2….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

  10. 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

  11. 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

  12. 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

  13. Ejercicio: La siguiente gramática permite expresar números en decimal y octal: G3: • BNRONROB • 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

  14. DefinicionesDirigidaspor la Sintáxis Compiladores 2008 - Traducción Dirigida por la Sintáxis

  15. 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

  16. 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

  17. 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

  18. 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

  19. 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

  20. 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

  21. 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

  22. 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

  23. 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

  24. 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

  25. 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

  26. 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

  27. 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

  28. 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

  29. 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

  30. 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

  31. 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

  32. DDS S-Atribuida Compiladores 2008 - Traducción Dirigida por la Sintáxis

  33. 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

  34. 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

  35. 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

  36. 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 AXYZ 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

  37. 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

  38. DDS L-Atribuida Compiladores 2008 - Traducción Dirigida por la Sintáxis

  39. 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

  40. 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 X0X1…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

  41. 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

  42. 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

  43. 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

  44. Esquemas de Traducción Compiladores 2008 - Traducción Dirigida por la Sintáxis

  45. 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

  46. 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

  47. Esquemas de Traducción Compiladores 2008 - Traducción Dirigida por la Sintáxis

  48. 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

  49. 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

  50. 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

More Related