• 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 5: Compiler Besprechung: 18.05.2010

1. Welche der folgenden Aussagen sind richtig, welche falsch? (H)

(a) [ASSN x 5, JMPF −1 true, JMP2, ASSN y (x + 7)] ist ein ASM-Programm.

(b) [JMP0]` h0, σi→

(c) comp(if (x <= 0) then x := 0 - x; y := 0 else skip) = [JMPF 3 (x <= 0), ASSN x (0 - x), ASSN y 0]

(d) [JMP3, ASSN y 0, JMPF−3 (y == 1), ASSN y 1] ist abgeschlossen.

(e) WennP++P0 ` h0, σi→ h|P |+|P0|, σ0i, dann gibt es einσ mitP ` h0, σi→ h|P |, σi undP0 ` h0, σi→ h|P 0|, σ0i.

(f) Zu jedem While-Programm gibt es ein semantisch ¨aquivalentesASM-Programm.

2. repeat c until b-Schleife (H)

Neben while-Schleifen sind auch repeat-Schleifen in vielen Programmiersprachen verbreitet.

In dieser Aufgabe sei Com um die Produktion repeat c until b erweitert. Die Small-Step- Semantik f¨urrepeat c until bsei durch folgende Regel gegeben:

Repeat: hrepeat c until b, σi→1hc; if (b) then skip else repeat c until b, σi (a) Geben Sie Regeln in der Big-Step-Semantik an, die repeat c until b das gleiche Ver-

halten geben wie Repeat in der Small-Step-Semantik. Welche Schritte w¨aren f¨ur einen Aquivalenzbeweis n¨¨ otig?

(b) Erweitern Sie die Definition des Compilers comp auf Repeat-Schleifen.

(c) Erweitern Sie den Korrektheitsbeweis des Compilers (Thm. 12 und 15) um Repeat-Schleifen.

3. Compiler f¨ur arithmetische Ausdr¨ucke ( ¨U)

F¨ur die arithmetischen Ausdr¨ucke Aexpder Sprache Whilesoll ein Compiler angegeben werden.

Der Compiler nimmt einen Ausdruck und ¨ubersetzt ihn in eine Liste von Instruktionen einer Stackmaschine. Auf der Stackmaschine stehen folgende Instruktionen zur Verf¨ugung:

CONST n Lege die Konstanten auf den Stack.

LOAD x Lade den Wert der Variablenx auf den Stack.

APPLY f Wende die bin¨are Funktionf auf die beiden obersten Stackelemente an und ersetze sie durch das Ergebnis.

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 aktuellen Varia- blenbelegung als Argumente. Auf die Variablenbelegung kann mit Hilfe von LOAD zugegriffen werden. Die Stackmaschine liefert einen neuen Stack als Ergebnis, der am Ende der Berechnung nur noch deren Ergebnis enthalten soll.

(2)

(a) Geben Sie eine formale Semantik f¨ur die Stack-Maschine an.

(b) Schreiben Sie einen Compiler f¨ur arithmetische Ausdr¨ucke.

(c) Formulieren Sie die Aussage, dass der Compiler korrekt ist, formal.

(d) Beweisen Sie die Korrektheitsaussage.

Semantik von Programmiersprachen – Blatt 5 2

Referenzen

ÄHNLICHE DOKUMENTE

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 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

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¨ ochstens

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