Traducción Dirigida por Sintaxis CI4721 Lenguajes de Programación II Ernesto Hernández-Novich <emhn@usb.ve> Universidad Simón Bolívar Copyright 2012-2016 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 1 / 41
Definición Dirigida por Sintaxis Una Definición Dirigida por Sintaxis (Syntax-Directed Definition o SDD por sus siglas en inglés) es la combinación de: Una G = (N, Σ, P, S) libre de contexto. Un conjunto de atributos asociados a los símbolos de la gramática. El símbolo X (N Σ) puede tener cero o más atributos asociados. De cualquier tipo conveniente: números, cadenas, valores de verdad, tablas, referencias, conjuntos,... Usaremos X.a para denotar que a es uno de los atributos de X. Un conjunto de reglas semánticas asociadas a las producciones. También se les llama acciones o reglas de etiquetado. Establecen dependencias entre atributos de los símbolos. Sin efectos de borde Gramática de Atributos. Con efectos de borde Esquemas de Traducción. Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 2 / 41
Tipos de Atributos Cada A α tiene asociado un conjunto de reglas semánticas de la forma donde f es una función b f (c 1, c 2,..., c k ) b es sintetizado para A si todos los c i pertenecen a símbolos en α. b es heredado para B si B ocurre en α y los c i pertenecen a cualquier símbolo de la producción. Diremos que b depende de los c i. Los terminales sólo tienen atributos sintetizados. También se les llama intrínsecos. Su valor depende del lexema particular. Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 3 / 41
Expresiones, de nuevo Para reconocimiento ascendente S E# E E 1 +T E T T T 1 F T F F (E) F n {S.val E.val} {E.val E 1.val + T.val} {E.val T.val} {T.val T 1.val F.val} {T.val F.val} {F.val E.val} {F.val n.val} Todos los símbolos tienen un atributo val numérico. El atributo val es sintetizado. El atributo n.val corresponde al valor numérico asociado al lexema. Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 4 / 41
La gramática de atributos no es un programa es un sistema de ecuaciones simultáneas que requiere solución. Para un w L(G) cualquiera Se construye el árbol de derivación. Se decoran los nodos con las ecuaciones de cálculo de atributos. Se evalúan los atributos en algún orden, hasta evaluarlos todos. Para evaluar un atributo es necesario haber evaluado previamente todos aquellos de los cuales depende. Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 5 / 41
Paso 1 La derivación para 6*5+12 S E # E + T T F T F n(12) F n(5) n(6) Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 6 / 41
Paso 2 Las ecuaciones S.val E.val E.val E 1.val + T.val # E 1.val T.val T.val T 1.val F.val + T.val F.val F.val n.val T 1.val F.val F.val n.val n.val 12 F.val n.val n.val 5 n.val 6 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 7 / 41
Paso 3 Resolver ecuaciones S.val E.val E.val E 1.val + T.val # E 1.val T.val T.val T 1.val F.val + T.val F.val F.val 12 T 1.val F.val F.val 6 n.val 6 F.val 5 n.val 5 n.val 12 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 8 / 41
Paso 3 Resolver ecuaciones S.val E.val E.val E 1.val + T.val # E 1.val T.val T.val T 1.val 5 + T.val 12 F.val 12 T 1.val 6 F.val 6 n.val 6 F.val 5 n.val 5 n.val 12 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 9 / 41
Paso 3 Resolver ecuaciones S.val E.val E.val E 1.val + 12 # E 1.val T.val T.val 6 5 + T.val 12 F.val 12 T 1.val 6 F.val 6 n.val 6 F.val 5 n.val 5 n.val 12 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 10 / 41
Paso 3 Resolver ecuaciones S.val E.val E.val E 1.val + 12 # E 1.val 30 T.val 30 + T.val 12 F.val 12 T 1.val 6 F.val 6 n.val 6 F.val 5 n.val 5 n.val 12 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 11 / 41
Paso 3 Resolver ecuaciones S.val E.val E.val 30 + 12 # E 1.val 30 T.val 30 + T.val 12 F.val 12 T 1.val 6 F.val 6 n.val 6 F.val 5 n.val 5 n.val 12 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 12 / 41
Obtenemos la respuesta S.val 42 E.val 42 # E 1.val 30 T.val 30 + T.val 12 F.val 12 T 1.val 6 F.val 6 n.val 6 F.val 5 n.val 5 n.val 12 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 13 / 41
Expresiones, de nuevo Para reconocimiento descendente S E# E TE E +TE 1 T FT T FT 1 F (E) F n {S.val { E.val} } E.in T.val E.val E.val { } E 1.in E.in + T.val E.val E 1.val {E {.val E.in}} T.in F.val T.val T.val { } T 1.in T.in F.val T.val T 1.val {T.val T.in} {F.val E.val} {F.val n.val} El atributo val es sintetizado el atributo in es heredado. Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 14 / 41
Paso 1 La derivación para 6*5+12 S E # T E F T + T E n(6) F T F T n(5) n(12) Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 15 / 41
Paso 2 Las ecuaciones S.val E.val E.in T.val E.val E.val # T.in F.val T.val T.val E 1.in E.in + T.val E.val E 1.val F.val n.val T 1.in T.in F.val T.val T 1.val + T.in F.val T.val T.val E 1.val E 1.in n.val 6 F.val n.val T 1.val T 1.in F.val n.val T.val T.in n.val 5 n.val 12 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 16 / 41
Paso 3 Resolver ecuaciones S.val E.val E.in T.val E.val E.val # T.in F.val T.val T.val E 1.in E.in + T.val E.val E 1.val F.val 6 T 1.in T.in F.val T.val T 1.val + T.in F.val T.val T.val E 1.val E 1.in n.val 6 F.val 5 T 1.val T 1.in F.val 12 T.val T.in n.val 5 n.val 12 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 17 / 41
Paso 3 Resolver ecuaciones S.val E.val E.in T.val E.val E.val # T.in 6 T.val T.val E 1.in E.in + T.val E.val E 1.val F.val 6 T 1.in T.in 5 T.val T 1.val + T.in 12 T.val T.val E 1.val E 1.in n.val 6 F.val 5 T 1.val T 1.in F.val 12 T.val T.in n.val 5 n.val 12 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 18 / 41
Paso 3 Resolver ecuaciones S.val E.val E.in T.val E.val E.val # T.in 6 T.val T.val E 1.in E.in + T.val E.val E 1.val F.val 6 T 1.in 6 5 T.val T 1.val + T.in 12 T.val T.val E 1.val E 1.in n.val 6 F.val 5 T 1.val T 1.in F.val 12 T.val 12 n.val 5 n.val 12 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 19 / 41
Paso 3 Resolver ecuaciones S.val E.val E.in T.val E.val E.val # T.in 6 T.val T.val E 1.in E.in + T.val E.val E 1.val F.val 6 T 1.in 30 T.val T 1.val + T.in 12 T.val 12 E 1.val E 1.in n.val 6 F.val 5 T 1.val 30 F.val 12 T.val 12 n.val 5 n.val 12 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 20 / 41
Paso 3 Resolver ecuaciones S.val E.val E.in T.val E.val E.val # T.in 6 T.val T.val E 1.in E.in + 12 E.val E 1.val F.val 6 T 1.in 30 T.val 30 + T.in 12 T.val 12 E 1.val E 1.in n.val 6 F.val 5 T 1.val 30 F.val 12 T.val 12 n.val 5 n.val 12 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 21 / 41
Paso 3 Resolver ecuaciones S.val E.val E.in T.val E.val E.val # T.in 6 T.val 30 E 1.in E.in + 12 E.val E 1.val F.val 6 T 1.in 30 T.val 30 + T.in 12 T.val 12 E 1.val E 1.in n.val 6 F.val 5 T 1.val 30 F.val 12 T.val 12 n.val 5 n.val 12 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 22 / 41
Paso 3 Resolver ecuaciones S.val E.val E.in 30 E.val E.val # T.in 6 T.val 30 E 1.in E.in + 12 E.val E 1.val F.val 6 T 1.in 30 T.val 30 + T.in 12 T.val 12 E 1.val E 1.in n.val 6 F.val 5 T 1.val 30 F.val 12 T.val 12 n.val 5 n.val 12 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 23 / 41
Paso 3 Resolver ecuaciones S.val E.val E.in 30 E.val E.val # T.in 6 T.val 30 E 1.in 30 + 12 E.val E 1.val F.val 6 T 1.in 30 T.val 30 + T.in 12 T.val 12 E 1.val E 1.in n.val 6 F.val 5 T 1.val 30 F.val 12 T.val 12 n.val 5 n.val 12 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 24 / 41
Paso 3 Resolver ecuaciones S.val E.val E.in 30 E.val E.val # T.in 6 T.val 30 E 1.in 42 E.val E 1.val F.val 6 T 1.in 30 T.val 30 + T.in 12 T.val 12 E 1.val 42 n.val 6 F.val 5 T 1.val 30 F.val 12 T.val 12 n.val 5 n.val 12 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 25 / 41
Paso 3 Resolver ecuaciones S.val E.val E.in 30 E.val E.val # T.in 6 T.val 30 E 1.in 42 E.val 42 F.val 6 T 1.in 30 T.val 30 + T.in 12 T.val 12 E 1.val 42 n.val 6 F.val 5 T 1.val 30 F.val 12 T.val 12 n.val 5 n.val 12 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 26 / 41
Paso 3 Resolver ecuaciones S.val E.val E.in 30 E.val 42 # T.in 6 T.val 30 E 1.in 42 E.val 42 F.val 6 T 1.in 30 T.val 30 + T.in 12 T.val 12 E 1.val 42 n.val 6 F.val 5 T 1.val 30 F.val 12 T.val 12 n.val 5 n.val 12 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 27 / 41
Obtenemos la respuesta S.val 42 E.in 30 E.val 42 # T.in 6 T.val 30 E 1.in 42 E.val 42 F.val 6 T 1.in 30 T.val 30 + T.in 12 T.val 12 E 1.val 42 n.val 6 F.val 5 T 1.val 30 F.val 12 T.val 12 n.val 5 n.val 12 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 28 / 41
Complejo, pero conveniente Incluir atributos heredados cambió el orden de recorrido del árbol. En este ejemplo, solamente bajaron. En general, podrían moverse hacia hijos o hacia hermanos. Los atributos heredados son convenientes porque permiten expresar las dependencias en el contexto. Siempre es posible convertir una definición dirigida por sintaxis para usar sólo atributos sintetizados Reescribiendo la gramática quizás deformándola. Cambiando el tipo de los atributos. Para algunas construcciones es más natural utilizar atributos heredados. Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 29 / 41
Complejo, pero conveniente Incluir atributos heredados cambió el orden de recorrido del árbol. En este ejemplo, solamente bajaron. En general, podrían moverse hacia hijos o hacia hermanos. Los atributos heredados son convenientes porque permiten expresar las dependencias en el contexto. Siempre es posible convertir una definición dirigida por sintaxis para usar sólo atributos sintetizados Reescribiendo la gramática quizás deformándola. Cambiando el tipo de los atributos. Para algunas construcciones es más natural utilizar atributos heredados. Cómo encontramos el orden de evaluación? Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 29 / 41
Orden de Evaluación Relación de Dependencia Un Grafo de Dependencia permite representar el flujo de información entre los atributos de un árbol particular. Por cada nodo del árbol X que tenga un atributo X.b, definir un nodo en el grafo para X.b Teniendo X.b f (c 1, c 2,..., c k ) entonces se establece una arista en el grafo con origen en el nodo que define a c i y destino en el nodo X.b. Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 30 / 41
Orden de Evaluación Estableciendo el Orden de Evaluación El grafo caracteriza los órdenes de evaluación posibles. Si existe una secuencia de nodos N 1, N 2,..., N k tal que si hay una arista entre N i y N j entonces i < j, esa secuencia es un orden de evaluación posible. Corresponde al Orden Topológico del grafo. Si hay un ciclo en el grafo, es imposible obtener el orden. Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 31 / 41
Orden de Evaluación Estableciendo el Orden de Evaluación El grafo caracteriza los órdenes de evaluación posibles. Si existe una secuencia de nodos N 1, N 2,..., N k tal que si hay una arista entre N i y N j entonces i < j, esa secuencia es un orden de evaluación posible. Corresponde al Orden Topológico del grafo. Si hay un ciclo en el grafo, es imposible obtener el orden. Podemos usar DFS sobre un árbol particular pero es muy costoso tratar de determinarlo para una SDD. En la práctica, queremos SDD en los cuales se garantice la existencia de un orden. Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 31 / 41
Orden de Evaluación Definiciones S-Atribuidas De abajo hacia arriba Una SDD que sólo usa atributos sintetizados se dice S-atribuida. Evaluar el cálculo de atributos desde las hojas hacia la raíz. Recorrido postorden. Los valores se propagan de abajo hacia arriba. Coinciden con la operación de un reconocedor ascendente. Cada reducción corresponde con la evaluación de reglas. El árbol se construye de las hojas hacia la raíz. Las definiciones S-atribuidas son las preferidas en la práctica Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 32 / 41
Orden de Evaluación Definiciones L-Atribuidas De izquierda a derecha, y arriba hacia abajo Una SDD es L-Atribuida si todo atributo: Es sintetizado. Si se tiene A X 1 X 2... X n y X i.a es un atributo heredado, el cálculo solamente puede usar: Atributos heredados asociados con A. Atributos heredados o sintetizados asociados con cualesquiera X 1, X 2,... X i 1. Atributos heredados de X i siempre que no establezcan ciclos. Coinciden con la operación de un reconocedor descendente. Expansiones usan resultados calculados a su izquierda en la producción. Cuando se alcanza el final de la producción, se calculan resultados para el no terminal expandido. Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 33 / 41
Esquemas de Traducción Controlar los Efectos de Borde Los efectos de borde son necesarios en la práctica Para generar resultados visibles S E# {printe.val} Para recopilar información tabla de símbolos, tipos,... Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 34 / 41
Esquemas de Traducción Controlar los Efectos de Borde Los efectos de borde son necesarios en la práctica Para generar resultados visibles S E# {printe.val} Para recopilar información tabla de símbolos, tipos,... Permitiremos efectos de borde controlados Efectos incidentales que no condicionan el orden de evaluación si no estuvieran los efectos, la evaluación seguiría siendo igual. Organizar el orden de evaluación de manera que cualquier otro orden de evaluación produzca el mismo resultado El orden preferido agrega aristas implícitas. El orden preferido agrega producciones inocuas. Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 34 / 41
Esquemas de Traducción Controlar los Efectos de Borde Los efectos de borde son necesarios en la práctica Para generar resultados visibles S E# {printe.val} Para recopilar información tabla de símbolos, tipos,... Permitiremos efectos de borde controlados Efectos incidentales que no condicionan el orden de evaluación si no estuvieran los efectos, la evaluación seguiría siendo igual. Organizar el orden de evaluación de manera que cualquier otro orden de evaluación produzca el mismo resultado El orden preferido agrega aristas implícitas. El orden preferido agrega producciones inocuas. Acciones con efectos de borde consideradas como generadoras de un atributo sintetizado que no nos importa propagar. Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 34 / 41
Esquemas de Traducción Mutar o no mutar, esa es la cuestión Gramática de Atributos como modelo matemático. Construir el sistema de ecuaciones. Encontrar y usar un orden de evaluación válido. Esquemas de Traducción como implantación concreta. Imponer un orden de evaluación a priori izquierda a derecha. Imponer un orden de dependencia a priori S-Atribuido o L-Atribuido. Permitir operaciones arbitrarias en las acciones semánticas, explotando sus efectos de borde. Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 35 / 41
Esquemas de Traducción Gramática de Atributos Definición L-Atribuida D T L T int T float L L 1, id L id {L.in T.type} {T.type integer } {T.type float } {L 1.in L.in; addtype(id.lexema, L.in} {addtype(id.lexema, L.in)} Declaraciones al estilo C. Se sintetiza type en T se hereda hacia L. Cada identificador de la lista se instala con su tipo. Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 36 / 41
Esquemas de Traducción Esquema de Traducción Definición L-Atribuida D T {L.in T.type} L T int {T.type integer } T float {T.type float } L {L 1.in L.in} L 1, id {addtype(id.lexema, L.in} L id {addtype(id.lexema, L.in)} Acciones en posiciones convenientes según sus efectos de borde. Posiciones seleccionadas pensando en el reconocedor descendente. Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 37 / 41
Esquemas de Traducción Gramática de Atributos es el Esquema Definición S-Atribuida D T L T int T float L L 1, id L id { s L.set hacer addtype(s, T.type)} {T.type integer } {T.type float } {L.set L 1.set id.lexema} {L.set {id.lexema}} Declaraciones al estilo C. Se sintetiza type en T se sintetiza el conjunto de símbolos set en L. Una vez construido el conjunto, se instalan los identificadores. Posiciones seleccionadas pensando en el reconocedor descendente. Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 38 / 41
Esquemas de Traducción Un ejemplo de reescritura gramatical La SDD obvia resulta inconveniente D L : T T int T float L L 1, id L id {L.in T.type} {T.type integer } {T.type float } {L 1.in L.in; addtype(id.lexema, L.in} {addtype(id.lexema, L.in)} Declaraciones al estilo Pascal. Se sintetiza type en T se hereda hacia L en in. No es S-Atribuida ni L-Atribuida Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 39 / 41
Esquemas de Traducción Un ejemplo de reescritura gramatical La SDD transformada también D id L T int T float L, id L 1 L :T {addtype(id.lexema, L.type)} {T.type integer } {T.type float } {L.type L 1.type; addtype(id.lexema, L 1.type)} {L.type T.type} Ahora es S-Atribuida...... y horrible. Recursiva por derecha inconveniente para LR. Es preferible complicar los atributos y su manejo en lugar de complicar la gramática. Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 40 / 41
Referencias Bibliográficas Bibliografía [Aho] Secciones 5.1 y 5.2 Ejercicios 5.1.1 a 5.1.3, 5.2.1 a 5.2.6 [Scott] Secciones 4.1 a 4.3 Ejercicios 4.1 a 4.5 Hernández-Novich (USB) Traducción Dirigida por Sintaxis 2016 41 / 41