e::= x
| −e
|e+e
load x, r x (r←mem[x])
neg r(r← −r)
add r1, r2(r2←r1+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)−1−1.
e=x t(e) = 0 ≥21−1−1 = 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)−1−1+2n(e2)−1−1
= 2n(e)−1−1.
n(e1)6=n(e2)n(e1)> n(e2)
t(e) = 1 + t(e1) + t(e2)
≥1+2n(e1)−1−1+2n(e2)−1−1
>2n(e1)−1−1 2n(e2)−1>0
= 2n(e)−1−1.
n≥6
K≥2
r1, . . . , rK
push r r
pop r r
compile(e)
e r1n(e)≤K
e k e rk
k1≤k∧k+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) =
{ }
L→E•L
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 l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!