Fakultät Informatik Institut für Angewandte Informatik, Professur Technische Informationssysteme MATERIALIEN ZUR VORBEREITUNG AUF DIE KLAUSUR INFORMATIK II FÜR VERKEHRSINGENIEURWESEN ANTEIL VON PROF. VOGLER IM WINTERSEMESTER 2011/12 Stand: 22. Februar 2012
2
INHALTSVERZEICHNIS 1 C 0 und AM 0 5 1.1 Aufgabe 1......................................... 5 1.2 Aufgabe 2......................................... 6 1.3 Aufgabe 3......................................... 7 2 Unifikation 9 2.1 Aufgabe 4......................................... 9 2.2 Aufgabe 5......................................... 9 2.3 Aufgabe 6......................................... 10 3 Lösungen 11 3.1 Lösung zu Aufgabe 1................................... 11 3.2 Lösung zu Aufgabe 2................................... 12 3.3 Lösung zu Aufgabe 3................................... 12 3.4 Lösung zu Aufgabe 4................................... 13 3.5 Lösung zu Aufgabe 5................................... 13 3.6 Lösung zu Aufgabe 6................................... 14 3
4 Inhaltsverzeichnis
1 C 0 UND AM 0 1.1 AUFGABE 1 Gegeben sei folgendes C 0 Programm: /* operation1 */ #include <stdio.h> int main() { int x, y, z; scanf("%i", &x); scanf("%i", &y); if (x < y) z = x; else z = y; printf("%d", z); return 0; } (a) Geben Sie für dieses Programm die bereits linearisierte Übersetzung der operationellen Semantik an. Zwischenschritte brauchen Sie nicht anzugeben. Schreiben Sie je Zeile nur einen Befehl. (b) Gegeben sei folgende bereits linearisierte Übersetzung eines C 0 Programms operation2: 1: READ 1; 6: GT; 11: STORE 2; 16: JMP 4; 2: LIT 1; 7: JMC 17; 12: LOAD 1; 17: WRITE 2; 3: STORE 2; 8: LOAD 2; 13: LIT 1; 4: LOAD 1; 9: LOAD 1; 14: SUB; 5: LIT 1; 10: MUL; 15: STORE 1; Die AM 0 habe bereits die folgende Konfiguration: (4, ε, [1/ 2, 2/ 1], ε, ε). Führen Sie die Berechnung der AM 0 auf der Grundlage des gegebenen linearisierten Programms solange weiter, bis der Befehlszähler 15 ist. 5
1.2 AUFGABE 2 (a) Gegeben sei folgendes C 0 Programm: /* prog */ #include <stdio.h> int main() { int x, y, z; z = 1; scanf("%i", &x); scanf("%i", &y); while (x > y) { z = y * z; x = x - 1; } printf("%d", z); return 0; } Übersetzen Sie obiges C 0 Programm in ein AM 0 Programm prog 0 mit linearisierten Adressen. Zwischenschritte brauchen Sie keine anzugeben. (b) Folgender Ausschnitt aus einem AM 0 Programm sei gegeben: 9:... 14: LOAD 2; 19: LOAD 2; 10: LOAD 1; 15: LOAD 1; 20: STORE 1; 11: LOAD 2; 16: SUB; 21:... 12: LT; 17: STORE 1; 13: JMC 19; 18: JMP 21; Lassen Sie dieses Programm auf der AM 0 mit der Ausgangskonfiguration (10, ε, [1/ 2, 2/ 3, 3/ 0], ε, ε) schrittweise ablaufen bis der Befehlszähler größer bzw. gleich 21 ist. 6 Kapitel 1 C 0 und AM 0
1.3 AUFGABE 3 (a) Geben Sie für das folgende C 0 -Programm Test die Übersetzung in ein linearisiertes AM 0 Programm an. Zwischenschritte der Übersetzung brauchen Sie nicht anzugeben. Schreiben Sie je Zeile nur einen Befehl auf. /* Test */ #include <stdio.h> int main() { int x, y, a; scanf("%i", &y); scanf("%i", &a); x = 0; while (x < a) { x = x + 1; y = y * y; } printf("%d", y); return 0; } (b) Folgendes AM 0 Programm sei gegeben: 1: READ 1; 6: SUB; 2: READ 2; 7: JMC 9; 3: LOAD 1; 8: JMP 5; 4: LOAD 2; 9: WRITE 2; 5: LIT 0; Protokollieren Sie den schrittweisen Ablauf dieses Programms auf der AM 0 mit der Anfangskonfiguration (1, ε, [ ], 0 : 1, ε). 1.3 Aufgabe 3 7
8 Kapitel 1 C0 und AM0
2 UNIFIKATION 2.1 AUFGABE 4 Es sei δ ein dreistelliges, γ ein einstelliges und α ein nullstelliges Basisfunktionssymbol. Des Weiteren sei V = {x 1,..., x 5 } eine Menge von Variablen. Wenden Sie den Unifikationsalgorithmus jeweils auf die Terme t 1 und t 2 an und ermitteln Sie jeweils den allgemeinsten Unifikator: t 1 = δ(γ(x 1 ), δ(γ(α), γ(x 2 ), γ(γ(α))), x 3 ) t 2 = δ(γ(γ(x 5 )), δ(x 4, γ(x 2 ), γ(x 1 )), α) t 1 = δ(γ(α), x 3, γ(γ(x 3 ))) t 2 = δ(x 1, δ(α, x 2, α), x 2 ) 2.2 AUFGABE 5 Es seien σ ein zweistelliges, γ ein einstelliges und α ein nullstelliges Funktionssymbol. V = {x 1, x 2, x 3 } sei eine Menge von Variablen. Wenden Sie den Unifikationsalgorithmus auf die Terme t 1 und t 2 an, und ermitteln Sie deren allgemeinsten Unifikator: t 1 = σ(σ(γ(x 1 ), x 2 ), γ(γ(α))) t 2 = σ(σ(γ(α), γ(γ(x 1 ))), γ(x 3 )) Geben Sie dabei jeweils die benutzte Regel an. 9
2.3 AUFGABE 6 Es seien δ ein dreistelliges, σ ein zweistelliges, γ ein einstelliges und α ein nullstelliges Funktionssymbol. V = {x 1, x 2, x 3 } sei eine Menge von Variablen. Wenden Sie den Unifikationsalgorithmus auf die Terme t 1 und t 2 an und ermitteln Sie deren allgemeinsten Unifikator: t 1 = δ(γ(x 3 ), γ(γ(α)), σ(γ(x 2 ), x 1 )) t 2 = δ(γ(x 3 ), γ(x 3 ), σ(γ(α), γ(γ(x 2 )))) Wenden Sie bei jedem Umformungsschritt nur eine Regelsorte an und geben Sie diese jeweils an. 10 Kapitel 2 Unifikation
3 LÖSUNGEN 3.1 LÖSUNG ZU AUFGABE 1 (a) 1: READ 1; 5: LT; 9: JMP 12; 2: READ 2; 6: JMC 10; 10: LOAD 2; 3: LOAD 1; 7: LOAD 1; 11: STORE 3; 4: LOAD 2; 8: STORE 3; 12: WRITE 3; (b) ( 4, ε, [1/ 2, 2/ 1], ε, ε ) ( 5, 2, [1/ 2, 2/ 1], ε, ε ) ( 6, 1 : 2, [1/ 2, 2/ 1], ε, ε ) ( 7, 1, [1/ 2, 2/ 1], ε, ε ) ( 8, ε, [1/ 2, 2/ 1], ε, ε ) ( 9, 1, [1/ 2, 2/ 1], ε, ε ) ( 10, 2 : 1, [1/ 2, 2/ 1], ε, ε ) ( 11, 2, [1/ 2, 2/ 1], ε, ε ) ( 12, ε, [1/ 2, 2/ 2], ε, ε ) ( 13, 2, [1/ 2, 2/ 2], ε, ε ) ( 14, 1 : 2, [1/ 2, 2/ 2], ε, ε ) ( 15, 1, [1/ 2, 2/ 2], ε, ε ) 11
3.2 LÖSUNG ZU AUFGABE 2 (a) 1: LIT 1; 6: LOAD 2; 11: MUL; 16: STORE 1; 2: STORE 3; 7: GT; 12: STORE 3; 17: JMP 5; 3: READ 1; 8: JMC 18; 13: LOAD 1; 18: WRITE 3; 4: READ 2; 9: LOAD 2; 14: LIT 1; 5: LOAD 1; 10: LOAD 3; 15: SUB; (b) BZ DK HS Inp Out (10, ε, [1/2, 2/3, 3/0], ε, ε) (11, 2, [1/2, 2/3, 3/0], ε, ε) (12, 3 : 2, [1/2, 2/3, 3/0], ε, ε) (13, 1, [1/2, 2/3, 3/0], ε, ε) (14, ε, [1/2, 2/3, 3/0], ε, ε) (15, 3, [1/2, 2/3, 3/0], ε, ε) (16, 2 : 3, [1/2, 2/3, 3/0], ε, ε) (17, 1, [1/2, 2/3, 3/0], ε, ε) (18, ε, [1/1, 2/3, 3/0], ε, ε) (21, ε, [1/1, 2/3, 3/0], ε, ε) 3.3 LÖSUNG ZU AUFGABE 3 (a) 1: READ 2; 2: READ 3; 3: LIT 0; 4: STORE 1; 5: LOAD 1; 6: LOAD 3; 7: LT; 8: JMC 18; 9: LOAD 1; 10: LIT 1; 11: ADD; 12: STORE 1; 13: LOAD 2; 14: LOAD 2; 15: MUL; 16: STORE 2; 17: JMP 5; 18: WRITE 2; (b) BZ DK HS Inp Out (1, ε, [], 0:1, ε) (2, ε, [1/0], 1, ε) (3, ε, [1/0, 2/1], ε, ε) (4, 0, [1/0, 2/1], ε, ε) (5, 1:0, [1/0, 2/1], ε, ε) (6, 0:1:0, [1/0, 2/1], ε, ε) (7, 1:0, [1/0, 2/1], ε, ε) (8, 0, [1/0, 2/1], ε, ε) (5, 0, [1/0, 2/1], ε, ε) (6, 0:0, [1/0, 2/1], ε, ε) (7, 0, [1/0, 2/1], ε, ε) (9, ε, [1/0, 2/1], ε, ε) (10, ε, [1/0, 2/1], ε, 1) 12 Kapitel 3 Lösungen
3.4 LÖSUNG ZU AUFGABE 4 Lösung zur 1. Teilaufgabe M 1 = {(t 1, t 2 )} = {(δ(γ(x 1 ), δ(γ(α), γ(x 2 ), γ(γ(α))), x 3 ), δ(γ(γ(x 5 )), δ(x 4, γ(x 2 ), γ(x 1 )), α))} M 2 = {(γ(x 1 ), γ(γ(x 5 ))), (δ(γ(α), γ(x 2 ), γ(γ(α))), δ(x 4, γ(x 2 ), γ(x 1 ))), (x 3, α)} M 3 = {(x 1, γ(x 5 )), (γ(α), x 4 ), (γ(x 2 ), γ(x 2 )), (γ(γ(α)), γ(x 1 )), (x 3, α)} M 4 = {(x 1, γ(x 5 )), (γ(α), x 4 ), (x 2, x 2 ), (γ(α), x 1 ), (x 3, α)} El. M 5 = {(x 1, γ(x 5 )), (γ(α), x 4 ), (γ(α), x 1 ), (x 3, α)} Vert. M 6 = {(x 1, γ(x 5 )), (x 4, γ(α)), (x 1, γ(α)), (x 3, α)} Subst. M 7 = {(x 1, γ(x 5 )), (x 4, γ(α)), (γ(x 5 ), γ(α)), (x 3, α)} M 8 = {(x 1, γ(x 5 )), (x 4, γ(α)), (x 5, α), (x 3, α)} Subst. M 9 = {(x 1, γ(α)), (x 4, γ(α)), (x 5, α), (x 3, α)} ϕ : x 1 γ(α), x 3 α, x 4 γ(α), x 5 α Lösung zur 2. Teilaufgabe M 1 = {(t 1, t 2 )} = {(δ(γ(α), x 3, γ(γ(x 3 ))), δ(x 1, δ(α, x 2, α), x 2 )) M 2 = {(γ(α), x 1 ), (x 3, δ(α, x 2, α)), (γ(γ(x 3 )), x 2 )} Vert. M 3 = {(x 1, γ(α)), (x 3, δ(α, x 2, α)), (x 2, γ(γ(x 3 )))} Subst. M 4 = {(x 1, γ(α)), (x 3, δ(α, x 2, α)), (x 2, γ(γ(δ(α, x 2, α))))} Occurs-check-Problem, da im 3. Paar x 2 sowohl auf der linken, als auch auf der rechten Seite auftritt. Folglich sind die beiden Terme nicht unifizierbar. 3.5 LÖSUNG ZU AUFGABE 5 M 1 = {(t 1, t 2 )} = {(σ(σ(γ(x 1 ), x 2 ), γ(γ(α))), σ(σ(γ(α), γ(γ(x 1 ))), γ(x 3 )))} M 2 = {(σ(γ(x 1 ), x 2 ), σ(γ(α), γ(γ(x 1 )))), (γ(γ(α)), γ(x 3 )))} M 3 = {(γ(x 1 ), γ(α)), (x 2, γ(γ(x 1 ))), (γ(α), x 3 )} M 4 = {(x 1, α), (x 2, γ(γ(x 1 ))), (γ(α), x 3 )} Vert. M 5 = {(x 1, α), (x 2, γ(γ(x 1 ))), (x 3, γ(α))} Subst. M 6 = {(x 1, α), (x 2, γ(γ(α))), (x 3, γ(α))} ϕ : x 1 α, x 2 γ(γ(α)), x 3 γ(α) 3.4 Lösung zu Aufgabe 4 13
3.6 LÖSUNG ZU AUFGABE 6 M 1 = {(t 1, t 2 )} = {(δ(γ(x 3 ), γ(γ(α)), σ(γ(x 2 ), x 1 )), δ(γ(x 3 ), γ(x 3 ), σ(γ(α), γ(γ(x 2 )))))} M 2 = {(γ(x 3 ), γ(x 3 )), (γ(γ(α)), γ(x 3 )), (σ(γ(x 2 ), x 1 ), σ(γ(α), γ(γ(x 2 ))))} M 3 = {(x 3, x 3 ), (γ(α), x 3 ), (γ(x 2 ), γ(α)), (x 1, γ(γ(x 2 )))} El. M 4 = {(γ(α), x 3 ), (γ(x 2 ), γ(α)), (x 1, γ(γ(x 2 )))} El. M 5 = {(γ(α), x 3 ), (x 2, α), (x 1, γ(γ(x 2 )))} Vert. M 6 = {(x 3, γ(α)), (x 2, α), (x 1, γ(γ(x 2 )))} Subst. M 7 = {(x 3, γ(α)), (x 2, α), (x 1, γ(γ(α)))} ϕ : x 1 γ(γ(α)), x 2 α, x 3 γ(α) 14 Kapitel 3 Lösungen