Sie sind auf Seite 1von 32

Considere una gramática de expresión como se escribiría para

un analizador sintáctico predictivo con la recursividad por la


izquierda eliminada:

exp term exp’


exp’ + term exp’ - term exp’
term factor term’
term’ * factor term’
factor (exp) numero

Escriba una gramática con atributos para el valor de una


expresión dada por esta gramática.
exp
(3*4)+(-8*2)
term exp’

factor term’ term exp’

exp factor term’

term exp’ exp

factor term’ term exp’

numero factor term’ term exp’

3 numero factor term’

4 numero factor term’

8 numero

2
La gramática que se presenta es de tipo LR(1) por tanto
se necesita determinar atributos sintetizados, además
los atributos de herencia nos permitirán calcular el
valor de una expresión correspondiente a la gramática.

En nuestro ejemplo utilizaremos la siguiente notación:

h = atributo heredado de un hermano o un padre


v = atributo sintetizado que representa el valor de
un símbolo
REGLAS GRAMTICALES REGLAS SEMÁNTICAS
exp term exp’ exp’.h = term.v
exp.v= exp’.v
exp’ 1 + term exp’ 2 exp’2.h = exp’ 1.h+term.v
exp’ 1.v = exp’2.v
exp’ 1 - term exp’ 2 exp’2.h= exp’ 1.h-term.v
exp’ 1.v= exp’2.v
exp’ exp’.v=exp’.h
term factor term’ term’.h=factor.v
term.v=term’.v
term’ 1 * factor term’ 2 term’2.v= term’ 1.h * factor.v
term’ 1.v= term’2.v
term’ term’.v=term.h
factor (exp) factor.v=exp.v
factor numero factor.v=numero.v
 exp term {exp’.h = term.v} exp’ {-exp.v= exp’.v}
 exp’ 1 + term {exp’2.h = exp’ 1.h+term.v} exp’ 2 {exp’ 1.v = exp’2.v}
 exp’ 1 - term {exp’2.h = exp’ 1.h-term.v} exp’ 2 {exp’ 1.v = exp’2.v}
 exp’ {exp’.v=exp’.h}
 term factor {term’.h=factor.v} term’ {term.v=term’.v}
 term’ 1 * factor {term’2.v= term’ 1.h * factor.v} term’ 2 {term.v=term’.v}
 term’ {term’.v=term.h}
 factor (exp) {factor.v=exp.v}
 factor numero {factor.v=numero.v}
ENTRADA=(3* 4)+(-8*2)
Recorremos el árbol de
izquierda a derecha desde las
hojas hasta la raíz utilizando las
reglas semánticas para cada
producción.
exp

term exp’

factor term’ term exp’

exp factor term’

term exp’ exp

factor term’ term exp’

numero factor term’ term exp’

3 numero factor term’

4 numero factor term’

8 numero

2
Los atributos
factor .v=3 sintetizados se
factor.v=numero.v calculan de forma
ascendente.

numero.v=3
exp

term exp’

factor term’ term exp’

exp factor term’

term exp’ exp

factor term’ term exp’

numero factor term’ term exp’

3 numero factor term’

4 numero factor term’

8 numero

2
• Un atributo heredado está definido a partir de los atributos
de su padre y/o de sus hermanos.

• El atributo heredado de term’ se calcula a partir del atributo


de su hermano factor
term.v=?
term factor term’

term’.h=factor.v term’ .h=3


term.v=term’.v factor .v=3
exp

term exp’

factor term’ term exp’

exp factor term’

term exp’ exp

factor term’ term exp’

numero factor term’ term exp’

3 numero factor term’

4 numero factor term’

8 numero

2
• El atributo sintetizado de term’2 se calcula a partir del
atributo heredado de term’1 y el sintetizado de factor.

term’ 1 * factor term’ 2


term’1. h=3
term’2.v= term’ 1.h * factor.v
term’ 1.v= term’2.v

factor .v=4 term’2. v=12


exp

term exp’

factor term’ term exp’

exp factor term’

term exp’ exp

factor term’ term exp’

numero factor term’ term exp’

3 numero factor term’

4 numero factor term’

8 numero

2
• Cuando existe una producción vacía el atributo
sintetizado de un símbolo es igual al valor del atributo
heredado del mismo.
exp.v=12 exp term exp’
exp’.h = term.v
exp.v= exp’.v
term .v=12 exp’.h=12
exp’v=12 exp’
exp’.v=exp’.h
exp

term exp’

factor term’ term exp’

exp factor term’

term exp’ exp

factor term’ term exp’

numero factor term’ term exp’

3 numero factor term’

4 numero factor term’

8 numero

