e::= x
| −e
|e+e
load x, r x (rmem[x])
neg r(r← −r)
add r1, r2(r2r1+r2)
x r, r1, r2e r
e r
x+y+x=y
e2e1e1e2e1+e2
((x+y) + z) + t
(x+y)+(z+t)
x+ ((y+z) + t)
(((x1 + y2)1 + z2)1 + t2)1
((x1 + y2)1 + (z2 + t3)2)1
(x2 + ((y1 + z2)1 + t2)1)1
n(e)e
n(e)e
n(x) = 1
n(e) = n(e)
n(e1+e2) = 1 + n(e1)n(e1) = n(e2)
= max(n(e1), n(e2))
t(e)e
t(x)=0 t(e) = t(e)t(e1+e2) = 1+t(e1)+t(e2)t(e)
n(e)
e
t(e)2n(e)11.
e=x t(e) = 0 2111 = 0 e=e1t(e) = t(e1)
n(e) = n(e1)e=e1+e2
n(e1) = n(e2)
t(e) = 1 + t(e1) + t(e2)
1+2n(e1)11+2n(e2)11
= 2n(e)11.
n(e1)6=n(e2)n(e1)> n(e2)
t(e) = 1 + t(e1) + t(e2)
1+2n(e1)11+2n(e2)11
>2n(e1)11 2n(e2)1>0
= 2n(e)11.
n6
K2
r1, . . . , rK
push r r
pop r r
compile(e)
e r1n(e)K
e k e rk
k1kk+min(2, n(e))
K+ 1
compile(x, k) = load x, rk
compile(e, k) = compile(e, k); neg rk
compile(e1+e2, k) = n(e1)n(e2)
k+ 1 + min(2, n(e2)) K+ 1
compile(e1, k); compile(e2, k + 1); add rk+1, rk
compile(e1, k); push rk;compile(e2, k); pop rk+1;add rk+1, rk
compile(e2+e1, k)
compile(e, 1)
e::= x
|n
|e . . . e
E
|
|L
L
|E L
{, , , } {E, L}
E
(E) = false (L) = true
(E) = (L) = {, , }(E) = {, , , , }
(L) = { }
E L
L EL EL EL
E L
L→ •
L→ •EL
E→ •
E→ •
E L
L
(L) =
{ }
LEL
L→ •
L→ •EL
E→ •
E→ •
E L
e(e)
(e)e
(e) (e)e2cons(e1, e2)
e1e2e2
cons(e1, e2)
e(e)e1
e e1
x1e1x2e2. . . xnen
xia(x, a)
a x e
a1a2. . . amk(x, k)
(x, ai)
e
k[e]k
[e]k
e e
1 / 13 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !