Você está na página 1de 19

Profa. Valria D.

Feltrim
DIN UEM
Definio S-atribuda
Usa exclusivamente atributos sintetizados
Ideal para ser implementada em conjunto com um analisador
sinttico LR
Conforme visto nas aulas anteriores

Definio L-atribuda
Mais abrangente
Admite atributos sintetizados e herdados
Mais fcil de ser implementada em conjunto com um analisador
sinttico LL(1)
Definio L-atribuda
Os atributos podem ser avaliados numa visita em
profundidade, da esquerda para a direita
Similar S-atribuda

No entanto, a ordem de avaliao das regras


semnticas diferente
Tratamento de atributos herdados
Uma DDS L-atribuda se cada atributo herdado de
Xj, 1 j n, do lado direito de A X1X2...Xn
depender somente
dos atributos dos smbolos X1, X2, ..., Xj-1 esquerda de Xj
na produo, e

dos atributos herdados de A


Cada atributo s pode
depender de atributos
calculados previamente
Ordem diferenciada de
avaliao!
Uma DDS L-atribuda se cada atributo herdado de
Xj, 1 j n, do lado direito de A X1X2...Xn
depender somente
dos atributos dos smbolos X1, X2, ..., Xj-1 esquerda de Xj
na produo, e

dos atributos herdados de A

Note que toda definio S-atribuda tambm L-atribuda


As restries L-atribudas se aplicam somente aos atributos
herdados
DDS NO L-atribuda DDS L-atribuda

A BC { B.h := f1(A.h); A LM { L.h := f1(A.h);


C.h := f2(B.s); M.h := f2(L.s);
A.s := f3(C.s) } A.s := f3(M.s) }

A DE { E.h := f4(A.h); A QR { R.h := f4(A.h);


D.h := f5(E.s); R.s := f5(Q.s);
A.s := f6(D.s) } A.s := f6(R.s) }

Por qu?
DDS NO L-atribuda DDS L-atribuda

A BC { B.h := f1(A.h); A LM { L.h := f1(A.h);


C.h := f2(B.s); M.h := f2(L.s);
A.s := f3(C.s) } A.s := f3(M.s) }

A DE { E.h := f4(A.h); A QR { R.h := f4(A.h);


D.h := f5(E.s); R.s := f5(Q.s);
A.s := f6(D.s) } A.s := f6(R.s) }

D.h depende de E.s


e E est direita de
D na produo
Exemplo DDS L-atribuda
D TL Regras Regras
T int | real gramaticais semnticas
L L1, id | id D TL L.tipo:=T.tipo
T int T.tipo:=inteiro
T real T.tipo:=real
L L1, id L1.tipo:=L.tipo
real a, b, c addTS(id.lexval, L1.tipo)
int x L id addTS(id.lexval, L.tipo)
Exemplo: real id, id, id
D
Regras Regras
gramaticais semnticas
T L
D TL L.tipo:=T.tipo
T int T.tipo:=inteiro
real L1 , id3
T real T.tipo:=real
L L1, id L1.tipo:=L.tipo
addTS(id.lexval, L1.tipo)
L2 , id2
L id addTS(id.lexval, L.tipo)
addTS(id1.lexval, L2.tipo)
L2.tipo=???
id1
Tente avaliar usando pesquisa
em profundidade
Exemplo: real id, id, id
D

T.tipo = real L.tipo = real

real L1.tipo = real , id3


Regras Regras
gramaticais semnticas
L2.tipo = real , id2
D TL L.tipo:=T.tipo
T int T.tipo:=inteiro
T real T.tipo:=real id1
L L1, id L1.tipo:=L.tipo
addTS(id.lexval, L1.tipo)
L id addTS(id.lexval, L.tipo)
Ordem de avaliao em profundidade para uma
DDS L-atribuda
procedimento visitar_df (n: n)
inicio
para cada filho m de n, da esquerda para a direita, faa
inicio
avaliar os atributos herdados de m
visitar_df(m)
fim
avaliar os atributos sintetizados de n
fim
uma GLC na qual
os atributos so associados aos smbolos gramaticais
e as aes semnticas, envolvidas em { }, so inseridas
nos lados direitos das produes

Similar s DDSs, mas com especificao de ordem


Para uma definio S-atribuda, um esquema de traduo
ser igual uma DDS
O mesmo NO vale para definies L-atribudas
Exemplo esquema de traduo L-atribudo