2
• El valor del atributo sintetizado de exp asciende
hasta el atributo sintetizado de factor

factor .v=12

exp .v=12

factor (exp)
factor.v=exp.v
exp

term exp’

factor term’ term exp’

exp factor term’

term exp’ exp

factor term’ term exp’

numero factor term’ term exp’

3 numero factor term’

4 numero factor term’

8 numero

2
•El atributo heredado de term’ se calcula a partir del atributo de su
hermano factor
•El atributo sintetizado de term’ toma el valor del atributo
heredado del mismo

term.v=(12)

factor.v=(12) term’ .h=(12)


term’.v=(12)

term factor term’

term’.h=factor.v
term.v=term’.v
exp

term exp’

factor term’ term exp’

exp factor term’

term exp’ exp

factor term’ term exp’

numero factor term’ term exp’

3 numero factor term’

4 numero factor term’

8 numero

2
•El atributo heredado de exp’.h toma el valor del atributo de su
hermano term.v, sin embargo el atributo sintetizado de exp’ no tiene
aún valor hasta que no calculemos el valor de los atributos de sus
hijos, por tanto no podemos calcular el valor de exp.v
exp.v=?

term.v=(12) exp’ .h=(12)


exp.v=?

exp term exp’


exp’.h = term.v
exp.v= exp’.v
exp

term exp’

factor term’ term exp’

exp factor term’

term exp’ exp

factor term’ term exp’

numero factor term’ term exp’

3 numero factor term’

4 numero factor term’

8 numero

2
 El valor del atributo sintetizado term’2.v es
calculado a partir del atributo heredado de su
padre term’1.v y el atributo sintetizado de factor.v,
a su vez term’1.v toma el valor del atributo
sintetizado de term’2.v
term’ 1 * factor term’ 2
term’2.v= term’ 1.h * factor.v
term’ 1.v= term’2.v

factor .v=8 term’1.h=8


term’1 .v=16

factor numero term’2.h=16


factor.v=numero.v factor .v=2 term’2.v=16
exp

term exp’

factor term’ term exp’

exp factor term’

term exp’ exp

factor term’ term exp’

numero factor term’ term exp’

3 numero factor term’

4 numero factor term’

8 numero

2
1. El atributo heredado de exp’1 tendrá el valor del atributo
sintetizado de su hermano term, en este caso es vacío.
2. El atributo exp’2.v se calcula a partir de exp’1.h, y el valor
de term.v. En este caso el valor de exp’1.h es 0 por
consiguiente exp’1.v=‘16
exp’.v=-16

exp’1.h=
exp’ 1 - term exp’ 2 exp’1.v=-16
term .v= 1
exp’2.h= exp’ 1.h-term.v 2
exp’ 1.v= exp’2.v exp’2.h=-16
term .v=16 exp’2.v=-16
exp

term exp’

factor term’ term exp’

exp factor factor.v=(-16) term’

term exp’ exp


exp.v=-16 Se repite el paso 5
en el que el atributo
factor term’ term exp’ sintetizado de exp
asciende por el
árbol a factor.v
numero factor term’ term exp’

3 numero factor term’

numero factor term’


4
numero
8
2
exp

term exp’

factor term’ term exp’

exp factor term’

term exp’ exp

factor term’ term exp’

numero factor term’ term exp’

3 numero factor term’

4 numero factor term’

8 numero

2
• Recordemos que en el paso 7 obtuvimos el atributo heredado
de exp’ a partir de su hermano term

• Ahora podemos calcular el valor de exp’ a partir de la


expresión:
exp’1.h=(12)
exp’1.v=-4
2
exp’ 1 + term exp’ 2 exp’2.v=-4
exp’2.h = exp’ 1.h+term.v term.v=(-16) exp’2.h=-4
exp’ 1.v = exp’2.v
factor.v=(-16)
term’.h=(-16)
1 term’.v=(-16)
1. El atributo term’.h
hereda el valor de
factor.v

2. El valor de exp’.2.v
se calcula a partir
de el valor de
exp’1.h y el valor de
term.v. El valor de
exp’1.v se sintetiza
de exp’2.v
 Por último se calcula el valor del atributo sintetizado
de la raíz que nos dará el valor de la expresión
exp exp.v=-4
exp=(3* 4)+(-8*2) term exp’ exp’.v=-4
exp.v=-4
factor term’ term exp’

exp factor term’

term exp’ exp

factor term’ term exp’

numero factor term’ term exp’

3 numero factor term’

4 numero factor term’

8 numero

2
 Andrea Elizabeth Díaz
 Jhomara Tatiana Luzuriaga

 Ing. Wilman Chamba

 Noveno “B”

Das könnte Ihnen auch gefallen