Eine abstrakte Maschine für IMP

Werbung
Eine abstrakte Maschine für IMP
Zustand (E, B, S), besteht aus
E
B
S
Umgebung
Aktueller Befehl
Stack
Start
Stopp
Ausgabe:
F P 2, W S
Variablennamen → Zahlen
in etwa: Programmzähler
enthält Zahlen, Boolesche Werte und Befehle.
(∅, P, ∅)
(E, skip, ∅)
Wert in B und/oder Umgebung E
03/04, F olien IM P 3, Seite 1
Eine abstrakte Maschine für IMP:
Notation der Regeln
E[X = a]: in der Umgebung E hat X den Wert a.
Stackeinträge:
c; S
[T : c1, F : c2]
X :=
(+t)
(n+)
F P 2, W S
push von c auf den Stack S
alternativen Fortsetzungen, abhängig von B.
Update-Marker
Fortsetzung
Fortsetzung
03/04, F olien IM P 3, Seite 2
Eine abstrakte Maschine für IMP: Regeln
(E, (c1; c2), S)
(E, while b do c od, S)
(E, if b then c1 else c2 fi, S)
(E, X := t, S)
→
→
→
→
(E[X = a], n, X :=; S)
(E, n, X :=; S)
→ (E[X = n], skip, S)
→ (E[X = n], skip, S)
wenn X nicht in E vorkommt
→ (E, c, S)
→ (E, c1, S)
→ (E, c1, S)
(E, skip, c; S)
(E, True, [T : c1, F : c2]; S)
(E, False, [T : c1, F : c2]; S)
F P 2, W S
03/04, F olien IM P 3, Seite 3
(E, c1, c2; S)
(E, b, [T : c; while b do c od, F : skip]; S)
(E, b, [T : c1, F : c2]; S)
(E, t, X :=; S)
Eine abstrakte Maschine für IMP: Regeln (2)
(E[X = a], X, S) → (E, a, S)
(E, s + t, S)
(E, n, (+t); S)
(E, m, (n+); S)
...
(E, s ≤ t, S)
(E, n, (≤ t); S)
(E, m, (n ≤); S)
F P 2, W S
03/04, F olien IM P 3, Seite 4
→ (E, s, (+t); S)
→ (E, t, (n+); S)
→ (E, m0, S) wobei m0 = m + n
→ (E, s, (≤ t); S)
→ (E, t, (n ≤); S)
→ (E, w, S) wobei w = True wenn m ≤ n,
sonst w = False
Abstrakte Maschine: Beispiel
Abkürzung: wh := while X > 1 do X := X − 1 od
E
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
F P 2, W S
=3
=3
=3
=3
=3
=3
=3
=3
=3
=3
=3
=3
=3
=2
=2
B
wh
X>1
X
3
1
True
X := X − 1; wh . . .
X := X − 1
X −1
X
3
1
2
skip
wh
03/04, F olien IM P 3, Seite 5
S
∅
[T : X := X − 1; wh . . . ; F : skip]
(> 1); [T : X := X − 1; wh . . . ; F : skip]
(> 1); [T : X := X − 1; wh . . . ; F : skip]
(3 >); [T : X := X − 1; wh . . . ; F : skip]
[T : X := X − 1; wh . . . ; F : skip]
∅
wh
X :=; wh . . .
(− 1); X :=; wh . . .
(− 1); X :=; wh . . .
(3 −); X :=; wh . . .
X :=; wh . . .
wh
∅
Herunterladen