D T { L.tipo:=T.tipo } L
T int { T.tipo:=inteiro }
T real { T.tipo:=real }
L { L1.tipo:=L.tipo} L1, id { addTS(id.lexval, L1.tipo) }
L id { addTS(id.lexval, L.tipo) }
Restries para esquemas de traduo L-atribudos
Um atributo herdado para um smbolo no lado direito de uma
produo precisa ser computado numa ao antes daquele
smbolo
Uma ao no pode ser referir a um atributo sintetizado de um
smbolo direita da ao
Um atributo sintetizado para o no-terminal do lado esquerdo da
produo somente ser computado aps os cmputo de todos os
atributos que o mesmo referencie
Usualmente colocada ao fim do lado direito da produo
Um avaliador Top-down pode ser construdo alterando-se o
algoritmo de um analisador LL(1)
Pilha semntica: armazena valores de atributos
Pilha sinttica: armazena produes e aes semnticas
Quando uma produo empilhada na pilha sinttica, as aes
semnticas tambm so empilhadas
Uma ao semntica ser desempilhada e executada sempre
que estiver no topo da pilha
O esquema de traduo abaixo ter o atributo S.ok=true
quando o nmero de as for a soma do nmero de bs e cs

S ABC S A r1 B r2 C r3 r1: {B.m := A.n} r2: {C.m := B.n}


r3: {S.ok := C.n = 0}
A Aa A a A1 r4 r4: {A.n := A1.n + 1}
A A r5 r5: {A.n := 0}
B bB B b r6 B1 r7 r6: {B1.m := B.m} r7: {B.n := B1.n - 1}
B B r8 r8: {B.n := B.m}
C cC C c r9 C1 r10 r9: {C1.m := C.m} r10: {C.n := C1.n - 1}
C C r11 r11: {C.n := C.m}
Cadeia PSint PSem
aabc$ S
aabc$ Ar1Br2Cr3
aabc$ a A1r4r1Br2Cr3
abc$ A1r4r1Br2Cr3
S A r1 B r2 C r3
r1: {B.m := A.n} r2: {C.m := B.n} abc$ a A1r4r4r1Br2Cr3
r3: {S.ok := C.n = 0} bc$ A1r4r4r1Br2Cr3
A a A1 r4 bc$ r5r4r4r1Br2Cr3
r4: {A.n := A1.n + 1} bc$ r4r4r1Br2Cr3 A.n:=0
A r5 bc$ r4r1Br2Cr3 A.n:=1
r5: {A.n := 0} bc$ r1Br2Cr3 A.n:=2
B b r6 B1 r7
bc$ Br2Cr3 B.m:=2
r6: {B1.m := B.m} r7: {B.n := B1.n - 1}
bc$ br6B1r7r2Cr3 B.m:=2
B r8
c$ r6B1r7r2Cr3 B1.m:=2
r8: {B.n := B.m}
C c r9 C1 r10 c$ B1r7r2Cr3 B1.m:=2
r9: {C1.m := C.m} r10: {C.n := C1.n - 1} c$ r8r7r2Cr3 B1.m:=2
C r11 c$ r7r2Cr3 B.n:=2
r11: {C.n := C.m} c$ r2Cr3 B.n:=1
Cadeia PSint PSem
... ... ...
c$ r2Cr3 B.n:=1
c$ Cr3 C.m:=1
c$ c r9C1r10r3 C.m:=1
S A r1 B r2 C r3
r1: {B.m := A.n} r2: {C.m := B.n} $ r9C1r10r3 C.m:=1
r3: {S.ok := C.n = 0} $ C1r10r3 C1.m:=1
A a A1 r4 $ r11r10r3 C1.m:=1
r4: {A.n := A1.n + 1} $ r10r3 C.n:=1
A r5 $ r3 C.n:=0
r5: {A.n := 0} $ S.ok:= TRUE
B b r6 B1 r7
r6: {B1.m := B.m} r7: {B.n := B1.n - 1}
B r8
r8: {B.n := B.m}
C c r9 C1 r10
r9: {C1.m := C.m} r10: {C.n := C1.n - 1}
C r11
r11: {C.n := C.m}
Se psint[topo] = ri ento
caso ri seja
r1: {B.m := A.n}
r2: {C.m := B.n}
r3: S.ok:= psem[topo] = 0 {S.ok := C.n = 0}
r4: psem[topo]:=psem[topo]+1 {A.n := A1.n + 1}
r5: psem[topo]:=0 {A.n =0 }
r6: {B1.m = B.m}
r7: psem[topo]:=psem[topo]-1 {B.n := B1.n - 1}
r8: {B.n = B.m}
r9: {C1.m = C.m }
r10: psem[topo]:=psem[topo]-1 {C.n = C1.n -1 }
r11: {C.n := C.m}

Você também pode gostar