Technische Universität München Vorlesung Semantik Institut für

Werbung
Technische Universität München
Institut für Informatik
Prof. Tobias Nipkow, Ph.D.
Dr. Clemens Ballarin
Vorlesung Semantik
Sommersemester 2006
Übungsblatt 6
Besprechung am 6. Juni 2006
Bitte beachten Sie die folgenden Hinweise.
• Da Pfingstmontag Feiertag ist, erfolgt die Abgabe der Lösungen dieses Übungsblatts bereits am Freitag, 2. Juni, 14:00 Uhr, im Raum MI 01.11.035 im Postfach
der Übungsleitung.
• Die Übung am 30. Mai findet von 15:00 bis 16:30 Uhr in Raum MI 01.09.014
statt.
Gegeben ist folgendes Jinja-Programm P mit den Klassen A, B, C und D:
class A extends Object {
field n : Integer;
method flip : () -> Integer = {
Var(this).n{A} := Var(this).n{A} + Val(Intg(1)) } }
class B extends A {
field n : Boolean }
class C extends B {
method flip : () -> Boolean = {
Var(this).n{B} := Var(this).n{B} = Val(Bool(False)) } }
class D extends A {
method flip : (i : Integer) -> Boolean = {
Var(i) = Val(Intg(0)) } }
Aufgabe 1 (H) (Deklarationsinformation)
a) Geben Sie für alle Klassen C ein FDTs an, so dass P ` C has-fields FDTs gilt.
b) Bestimmen Sie alle Tupel (C, F, T, D), für die P ` C sees F : T in D gilt.
c) Bestimmen Sie alle Tupel (C, M, T s, T, B, D), für die P ` C sees M : T s → T =
B in D gilt.
Aufgabe 2 (H) (Ausführung von Jinja-Programmen)
Reduzieren Sie den Ausdruck e bezüglich Programm P ausgehend vom leeren Heap und
der leeren Variablenumgebung:
P ` he, ([], [])i ⇒ he0 , (h0 , l0 )i
Geben Sie jeweils die Ergebniskonfiguration he0 , (h0 , l0 )i an.
a) e = new(A); new(B)
b) e = x := new(C); Var(x).flip()
c) e = {x : Class(A); x := new(C); Var(x).flip()}
Aufgabe 3 (Ü) (Binäre Operatoren in Jinja)
Zur Auswertung von binären Ausdrücken gibt es in Jinja die Operation binop. Erweitern
Sie dessen Definition:
a) Um die Operation < für Integer. Dabei steht < auf dem Typ der ganzen Zahlen zur
Verfügung.
b) Um die Operation div mit Hilfe der Division /. Definieren Sie die Semantik von div
so, dass Division durch Null undefiniert ist (es wird also keine Ausnahme erzeugt).
Aufgabe 4 (Ü) (Natürliche Zahlen in Jinja)
Geben Sie eine Deklaration der Klasse Nat an, die die natürlichen Zahlen implementiert, ohne dabei die in Jinja vorhandenen Integer-Zahlen zu benutzen. Verwenden Sie
stattdessen Zeiger. Der Nullzeiger Null repräsentiert die Null, ein Zeiger auf die Zahl n
repräsentiert n + 1. Zum Beispiel ist
• −→ • −→ • −→ (Null)
die Darstellung von drei. Geben Sie Methoden für die Nachfolgeroperation suc, Addition
add und den Vergleich zweier Zahlen eq an.
Herunterladen