La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Traducción Dirigida por la Sintáxis

Presentaciones similares


Presentación del tema: "Traducción Dirigida por la Sintáxis"— Transcripción de la presentación:

1 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

2 Traducción Dirigida por la Sintáxis
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ón Dirigida por la Sintáxis Compiladores Traducción Dirigida por la Sintáxis

3 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ón Dirigida por la Sintáxis Compiladores Traducción Dirigida por la Sintáxis

4 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ón Dirigida por la Sintáxis Compiladores Traducción Dirigida por la Sintáxis

5 Índice 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 Esquemas de Traduccion Índice Compiladores Traducción Dirigida por la Sintáxis

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

7 Gramáticas de Atributos
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 Traducción Dirigida por la Sintáxis

8 Gramáticas de Atributos
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 Traducción Dirigida por la Sintáxis

9 Atributos Sintetizados
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 Atributos Sintetizados Compiladores 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 Atributos Heredados Compiladores Traducción Dirigida por la Sintáxis

11 Ejemplos de Gramáticas de Atributos
Dada la siguiente gramática G1: NRO DIG | NRO DIG 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 Traducción Dirigida por la Sintáxis

12 Ejemplos de Gramáticas de Atributos
La siguiente gramática expresa declaraciones en una sintaxis similar a la usada por el lenguaje C: G2: DECL  TYPE VAR-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 Traducción Dirigida por la Sintáxis

13 Ejemplos de Gramáticas de Atributos
Ejercicio: La siguiente gramática permite expresar números en decimal y octal: G3: BNRONRO B B O|D NRO NRO DIG | 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 Traducción Dirigida por la Sintáxis

14 Definiciones Dirigidas por la Sintáxis
Compiladores 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 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,...,ck son 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,...,ck son atributos de los símbolos de la gramática en  o atributos de A. DDS-Formato Compiladores 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 Traducción Dirigida por la Sintáxis

18 DDS-Evaluación de Atributos
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 Traducción Dirigida por la Sintáxis

19 DDS-Evaluación de Atributos
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 Traducción Dirigida por la Sintáxis

20 DDS-Grafo de Dependencias
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 Traducción Dirigida por la Sintáxis

21 DDS-Grafo de Dependencias
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 Fin Para 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 DDS-Grafo de Dependencias Compiladores Traducción Dirigida por la Sintáxis

22 Grafo de Dependendia - Ejemplo
Gramática G3 N Prod. R. Sem. 1 NRO1 NRO2 DIG {NRO1.val=NRO2.val+DIG.val} 2 NRO DIG {NRO.val=DIG.val} 3 DIG 0 {DIG.val=0} 4 ……. …… Grafo de Dependencias para la Producción 1 NRO1.val DIG.val NRO2.val Grafo de Dependendia - Ejemplo Compiladores Traducción Dirigida por la Sintáxis

23 Grafo de Dependendia - Ejemplo
Grafo de Dependencias para la Cadena 345 NRO.val NRO.val DIG.val NRO.val DIG.val DIG.val Grafo de Dependencias Grafo de Dependendia - Ejemplo Árbol de Parse Compiladores Traducción Dirigida por la Sintáxis

24 DDS: Grafo de Dependencias-Orden de Evaluación
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 Traducción Dirigida por la Sintáxis

25 Grafo de Dependendia - Ejemplo
Ejercicio: Construir Grafos de Dependencias para las Gramáticas G1 y G2 para diferentes cadenas aceptadas por las mismas. Grafo de Dependendia - Ejemplo Compiladores Traducción Dirigida por la Sintáxis

26 Grafo de Dependendia – Orden de Evaluación
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 Traducción Dirigida por la Sintáxis

27 Grafo de Dependendia – Orden de Evaluación
b c g d e f b c g d e f c g d e f c g e f a a b a a d Completar el ejemplo! Grafo de Dependendia – Orden de Evaluación Compiladores Traducción Dirigida por la Sintáxis

28 Grafo de Dependendia – Orden de Evaluación
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 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 Traducción Dirigida por la Sintáxis

30 Grafo de Dependencias-Orden de Evaluación
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 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 Traducción Dirigida por la Sintáxis

32 DDS S-Atribuida Compiladores 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 Traducción Dirigida por la Sintáxis

34 Ejercicio: Determine Cuáles de las GA presentadas previamente son DDS S-Atribuidas?
Compiladores Traducción Dirigida por la Sintáxis

