Aufgabenblatt 6

Werbung
Prof. Dr. Manfred Schmidt-Schauß
Künstliche Intelligenz/Softwaretechnologie
Fachbereich Informatik und Mathematik/ Institut für Informatik
Goethe-Universität Frankfurt am Main
Grundlagen der Programmierung 2
Sommersemester 2009
Aufgabenblatt Nr. 6
Abgabe: Mittwoch 27. Mai 2009 vor! der Vorlesung
Aufgabe 1 (50 Punkte)
Die Programmiersprache SimpleTurtle zum Bewegen einer Schildkröte sei durch folgende Grammatik definiert, wobei das Nichtterminal Ganzzahl ganze Zahlen erzeuge und Kommando, LoderS,
Laufen und Springen weitere Nichtterminale sind. Das Nichtterminal Kommando ist das Startsymbol.
Kommando ::= LOderS | LOderS;Kommando
LOderS ::= Laufen | Springen
Laufen ::=
|
|
|
(links:Ganzzahl)
(rechts:Ganzzahl)
(vor:Ganzzahl)
(zurueck:Ganzzahl)
Springen ::= (zu:Ganzzahl,Ganzzahl)
a) Implementieren Sie mithilfe der in der Vorlesung vorgestellten funktionalen Parserkombinatoren
einen Parser, der als Ergebnis genau dann True liefert, wenn es sich bei der Eingabe um ein
gültiges SimpleTurtle-Programm handelt.
(25 Punkte)
b) Der Zustand einer Schildkröte sei durch den folgenden Datentypen in Haskell modelliert:
data Turtle = Turtle
Int -- X-Position
Int -- Y-Position
Die Semantik der Kommandos der Turtlesprache ist folgendermaßen festgelegt:
– (links:x): Die Schildkröte läuft x Schritte nach links.
– (rechts:x): Die Schildkröte läuft x Schritte nach rechts.
– (vor:x): Die Schildkröte läuft x Schritte nach oben.
– (zurueck:x): Die Schildkröte läuft x Schritte nach unten.
– c1 ;c2 : Die Schildkröte führt zunächst c1 und anschließend c2 aus.
– (zu:x,y): Die Schildkröte springt auf Position (x, y).
Passen Sie Ihren Parser aus Aufgabenteil a) so an, dass die Ausgabe die Endposition der
Schildkröte als Zustand vom Typ Turtle repräsentiert, wobei die Startposition stets (0,0) sei.
(25 Punkte)
1
Aufgabe 2 (20 Punkte)
Polymorphe n-äre Bäume mit Markierungen an allen Knoten können in Haskell durch den folgenden
Datentypen repräsentiert werden:
data NBaum a = Blatt a | Knoten a [NBaum a]
deriving(Show)
a) Geben Sie den folgenden Baum in Form des obigen Datentyps in Haskell an.
(10 Punkte)
ff 67 XXXXXXXX
fffff
XXXXX
f
f
f
f
XXXXX
ffff
f
XXXXX
f
f
f
XXXXX
fff
f
f
f
f
XXXXX
f
f
f
f
sf
,
R
48 D
14 B
10
R
n|n| DDDRRR
BB
DD
z
z
n
n
z
z
R
n
R
D
B
DD
z
z
n
|
R
n
D
B
R
z
z
|
n
R
D
B
DD
z
RRR
nn |||
DD
BB
z
zz
n
D!
n
z
z
R
RR(
"
}z
~|
}z
vnnn
256
42
97
25
−12
21
76
122
423
32
b) Implementieren Sie eine Funktion nmap, die als Argumente eine Funktion und einen n-ären
Baum erwartet und die Funktion auf alle Knotenbeschriftungen des Baumes anwendet und den
veränderten Baum als Ergebnis liefert.
(10 Punkte)
Aufgabe 3 (30 Punkte)
Führen Sie die einzelne Schritte eines Shift-Reduce-Parsers für die Operatorgrammatik
E ::= E + E | E ∗ E | E − E | E! | Z
Z ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0
auf der Eingabe 2! ∗ 6 + 3! ∗ 7 − 4 durch. Die Prioritäten seien wie üblich: ! bindet stärker als ∗ was
wiederum stärker als + und − bindet. Die Operatoren ∗, + und − seien links-assoziativ.
Erstellen Sie eine Tabelle der Form
Stack
Eingabe
Aktion (Shift oder Reduce)
2
Herunterladen