traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico...
TRANSCRIPT
![Page 1: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/1.jpg)
1
Traducción dirigida por la sintaxis
![Page 2: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/2.jpg)
2
INDICE
1. Gramáticas con atributos2. Evaluación de los atributos
2.1 Evaluación mediante grafos2.2 Evaluación durante el parsing
2.2.1 Esquemas de traducción2.2.2 Traducción top-down2.2.3 Traducción bottom-up
![Page 3: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/3.jpg)
3
1. Gramáticas con atributos
Cada símbolo de una gramática puede tener asociados uno o más atributos.
Los atributos pueden ser de cualquier tipo de dato, y su significado depende del programador (valor de una constante, valor de una expresión, puntero, etc…)
N A ‘t’ B C
Representación: N.n A.a ‘t’.t B.b C.c
![Page 4: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/4.jpg)
4
Tipos de atributos
1. Sintetizados2. Heredados
SintetizadosN A B CN.s = f ( A.a , B.b , C.c , N.i )
N.i : atributos que N hereda de su padre o sus hermanos
![Page 5: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/5.jpg)
5
Tipos de atributos
Heredados
N A B C
B.i = f (A.a , B.b , C.c , N.n)
![Page 6: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/6.jpg)
6
Especificación de atributos: reglas semánticas
Reglas Reglas semánticas
A B C D A.a = B.b + C.cD.i = B.b – C.c
C E F C.c = E.e * F.f
Reglas + Reglas semánticas =
Definición dirigida por sintaxis
![Page 7: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/7.jpg)
7
Ejemplo 1: definición dirigida por sintaxis
REGLAS REGLAS SEMÁNTICAS
L E ‘\n’ print (E.val)E E1 + T E.val = E1.val + T.valE T E.val = T.valT T1 * F T.val = T1.val * F.valT F T.val = F.valF ( E ) F.val = E.valF cte F.val = cte.val
![Page 8: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/8.jpg)
8
Ejemplo 1: árbol sintáctico ilustrativo
L
\nE
E + T
T
F
c te
3
T F
F
c te
5
cte
4
*
+ *
(v a l= 3 ) (v a l= 5 )
(v a l= 4 )(v a l= 3 )
(v a l= 3 )
(v a l= 3 )
(v a l= 5 )
(v a l= 5 ) (v a l= 4 )
(v a l= 2 0 )
(v a l= 2 3 )
p r in t (2 3 )
![Page 9: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/9.jpg)
9
Ejemplo 2: definición dirigida por sintaxis
REGLAS REGLAS SEMÁNTICAS
D T L L.i = T.typeT int T.type = 0T real T.type = 1L L1 , id L1.i = L.i
save(id.ptr , L.i)
L id save(id.ptr ,L.i)
![Page 10: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/10.jpg)
10
Ejemplo 2: árbol sintáctico ilustrativo
D
in t
i n t b ca ,
( t y p e = 0 )T L
L , id
L , id
,
id
( i = 0 )
( i = 0 )
( i = 0 )
![Page 11: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/11.jpg)
11
Ejemplo 3: definición dirigida por sintaxis
REGLAS REGLAS SEMÁNTICAS
E E1 + T E.ptr = makenode (+ , E1.ptr , T.ptr)E E1 – T E.ptr = makenode (- , E1.ptr , T.ptr)E T E.ptr = T.ptrT ( E ) T.ptr = E.ptrT id T.ptr = makeleaf (id , id.ptr)T cte T.ptr = makeleaf (cte , cte.valor)
![Page 12: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/12.jpg)
12
Ejemplo 3: árbol sintáctico ilustrativo
E
ba 5-
(p tr )
+
E + T
E - Tid
c teT
id
idc te 5id
(p tr )
(p tr )
(p tr )
(p tr )
(p tr )
+
-
a b
![Page 13: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/13.jpg)
13
ÍNDICE
1. Gramáticas con atributos2. Evaluación de los atributos
2.1 Evaluación mediante grafos2.2 Evaluación durante el parsing
2.2.1 Esquemas de traducción2.2.2 Traducción top-down2.2.3 Traducción bottom-up
![Page 14: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/14.jpg)
14
2. EVALUACIÓN DE LOS ATRIBUTOS
Una Definición dirigida por sintaxis especifica el valor de los atributos, pero no especifica la forma de evaluación.
Existen 2 tipos de métodos para la evaluación:
2.1 Evaluación mediante grafos: la evaluación es independiente del reconocimiento sintáctico (parsing).
2.2 Evaluación durante el parsing: la evaluación se produce durante el reconocimiento sintáctico.
![Page 15: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/15.jpg)
15
2.1 Evaluación mediante grafos
METODOLOGÍA
• Durante el proceso de parsing se genera el grafo de dependencias de los atributos.
• Posteriormente, se computan los valores de los atributos respetando el orden parcial impuesto por el grafo de dependencias.
![Page 16: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/16.jpg)
16
Ejemplo
REGLAS REGLAS SEMÁNTICAS
E E1 + E2 E.val = E1.val + E2.valE E1 * E2 E.val = E1.val * E2.valE ( E1 ) E.val = E1.valE - E1 E.val = - E1.valE cte E.val = cte.val
![Page 17: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/17.jpg)
17
Árbol sintáctico y grafo de dependencias
E
E + E
E
-
cte
2
E E-
cte
3
cte
5
*
+ *
2
2
-2
3 5
3 5
15
13
Á rbol sintácticoGrafo de dependencias
![Page 18: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/18.jpg)
18
Ventajas y desventajas
Ventaja importante
La evaluación mediante grafos es válida para cualquier definición dirigida por sintaxis (que no contenga ciclos)
Desventajas
Hay que construir un grafo que puede ser enorme (ESPACIO y TIEMPO) y la evaluación se realiza después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva)
![Page 19: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/19.jpg)
19
2.2 Evaluación durante el parsing
Se trata de evaluar los atributos durante el proceso de parsing.
Ventajas
No se precisa de grafo de dependencias, y la evaluación es un poco más intuitiva.
Desventaja principal
No es una metodología válida para todo tipo de definiciones dirigidas por sintaxis.
![Page 20: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/20.jpg)
20
2.2.1 Esquemas de traducción
Un esquema de traducción especifica la forma en que se van a evaluar los atributos durante un proceso de parsing.
Reglas sintácticas
+ } Definición dirigida por sintaxis
Reglas semánticas
![Page 21: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/21.jpg)
21
Esquemas de traducción
Reglas sintácticas
+ } Esquema de traducción
ACCIONES
N A { acción_1 } B C { acción_2 }
![Page 22: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/22.jpg)
22
Diseño del esquema de traducción
Dada una definición dirigida por sintaxis
¿ Cómo diseñamos el esquema de traducción ?
El diseño del esquema de traducción depende del tipo de recorrido que se realiza durante el proceso de parsing. Fundamentalmente tenemos 2 tipos de diseño:
2.2.2 Traducción top-down2.2.3 Traducción bottom-up
![Page 23: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/23.jpg)
23
2.2.2 Esquemas de traducción top-down
A. Diseño del esquema de traducción
B. Implementación del esquema de traducción
C. Soluciones para algunos problemas
![Page 24: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/24.jpg)
24
A. Diseño de esquemas de traducción top-down
N A B C
Atributos sintetizados
N.s = f ( A.a , B.b , C.c , N.i )
Atributos heredados
B.i = f (A.a , B.b , C.c , N.n)
![Page 25: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/25.jpg)
25
Metodología
1. El cálculo de un atributo sintetizado se realiza al final del procedimiento del no-terminal correspondiente.
2. El cálculo de un atributo heredado se realiza antes de la llamada al procedimiento del no-terminal correspondiente.
![Page 26: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/26.jpg)
26
Ejemplo 1 (I): definición dirigida por sintaxis
REGLAS REGLAS SEMÁNTICAS
E E1 + E2 E.val = E1.val + E2.valE E1 * E2 E.val = E1.val * E2.valE ( E1 ) E.val = E1.valE - E1 E.val = - E1.valE cte E.val = cte.val
![Page 27: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/27.jpg)
27
Ejemplo 1 (II): esquema de traducción top-down
REGLAS y ACCIONES
E E1 + E2 { E.val = E1.val + E2.val } A1E E1 * E2 { E.val = E1.val * E2.val } A2E ( E1 ) { E.val = E1.val } A3E - E1 { E.val = - E1.val } A4E cte { E.val = cte.val } A5
![Page 28: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/28.jpg)
28
Ejemplo 1 (III): árbol sintáctico con las acciones
E
E + E
E
-
cte
2
E E-
cte
3
cte
5
*
+ *
A1
A2A4
A5 A5 A5
![Page 29: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/29.jpg)
29
REGLAS REGLAS SEMÁNTICAS
D T L L.i = T.typeT int T.type = 0T real T.type = 1L L1 , id L1.i = L.i
save(id.ptr , L.i)
L id save(id.ptr ,L.i)
Ejemplo 2 (I): definición dirigida por sintaxis
![Page 30: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/30.jpg)
30
Ejemplo 2 (II): esquema de traducción top-down
REGLAS y ACCIONES
D T { L.i = T.type } L A1T int { T.type = 0 } A2T real { T.type = 1 } A3L { L1.i = L.i } L1 , id { save(id.ptr , L.i) } A4,A5L id { save(id.ptr ,L.i) } A6
![Page 31: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/31.jpg)
31
Ejemplo 2 (III): árbol sintáctico con las acciones
D
in t
i n t b ca ,
T L
L , id
L , id
,
id
A 1
A 2 A 5A 4
A 4 A 5
A 6
![Page 32: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/32.jpg)
32
Restricciones
¿ Se puede diseñar un esquema de traducción top-downpara cualquier definición dirigida por sintaxis ?
REGLAS REGLAS SEMÁNTICAS
N A B C B.i = f (C.s)B D F B.s = g (D.s, F.s, B.i)
No podemos diseñar un esquema de traducción top-down para esta definición dirigida por sintaxis.
![Page 33: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/33.jpg)
33
Clasificación de las definiciones dirigidas por sintaxis
S-Attributed
Solamente contienen atributos de tipo sintetizado.
L-AttributedContienen atributos sintetizados y heredados, pero éstos últimos tienen la siguiente restricción:
A X1 X2 … Xj
Xk.i = f (X1.x1, X2.x2, … , Xk-1.xk-1, A.i)
![Page 34: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/34.jpg)
34
Validez del esquema de traducción top-down
La metodología mostrada anteriormente para diseñar el esquema de traducción para reconocedores top-down
solamente es válida
para definiciones dirigidas por sintaxis que sean L-Attributed (por supuesto, están incluidas las definiciones S-Attributed)
![Page 35: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/35.jpg)
35
B. Implementación de esquemas de traducción top-down
Hay que modificar el parser top-down considerando:
1. Cada procedimiento recibe los atributos heredados a través de su lista de parámetros.
2. Las acciones correspondientes al cálculo de atributos deben insertarse en los puntos correspondientes de cada procedimiento.
3. Al final de cada procedimiento deben evaluarse los atributos sintetizados, que deben ser retornados por el procedimiento.
![Page 36: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/36.jpg)
36
Ejemplo general
N { A1 } A { A2 } B { A3 } C { A4 }
Procedure N (Atributos que N hereda)
{ A1 } / Cálculo de atributos que A heredaA.s = A (Atributos que A hereda)
{ A2 } / Cálculo de atributos que B heredaB.s = B (Atributos que B hereda)
{ A3 } / Cálculo de atributos que C heredaC.s = C (Atributos que C hereda)
{ A4 } / Cálculo de atributos que N sintetizaN.s = f (A.a, B.b, C.c, N.i)
return (N.s)
![Page 37: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/37.jpg)
37
Ejemplo (I): definición dirigida por sintaxis
REGLAS REGLAS SEMÁNTICAS
D T L L.i = T.typeT int T.type = 0T real T.type = 1L L1 , id L1.i = L.i
save(id.ptr , L.i)
L id save(id.ptr ,L.i)
![Page 38: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/38.jpg)
38
Ejemplo (II): esquema de traducción top-down
REGLAS y ACCIONES
D T { L.i = T.type } LT int { T.type = 0 }T real { T.type = 1 }L { L1.i = L.i } L1 , id { save(id.ptr , L.i) }L id { save(id.ptr ,L.i) }
![Page 39: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/39.jpg)
39
Ejemplo (III): implementación del esquema de traducción
Procedure D ( ) Procedure T ( )
if (lookahead= “int”)T.type = T ( ); newlookahead;
{ T.type = 0; }{ L.i = T.type; } return (T.type);
if (lookahead=“real”)L (L.i); newlookahead;
{ T.type = 1; }return (T.type)
error ();
![Page 40: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/40.jpg)
40
Ejemplo (III): implementación del esquema de traducción
Procedure L (L.i) OJO !! No podemos implementar L correctamente
Si aplicamos la regla: L L , id debido a la recursividad porla izquierda
{ L1.i = L.i; }L (L1.i);if (lookahead=‘,’) newlookahead else error ();if (lookahead=‘id’) newlookahead else error ();save (id.ptr, L.i);
Si aplicamos la regla: L id
if (lookahead=‘id’) newlookahead else error ();save (id.ptr, L.i);
![Page 41: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/41.jpg)
41
C. Soluciones para algunos problemas
Los esquemas de traducción top-down tienen problemas de implementación cuando aparecen 2 tipos de situaciones:
C1. Recursividad por la izquierda
C2. Factorización
![Page 42: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/42.jpg)
42
C1. Recursividad por la izquierda
Reglas + Acciones
E E1 + T { E.val = E1.val + T.val }E E1 - T { E.val = E1.val - T.val }E T { E.val = T.val }T ( E ) { T.val = E.val }T num { T.val = num.val }
Eliminando la recursividad por la izquierda tal como hemos visto hasta ahora, nos quedaría el siguiente esquema:
![Page 43: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/43.jpg)
43
Problema al eliminar la recursividad por la izquierda
E T { E.val = T.val } RR + T { E.val = E1.val + T.val } R
| - T { E.val = E1.val - T.val } R| ε
T ( E ) { T.val = E.val }T num { T.val = num.val }
![Page 44: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/44.jpg)
44
Posible solución: recursividad por la derecha
Reglas + Acciones
E T + E1 { E.val = T.val + E1.val}E T - E1 { E.val = T.val - E1.val}E T { E.val = T.val }T ( E ) { T.val = E.val }T num { T.val = num.val }
Esta solución no es válida porque no conserva la asociatividad por la izquierda de los operadores.
![Page 45: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/45.jpg)
45
Asociatividad incorrecta: ilustración
E
T - E
num
3
T E
num
5
num
1
+
- +
T
(6)
(1)
(1)(5)
(5)
(-3)
(3)
(3)
![Page 46: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/46.jpg)
46
Una solución válida: cambiar las reglas semánticas
Reglas Reglas semánticas
E T R { R.i=T.val ; E.s=R.s }R + T R1 { R1.i=R.i + T.val ; R.s=R1.s }
| - T R1 { R1.i=R.i - T.val ; R.s=R1.s }| ε { R.s=R.i }
T ( E ) { T.val = E.val }T num { T.val = num.val }
![Page 47: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/47.jpg)
47
Esquema gráfico de los atributos
E
T
-
R
num
3
T
Rnum
5
num
1
R
- +
T (i) (s)
(i)
+
ε
(i)
(s)
(s)
(s)(val)
(val)
(val)
![Page 48: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/48.jpg)
48
Esquema de traducción resultante
Reglas + Acciones
E T { R.i=T.val } R { E.s=R.s }
R + T { R1.i=R.i + T.val } R1 { R.s=R1.s }
| - T { R1.i=R.i - T.val } R1 { R.s=R1.s }
| ε { R.s=R.i }
T ( E ) { T.val = E.val }
T num { T.val = num.val }
![Page 49: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/49.jpg)
49
Implementación del esquema
Se deja como práctica de laboratorio
![Page 50: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/50.jpg)
50
Generalización (para atributos sintetizados)
Sea la siguiente definición dirigida por sintaxis, y sea un atributo sintetizado “a” genérico:
A A1 Y A.a=g(A1.a, Y.y)A X A.a=f(X.x)
Para una derivación a izquierdas genérica tenemos:
A A Y2 A Y1 Y2 X Y1 Y2
A.a=g( g( f(X.x), Y1.y), Y2.y)
![Page 51: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/51.jpg)
51
Gráficamente
A
Y2(a)
(a)
(a)
A
A Y1
X
(y)
(y)
f(X.x)
g( f(X.x), Y1.y )
g( g(f(X.x), Y1.y), Y2.y)
![Page 52: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/52.jpg)
52
Solución para atributos sintetizados
Eliminar recursividad + redefinir las reglas semánticas
REGLAS REGLAS SEMÁNTICAS
A X R R.i=f(X.x); A.s=R.sR Y R1 R1.i=g(R.i,Y.y); R.s=R1.sR ε R.s=R.i
A continuación lo expresamos gráficamente
![Page 53: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/53.jpg)
53
Gráficamente
A
R
(y)
(s)
(y)
X
Y1
Y2
ε
i=g( f(X.x), Y1.y )
i=g( g(f(X.x), Y1.y), Y2.y)
R
R
(x) i=f(X.x) (s)
(s)
(s=i)
![Page 54: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/54.jpg)
54
Esquema de traducción
A X { R.i=f(X.x) }R { A.s=R.s }
R Y { R1.i=g(R.i, Y.y) }R1 { R.s=R1.s }
R ε { R.s=R.i }
![Page 55: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/55.jpg)
55
Generalización para atributos heredados por copia
Sea la siguiente definición dirigida por sintaxis, y sea un atributo heredado por copia “i” genérico:
A A1 Y A.a=g(A1.a, Y.y); A1.i=A.iA X A.a=f(X.x, A.i)
Para una derivación a izquierdas genérica tenemos:
A1 A2 Y2 A3 Y1 Y2 X Y1 Y2
A.a=g( g( f(X.x, A3.i), Y1.y), Y2.y)
![Page 56: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/56.jpg)
56
Gráficamente
A1
Y2(a)
(a)
(a)
A2
A3 Y1
X
(y)
(y)
f(X.x, A3.i=v)
g( f(X.x, v), Y1.y )
g( g(f(X.x, v), Y1.y), Y2.y)
(x)
(i)
(i)
(i=v)
![Page 57: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/57.jpg)
57
Solución para atributos heredados por copia
Eliminar recursividad + redefinir las reglas semánticas
REGLAS REGLAS SEMÁNTICAS
A X R R.i=f(X.x, A.i=v); A.s=R.sR Y R1 R1.i=g(R.i,Y.y); R.s=R1.sR ε R.s=R.i
A continuación lo expresamos gráficamente
![Page 58: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/58.jpg)
58
Gráficamente
A
R
(y)
(s)
(y)
X
Y1
Y2
ε
i=g( f(X.x,v), Y1.y )
i=g(g(f(X.x,v), Y1.y), Y2.y)
R
R
(x) i=f(X.x,v) (s)
(s)
(s=i)
(i=v)
![Page 59: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/59.jpg)
59
Generalización para atributos heredados genéricos
Sea la siguiente definición dirigida por sintaxis, y sea un atributo heredado genérico “i” :
A A1 Y A.a=g(A1.a, Y.y); A1.i=h(A.i)A X A.a=f(X.x, A.i)
Sea h(A.i)=A.i +1 (sea cero su valor en el primer nodo A)
Para una derivación a izquierdas genérica tenemos:
A1 A2 Y2 A3 Y1 Y2 X Y1 Y2
A.a=g( g( f(X.x, A3.i), Y1.y), Y2.y)
![Page 60: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/60.jpg)
60
Gráficamente
A
Y2(a)
(a)
(a)
A
A Y1
X
(y)
(y)
f(X.x, 2)
g( f(X.x, 2), Y1.y )
g( g(f(X.x, 2), Y1.y), Y2.y)
(x)
(i=2)
(i=1)
(i=0)
![Page 61: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/61.jpg)
61
Solución para atributos heredados genéricos
Eliminar recursividad + redefinir las reglas semánticas
REGLAS REGLAS SEMÁNTICAS
A X R R.i=f(X.x, ???? ); A.s=R.sR Y R1 R1.i=g(R.i,Y.y); R.s=R1.sR ε R.s=R.i
No conocemos el valor final del atributo heredado por A hasta que se recorre todo el árbol hacia abajo. Sin embargo, necesitamos su valor para los cómputos que se realizan al bajar en el árbol. Por tanto, para este tipo de definiciones dirigidas por sintaxis no podemos utilizar reconocedores top-down.
A continuación lo expresamos gráficamente
![Page 62: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/62.jpg)
62
Gráficamente
A
R
(y)
(s)
(y)
X
Y1
Y2
ε
i=g( f(X.x, ?? ), Y1.y )
i=g(g(f(X.x, ?? ), Y1.y), Y2.y)
R
R
(x) i=f(X.x, ?? ) (s)
(s)
(s=i)
(i=0)
![Page 63: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/63.jpg)
63
C2. Problema de la Factorización
Reglas Reglas semánticas(sean operadores asociativos por la derecha)
E T + E1 E.val = T.val + E1.valE T - E1 E.val = T.val - E1.val E T E.val = T.val T ( E ) T.val = E.val T num T.val = num.val
![Page 64: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/64.jpg)
64
Esquema de traducción top-down
Reglas + Acciones
E T + E1 { E.val = T.val + E1.val }E T - E1 { E.val = T.val - E1.val }E T { E.val = T.val }T ( E ) { T.val = E.val }T num { T.val = num.val }
Si factorizamos, el resultado es el siguiente:
![Page 65: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/65.jpg)
65
Esquema de traducción resultante de la factorización
Reglas + Acciones
E T RR + E1 { E.val = T.val + E1.val }R - E1 { E.val = T.val - E1.val }R ε { E.val = T.val }T ( E ) { T.val = E.val }T num { T.val = num.val }
El esquema no es válido. Por tanto, primero se debe factorizar, y posteriormente redefinir los atributos.
![Page 66: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/66.jpg)
66
Factorización y nuevas reglas semánticas
Reglas Reglas semánticas
E T R E.val = T.val + R.valR + E R.val = + E.val R - E R.val = - E.val R ε R.val = 0T ( E ) T.val = E.val T num T.val = num.val
![Page 67: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/67.jpg)
67
Esquema de traducción
Reglas + Acciones
E T R { E.val = T.val + R.val }R + E { R.val = + E.val }R - E { R.val = - E.val } R ε { R.val = 0 }T ( E ) { T.val = E.val } T num { T.val = num.val }
![Page 68: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/68.jpg)
68
Ejemplo gráfico
E
T R
- E
T R
+ E
T R
ε
3 − 5 + 2
( 0 )( 2 )
( 2 )
( 2 )( 5 )
( 7 )
( − 7 )( 3 )
( − 4 )
![Page 69: Traducción dirigida por la sintaxis - ulpgc.es · después de finalizar el análisis sintáctico (la evaluación durante el parsing es un poco más intuitiva) 19 ... diseñar el](https://reader031.vdocuments.site/reader031/viewer/2022021906/5bb6654009d3f2a4338b696f/html5/thumbnails/69.jpg)
69
Ejercicio
Reglas Reglas semánticas
L E L.s = E.val * E.nE T + E1 E.val = T.val + E1.val
E.n = E1.n + 1E T - E1 E.val = T.val - E1.val
E.n = E1.n + 1E T E.val = T.val
E.n = 1T ( E ) T.val = E.val T num T.val = num.val
Obtener un esquema de traducción top-down para esta definición dirigida por sintaxis.