35 Los atributos sintetizados se pueden evaluar usando un parser bottom-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 Traducción Dirigida por la Sintáxis

36 DDS S-Atribuida Evaluación
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 Estado Valor Z Z.x Y Y.x X X.x …… 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-Atribuida Evaluación Compiladores 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 Traducción Dirigida por la Sintáxis

38 DDS L-Atribuida Compiladores 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 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 Traducción Dirigida por la Sintáxis

41 DDS L-Atribuida 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 Traducción Dirigida por la Sintáxis

42 Evaluación de DDS L-Atribuidas
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 Traducción Dirigida por la Sintáxis

43 Evaluación de DDS L-Atribuidas
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) Fin Para Evaluar los atributos sintetizados de n Fin Evaluación de DDS L-Atribuidas Compiladores Traducción Dirigida por la Sintáxis

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

45 Esquemas de Traducción
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 Traducción Dirigida por la Sintáxis

46 Esquemas de Traducción
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 Traducción Dirigida por la Sintáxis

47 Esquemas de Traducción
G. L-Attr 1 DT L 2 Tint 3 Treal 4 L1L2,id 5 Lid N. ET para G 1 DT{L.in=T.type} L 2 Tint {T.tipo=integer} 3 Treal {T.tipo=real} 4 L1 {L1.in=L.in} L2,id{addtype(id.entry,L.in} 5 L id{addtype(id.entry, L.in} Esquemas de Traducción Compiladores Traducción Dirigida por la Sintáxis

48 Esquemas de Traducción
Ejercicio: Construir el Árbol de Parse para la siguiente declaración: Real id1, id2, id3. Ejercicio: Evaluar el ET. Esquemas de Traducción Compiladores 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. Producción Regla Semántica 1) TE + T1 T.val= E.val + T1.val 2) NRO1 NRO2 DIG NRO1=NRO2.val * 10 + DIG.val 3) DIG0 DIG.val=0 ET Diseño Compiladores Traducción Dirigida por la Sintáxis

50 Producción con Acciones
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. Producción Producción con Acciones X0X1…Xj-1Xj…Xn X0X1…Xj-1 {Xj.h}Xj…Xn X0X1…Xj-1Xj{Xj.h}…..Xn DT LID D T{LID.t=T.tipo} LID ET Diseño Compiladores Traducción Dirigida por la Sintáxis

51 ET Diseño 2do Caso: Atributos heredados y sintetizados.
Una acción no debe referenciar a un atributo sintetizado de un símbolo de la gramática que esté a la derecha de dicho símbolo. Producción Producción con Acciones X0X1…Xj-1{Acción}Xj…Xn Acción: no hace ref. a un atributo calculado a la derecha de Xj ET Diseño Compiladores Traducción Dirigida por la Sintáxis

52 ET Diseño 2do Caso: Atributos heredados y sintetizados.
Acciones que calculen atributos sintetizados para el símbolo no terminal de la parte izquierda de una producción deben ser ubicados al final de la parte derecha de la producción. Producción Regla Semántica 1) TE + T1 T.val= E.val + T1.val 2) NRO1 NRO2 DIG NRO1=NRO2.val * 10 + DIG.val 3) DIG0 DIG.val=0 ET Diseño Compiladores Traducción Dirigida por la Sintáxis

53 ET Técnica de Construcción
Entrada: Un esquema de traducción dirigido por la sintaxis con la gramática subyacente LL(k) fuerte. Salida: Código para un traductor dirigido por la sintaxis. Método: La técnica propuesta es una modificación al método de construcción de parsers descentes recursivos vistos anteriormente.  A  N, construir una función asociada pero teniendo un parámetro formal para cada atributo heredado por A y que retorne los valores de los atributos sintetizados de A. El cuerpo de la función deberá contener una variable local para cada atributo de cada símbolo de la gramática que aparezca en las producciones de A. ET Técnica de Construcción Compiladores Traducción Dirigida por la Sintáxis

54 ET Técnica de Construcción
Como sucede con el método clásico el código para el no terminal A decide que producción usar basado en el lookahead. El código asociado con cada producción hace lo siguiente, considerando los tokens, los no teminales y acciones en la parte derecha de una producción de izquierda a derecha:    Para el token x con atributo sintetizado x.val se salva su valor en la variable local declarada para x.val. Luego, se llama al match del símbolo y se obtiene el próximo token. Para el no terminal B, se genera una asignación c:=B(b1,b2,...,bn) donde b1,b2,...,bn son las variables para los atributos heredados de B y c es la variable para el atributo sintetizado de B. Para una acción, copiar el código en el parser, reemplazando cada referencia a un atributo por la variable local para tal atributo. ET Técnica de Construcción Compiladores Traducción Dirigida por la Sintáxis

