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 ∅