Semantik von Programmiersprachen SoSe 2017

Werbung
2. Aufgabenblatt zur Vorlesung
Semantik von Programmiersprachen
SoSe 2017
Wolfgang Mulzer, Max Willert
Abgabe bis zum 02. Mai 2017, 12 Uhr, in den Briefkasten neben Raum 111
Aufgabe 1 Die Sprache While
10 Punkte
In der Vorlesung haben wir die Sprache While definiert, welche durch folgende
kontextfreie Grammatik gegeben ist:
A → Zahl | Var | A + A | A * A | A - A
B → true | false | A = A | A ≤ A | ¬B | B ∧ B
S → Var := A | skip | S ; S | if B then S else S | while B do S
(a) Geben Sie einen Syntaxbaum für das folgende While-Programm:
x := 1; while ¬(n ≤ 1) do (x := x * n; n := n - 1)
(b) Erklären Sie informell, was passiert, wenn man das While-Programm aus (a)
auf dem folgenden Zustand ausführt:
[n 7→ 4, x 7→ 100].
(c) Schreiben Sie ein While-Programm, welches für zwei Eingaben m, n ∈ N die
Potenz mn berechnet.
Aufgabe 2 Semantische Funktionen für Zahl
10 Punkte
Betrachten Sie die folgende kontextfreie Grammatik für Binärzahlen:
Z → N | -N
N → 0 | 1 | N0 | N1
Sei Zahl die semantische Kategorie aller (syntaktischen) Zahlen, welche sich aus Z
ableiten lassen.
(a) Definieren Sie eine semantische Funktion N : Zahl → Z, welcher jeder syntaktischen Zahl sinnvoll ein Element aus Z zuordnet.
(b) Beweisen Sie mit Hilfe von struktureller Induktion, dass N eine totale Funktion
ist, d.h., jedem Element aus Zahl wird genau eine ganze Zahl aus Z zugeordnet.
(c) Beweisen Sie, dass N surjektiv ist. Ist die Funktion auch injektiv?
Aufgabe 3 Implementierung von While
10 Punkte
(a) Implementieren Sie die abstrakte Syntax von While auf geeignete Weise in Haskell. (Notfalls auch in Java). Implementieren Sie auch die semantische Funktion
N aus Aufgabe 2.
(b) Versuchen Sie, eine möglichst präzise verbale Spezifikation für die Sprachkonstrukte if B then S1 else S2 und while B do S zu geben. An welchen
Stellen gibt es mögliche Unklarheiten?
Herunterladen