55 Aplicaciones Compiladores Traducción Dirigida por la Sintáxis

56 Una aplicación científica o industrial se puede estudiar a partir de las componentes estáticas que utilizan, por ejemplo: Tipos de datos, Registros, Variables, Constantes, Funciones, etc. Los temás vistos en esta clase se pueden utilizar para extraer esta información y dejarla disponible para que el usuario tenga rápido acceso a ella en el código fuente del programa. En otras palabras se pueden usar las DDS o ET para extraer la información antes mencionada desde el código fuente. Análisis Estático Compiladores Traducción Dirigida por la Sintáxis

57 Un visualizador de los elementos estáticos de un sistema.
Análisis Estático Compiladores Traducción Dirigida por la Sintáxis

58 La información estática es importante
La información estática es importante. No obstante conocer el comportamiento del programa puede ayudar a la tarea de simplificar la inspección del código. El Análisis Dinámico se interesa por conocer cuales son las componentes del sistema bajo estudio utilizadas para llevar a cabo una funcionalidad específica. Una de las formas de llevar a cabo esta tarea consiste en “Instrumentar el Código Fuente”. Esto significa: “Insertar sentencias dentro del código fuente del sistema que posibiliten la identificación de las componentes utilizadas”. Análisis Dinámico Compiladores Traducción Dirigida por la Sintáxis

59 Análisis Dinámico int f(int x, int y) int f(int x, int y) { {
{ { int r; int r; r=2*x + 3*y printf(“Entra: f”); return r; r=2*r+3*y; } printf(“Sale:f”); } Int main() int main() f(2,3); printf(“ENTRA main”); } f(2,3); printf(“SALE main”); La ejecución del sistema de la derecha informará que función ejecutó el sistema. Luego Ud. Puede almacenar esas trazas de ejecución para obtener conclusiones acerca del funcionamiento del sistema. Se anima Ud. a construir un DDS o un ET que logre este efecto para la gramática proporcionada por la materia? Análisis Dinámico Compiladores Traducción Dirigida por la Sintáxis

60 Vista de componentes recuperadas con Análisis Dinámico.
Compiladores Traducción Dirigida por la Sintáxis

61 Visualización de Software
Una de las formas de estudiar sistemas es representar gráficamente algunas de sus características. Para alcanzar este objetivo se necesita extraer información del código fuente y luego diseñar una vista de esa información. Por ejemplo, una vista clásica es el grafo de funciones. Dicho grafo se define de la siguiente manera: G=(P;E) P{x/ x es una función del sistema} E={(x,y) / xP  y P  x llama a y} Visualización de Software Compiladores Traducción Dirigida por la Sintáxis

62 Visualización de Software
El grafo de funciones se puede extraer usando un ET. Un ejemplo de una visualización innovadora de esta estructura es la siguiente Visualización de Software Compiladores Traducción Dirigida por la Sintáxis

63 Otra forma de presentar la relación llamador-llamado entre las funciones del sistema.
Compiladores Traducción Dirigida por la Sintáxis

64 Las DDS o ET de traducción se pueden utilizar para desarrollar software de aplicación.
Un ejemplo de esto será propocionado para su lectura. Sistemas Compiladores Traducción Dirigida por la Sintáxis

65 Software Industrial A X2 3 B 1 X1 2 1 E C Y 4
4 Software Industrial Compiladores Traducción Dirigida por la Sintáxis

66 Compilers Principles, Techniques and Tools. Aho, Setti y Ullman.
Compiler Desing. Reinhard Wilhelm y Dieter Maurer. Compiler Construction: Principles and Practice. Kenneth C. Louden. Compiler Construction. Niklaus Wirth. LISS, A linguagem eo ambiente de programação. Trabajo de fin de carrera en la UM. Implementação do WebApp Viewer: Uma Ferramenta para compreender aplicações Web. Trabajo de fin de carrera en la UM. Bibliografía Compiladores Traducción Dirigida por la Sintáxis

67 Muchas Gracias por su atención!
Diseño y Construcción de Compiladores 2008 Compiladores Traducción Dirigida por la Sintáxis


Descargar ppt "Traducción Dirigida por la Sintáxis"

Presentaciones similares


Anuncios Google