• Keine Ergebnisse gefunden

Semantik von Programmiersprachen – SS 2010

N/A
N/A
Protected

Academic year: 2022

Aktie "Semantik von Programmiersprachen – SS 2010"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Lehrstuhl f¨ ur Programmierparadigmen

Andreas Lochbihler andreas.lochbihler@kit.edu

Semantik von Programmiersprachen – SS 2010

http://pp.info.uni-karlsruhe.de/lehre/SS2010/semantik

Blatt 7: Prozeduren Besprechung: 01.06.2010

1. Welche der folgenden Aussagen sind richtig, welche falsch? (H) (a) [(p, i := i * 1; call p)]` hcall p, σi ⇓σ

(b) ([(p, skip)], call q) ist ein Programm der Sprache WhileP ROC.

(c) hskip, σiist die einzige blockierte Konfiguration der Small-Step-Semantik f¨urWhileP ROC. (d) WennP ` hc, σi→1, dann enth¨altc einewhile-Schleife.

(e) Sei P ≡[(p, y, x := 4; result := 5 * y)], E0≡[x7→0,y7→1] und s≡[next7→2].

WennP, E0, E0` h{ var x = 3; y <- call p(x); y := y + x }, si ⇓s0, dann s0(E0(x)) = 4 und s0(E0(y)) = 18.

(f) Wenn P, E0, E ` hc, si ⇓s0, dann s0(next) =s(next).

2. Small-Step-Semantik f¨ur Prozeduren mit Parametern (H)

F¨ur Prozeduren mit einem Parameter (WhileP ROCP) gibt es folgende Vorschl¨age f¨ur eine Auf- rufregel der Small-Step-Semantik:

(a) (p, x, c)∈P

P ` hy <- call p(a), σi→1hx := a; c; y := result, σi

(b) (p, x, c)∈P

P ` hy <- call p(a), σi →1

h{ var result = 0; { var x = a; c }; y := result }, σi

(c) (p, x, c)∈P

P ` hy <- call p(a), σi →1

h{ var x = a; { var result = 0; c; y := result } }, σi

(d) (p, x, c)∈P znicht verwendet in P und a P ` hy <- call p(a), σi →1

h{ var z = 0; { var x = a; { var result = 0; c; z := result } }; y := z }, σi

Untersuchen Sie, in wie weit diese Regeln call-by-value Prozedurparameter und R¨uckgabewerte korrekt abbilden. Begr¨unden Sie Ihre Antwort; ggf. mit Beispielprogrammen, die entsprechende Defizite aufzeigen. Welche dieser Regeln modellieren statische Variablenbindung?

3. Call by reference ( ¨U)

Die in der Vorlesung vorgestelle Big-Step-Semantik f¨ur Prozeduren mit einem Parameter wertet den ¨ubergebenen Parameter beim Aufruf aus und ¨ubergibt nur den Wert an die aufgerufene Prozedur. Insbesondere bleibt der Wert einer Variablen, die als Parameter ¨ubergeben wird, im

(2)

aufrufenden Kontext unver¨andert. Diese Parameter¨ubergabeart heißt call by value. Daneben gibt es auch nochcall by reference, bei der ¨Anderungen am Parameterwert in der aufgerufenen Prozedur auch nach dem Ende des Aufrufs in der aufrufenden Prozedur sichtbar sind. Passen Sie in dieser Aufgabe die Big-Step-Semantik vonWhileP ROCP entsprechend an:

(a) Passen Sie die Syntax-Definition vonWhileP ROCP an, so dass nur noch Variablen als Para- meter verwendet k¨onnen.

(b) ¨Andern Sie die Big-Step-Semantik so, dass Parameter immer als call by reference ¨ubergeben werden.

(c) ¨Andern Sie die Regeln erneut so, dass auch die R¨uckgabewertvariable mit call by reference

¨ubergeben wird.

(d) Finden Sie ein Programm, bei dem sich das Verhalten in beiden Varianten von call by reference und call by value unterscheidet. Belegen Sie dies durch die Ableitungsb¨aume.

Semantik von Programmiersprachen – Blatt 7 2

Referenzen

ÄHNLICHE DOKUMENTE

Die in der Vorlesung vorgestelle Big-Step-Semantik für Prozeduren mit einem Parameter wertet den übergebenen Parameter beim Aufruf aus und übergibt nur den Wert an die

6.3 haben wir die While-Sprache um Blöcke mit lokalen Variablen erweitert und operationale Semantiken

In einer früheren Aufgabe haben wir schon die operationale Semantik einer repeat -Schleife

In der Vorlesung haben wir bereits die Big-Step- und Small-Step-Semantiken darauf erweitert, hier sollen Sie nun eine denotationale Erweiterung entwickeln. Statt höchstens

Berechnen Sie ein paar einfache Beispiele und versuchen Sie herauszufinden, in welcher Beziehung m, n und k zueinander stehen.. Schnelle

Zeichen Sie dazu den Ableitungsbaum einer Ausf¨ uhrung des Programms gem¨ aß der Big-Step-Semantik f¨ ur n = −4.. Z¨ ahlschleife (

Die Maschine, auf der die ¨ ubersetzten Ausdr¨ ucke abgearbeitet werden sollen, nimmt eine Liste von Instruktionen, einen (anfangs leeren) Stack und einen Zustand mit der

Berechnen Sie ein paar einfache Beispiele und versuchen Sie herauszufinden, in welcher Beziehung m, n und k zueinander stehen.. Schnelle Division (