Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
(i)
(s)
(s)
(s)
(val)
(val)
(val)
48
Esquema de traduccin resultante
Reglas + Acciones
E T { R.i=T.val } R { E.s=R.s }
R + T { R
1
.i=R.i + T.val } R
1
{ R.s=R
1
.s }
| - T { R
1
.i=R.i - T.val } R
1
{ R.s=R
1
.s }
| { R.s=R.i }
T ( E ) { T.val = E.val }
T num { T.val = num.val }
49
Implementacin del esquema
Se deja como prctica de laboratorio
50
Generalizacin (para atributos sintetizados)
Sea la siguiente definicin dirigida por sintaxis, y sea un
atributo sintetizado a genrico:
A A
1
Y A.a=g(A
1
.a, Y.y)
A X A.a=f(X.x)
Para una derivacin a izquierdas genrica tenemos:
A A Y
2
A Y
1
Y
2
X Y
1
Y
2
A.a=g( g( f(X.x), Y
1
.y), Y
2
.y)
51
Grficamente
A
Y
2
(a)
(a)
(a)
A
A
Y
1
X
(y)
(y)
f(X.x)
g( f(X.x), Y
1
.y )
g( g(f(X.x), Y
1
.y), Y
2
.y)
52
Solucin para atributos sintetizados
Eliminar recursividad + redefinir las reglas semnticas
REGLAS REGLAS SEMNTICAS
A X R R.i=f(X.x); A.s=R.s
R Y R
1
R
1
.i=g(R.i,Y.y); R.s=R
1
.s
R R.s=R.i
A continuacin lo expresamos grficamente
53
Grficamente
A
R
(y)
(s)
(y)
X
Y
1
Y
2
i=g( f(X.x), Y
1
.y )
i=g( g(f(X.x), Y
1
.y), Y
2
.y)
R
R
(x)
i=f(X.x) (s)
(s)
(s=i)
54
Esquema de traduccin
A X { R.i=f(X.x) }
R { A.s=R.s }
R Y { R
1
.i=g(R.i, Y.y) }
R
1
{ R.s=R
1
.s }
R { R.s=R.i }
55
Generalizacin para atributos heredados por copia
Sea la siguiente definicin dirigida por sintaxis, y sea un
atributo heredado por copia i genrico:
A A
1
Y A.a=g(A
1
.a, Y.y); A
1
.i=A.i
A X A.a=f(X.x, A.i)
Para una derivacin a izquierdas genrica tenemos:
A
1
A
2
Y
2
A
3
Y
1
Y
2
X Y
1
Y
2
A.a=g( g( f(X.x, A
3
.i), Y
1
.y), Y
2
.y)
56
Grficamente
A
1
Y
2
(a)
(a)
(a)
A
2
A
3
Y
1
X
(y)
(y)
f(X.x, A
3
.i=v)
g( f(X.x, v), Y
1
.y )
g( g(f(X.x, v), Y
1
.y), Y
2
.y)
(x)
(i)
(i)
(i=v)
57
Solucin para atributos heredados por copia
Eliminar recursividad + redefinir las reglas semnticas
REGLAS REGLAS SEMNTICAS
A X R R.i=f(X.x, A.i=v); A.s=R.s
R Y R
1
R
1
.i=g(R.i,Y.y); R.s=R
1
.s
R R.s=R.i
A continuacin lo expresamos grficamente
58
Grficamente
A
R
(y)
(s)
(y)
X
Y
1
Y
2
i=g( f(X.x,v), Y
1
.y )
i=g(g(f(X.x,v), Y
1
.y), Y
2
.y)
R
R
(x)
i=f(X.x,v)
(s)
(s)
(s=i)
(i=v)
59
Generalizacin para atributos heredados
genricos
Sea la siguiente definicin dirigida por sintaxis, y sea un atributo
heredado genrico i :
A A
1
Y A.a=g(A
1
.a, Y.y); A
1
.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 derivacin a izquierdas genrica tenemos:
A
1
A
2
Y
2
A
3
Y
1
Y
2
X Y
1
Y
2
A.a=g( g( f(X.x, A
3
.i), Y
1
.y), Y
2
.y)
60
Grficamente
A
Y
2
(a)
(a)
(a)
A
A
Y
1
X
(y)
(y)
f(X.x, 2)
g( f(X.x, 2), Y
1
.y )
g( g(f(X.x, 2), Y
1
.y), Y
2
.y)
(x)
(i=2)
(i=1)
(i=0)
61
Solucin para atributos heredados genricos
Eliminar recursividad + redefinir las reglas semnticas
REGLAS REGLAS SEMNTICAS
A X R R.i=f(X.x, ???? ); A.s=R.s
R Y R
1
R
1
.i=g(R.i,Y.y); R.s=R
1
.s
R 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 cmputos 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 continuacin lo expresamos grficamente
62
Grficamente
A
R
(y)
(s)
(y)
X
Y
1
Y
2
i=g( f(X.x, ?? ), Y
1
.y )
i=g(g(f(X.x, ?? ), Y
1
.y), Y
2
.y)
R
R
(x)
i=f(X.x, ?? ) (s)
(s)
(s=i)
(i=0)
63
C2. Problema de la Factorizacin
Reglas Reglas semnticas
(sean operadores asociativos por la derecha)
E T + E
1
E.val = T.val + E
1
.val
E T - E
1
E.val = T.val - E
1
.val
E T E.val = T.val
T ( E ) T.val = E.val
T num T.val = num.val
64
Esquema de traduccin top-down
Reglas + Acciones
E T + E
1
{ E.val = T.val + E
1
.val }
E T - E
1
{ E.val = T.val - E
1
.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:
65
Esquema de traduccin resultante de la
factorizacin
Reglas + Acciones
E T R
R + E
1
{ E.val = T.val + E
1
.val }
R - E
1
{ E.val = T.val - E
1
.val }
R { E.val = T.val }
T ( E ) { T.val = E.val }
T num { T.val = num.val }
El esquema no es vlido. Por tanto, primero se debe
factorizar, y posteriormente redefinir los atributos.
66
Factorizacin y nuevas reglas semnticas
Reglas Reglas semnticas
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
67
Esquema de traduccin
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 }
68
Ejemplo grfico
E
T R
-
E
T R
+
E
T R
3
5
+
2
( 0 )
( 2 )
( 2 )
( 2 )
( 5 )
( 7 )
( 7 ) ( 3 )
( 4 )
69
Ejercicio
Reglas Reglas semnticas
L E L.s = E.val * E.n
E T + E
1
E.val = T.val + E
1
.val
E.n = E
1
.n + 1
E T - E
1
E.val = T.val - E
1
.val
E.n = E
1
.n + 1
E T E.val = T.val
E.n = 1
T ( E ) T.val = E.val
T num T.val = num.val
Obtener un esquema de traduccin top-down para esta definicin
dirigida por sintaxis.