Prof. Dr. A. Poetzsch-Heter Dipl.-Inform. J. O. Blech Dipl.-Inform. M. J. Gawkowski Dipl.-Inform. N. Rauch
TU Kaiserslautern
Fachbereich Informatik AG Softwaretechnik
Ubungsblatt 2: Software-Entwicklung I (WS 2006/07)
Ausgabe: 31. Oktober 2006 Abgabe: 6. November 2006, 12.00 Uhr Abnahme praktischer Teil: 7. - 9. November 2006
Aufgabe 1 Syntaxdiagramme (5 Punkte)
Ein Bezeichner in ML besteht aus folgenden Bestandteilen:
1. einem Buchstaben (a-z bzw. A-Z) am Anfang
2. einer Folge aus Buchstaben, Ziern (0-9), Unterstrichen ( ) und Hochkommata (0).
Beachten Sie, dass die Folge aus dem zweiten Bestandteil auch leer sein kann!
a) Beschreiben Sie den syntaktischen Aufbau von Bezeichnern in der Programmiersprache ML mit Syntaxdiagrammen. Identizieren Sie Startsymbol, Terminale und Nichtterminale und geben
Sie dann die Syntaxdiagramme an. (2 Punkte)
b) Uberfuhren Sie Ihre Syntaxdiagramme in eine kontextfreie Grammatik. (2 Punkte) c) Beschreiben Sie ein Verfahren, das allgemein kontextfreie Grammatiken in Syntaxdiagramme
uberfuhrt. Geht das auch umgekehrt? (1 Punkt)
Aufgabe 2 Kontextfreie Grammatik anwenden (5 Punkte)
Die formale Sprache L sei durch die Grammatik G = (N; T; ; S) deniert mit:
N = fS; Xg;
T = fa; b; c; dg;
= 8>
>>
>>
<
>>
>>
>:
(1) S ! aaXb;
(2) X ! aXb;
(3) X ! bXac;
(4) X ! XX;
(5) X ! d
9>
>>
>>
=
>>
>>
>; :
a) Geben Sie alle Worter der Sprache L an, die weniger als sieben Buchstaben besitzen. (1 Punkt) b) Entscheiden Sie, ob das Wort w = aaadbbdacaadbbb zur Sprache L gehort. Geben Sie in diesem
Fall eine ensprechende Ableitung an. (1 Punkt)
c) Ist die Grammatik G eindeutig? Begrunden Sie Ihre Antwort! (1 Punkt)
d) Erlautern Sie den Zusammenhang zwischen der Lange eines Wortes und der minimalen bzw.
maximalen Anzahl von Regelanwendungen, um es zu erzeugen. Wie viele Regelanwendungen brauchen Sie mindestens (hochstens), um ein Wort der Lange 1000 zu erzeugen? (2 Punkte)
Aufgabe 3 Kontextfreie Grammatik erstellen (5 Punkte)
Ein vollstandiger Stadtteilname sei wie folgt deniert:
Ein vollstandiger Stadtteilname besteht aus dem Namen der Stadt und dem Namen des Stadt- teils getrennt durch einen Bindestrich ('-').
Namen fur Stadt und Stadtteil bestehen jeweils aus mindestens drei Buchstaben, wobei der erste ein Grobuchstabe, alle weiteren Kleinbuchstaben sein mussen.
Dem Namen fur Stadt und Stadtteil kann jeweils ein Bad gefolgt von einem Leerzeichen vorangestellt werden.
Beispiele fur vollstandige Stadtteilnamen sind: Kaiserslautern-Betzenberg, Stuttgart-Bad Cann- statt.
Geben Sie eine kontextfreie Grammatik an, die den Aufbau der vollstandigen Stadtteilnamen formal beschreibt.
Aufgabe 4 Diskussion von Syntax und Semantik (0 Punkte)
Die folgenden Satze sollen auf korrekte Syntax und auf die Moglichkeit der Zuordnung einer sinn- vollen Bedeutung (Semantik) gepruft werden. Die Syntax eines Satzes gilt als korrekt, wenn sie den alten bzw. den neuen deutschen Rechtschreibregeln und den Grammatikregeln der deutschen Sprache genugt. Uberprufen Sie fur jeden Satz, ob seine Syntax korrekt ist und ob ihm eine Seman- tik zugeordnet werden kann. Geben sie eine kurze(!) Begrundung, falls diese Kriterien nicht erfullt sind.
a) "Dieser Satz kein Verb.\
b) "dieser Satz hat eine Semantik\
c) "Studieren in Kaiserslautern ist.\
d) "Der Betzenberg ist der hochste deutsche Fuballberg.\
e) "In Kaiserslautern ist es nachts kalter als drauen.\
Aufgabe 5 Einfache ML-Programme (6 Punkte)
Einfache ML-Programme genugen folgender Syntax:
Top level Declaration Program
;
Top level Declaration
Declaration Expression
;
Declaration
= Expression
val
fun Function Heading : Type = Expression
Ident
Function Heading
Ident ( Ident : Type )
,
Expression
Infix Expression
if Expression then Expression else Expression
Type
Ident list
Infix Expression
Atomic Expression
Infix Expression Infix Operator Infix Expression
Atomic Expression Ident Constant
Expression
Expression (
] [
)
,
, Ident
Expression
( )
Prufen Sie, ob die folgenden Texte der obigen Syntax genugen. Begrunden Sie Ihre Antwort!
a) fun x (x:int, x:int) : int = if x = x then if x = x then x else x else x; (2 Punkte) b) fun und (x:bool, y:bool) : bool = x andalso y; (2 Punkte) c) fun t (x : int list) = if x = [4, 5, 3] then false orelse true; (2 Punkte)
Aufgabe 6 Der ML-Interpreter sml (praktisch) (9 Punkte)
In dieser Aufgabe geht es um die praktische Benutzung der Programmiersprache ML. Dazu konnen Sie die Laufzeitumgebung des Standard ML of New Jersey (sml) verwenden.
a) Starten Sie die SML-Umgebung.
b) Geben Sie die folgenden Funktionsvereinbarungen ein:
fun isEmpty (s:int list) : bool = (s = []);
fun top (s:int list) : int = hd(s);
fun pop (s:int list) : int list = tl(s);
fun lessthan ( x:int, y:int ) : bool = x < y;
fun push ( x:int, xs:int list ) : int list = x :: xs;
fun ifthenelse( i:bool, t:'a, e:'a ) : 'a = if i then t else e;
c) Geben Sie die Ausdrucke aus Aufgabe 3 a, Ubungsblatt 1, in den ML-Interpreter ein und werten Sie diese aus. Beachten Sie, dass jede Eingabe in den Interpreter mit einem Semikolon abgeschlossen werden muss.
Geben Sie weiterhin Ihre Losungen zu Aufgabe 3 c und d, Ubungsblatt 1, ein und werten Sie sie aus.
(2 Punkte) d) Wie verhalt sich der ML-Interpreter bei Eingabe der Texte aus Aufgabe 5, Ubungsblatt 2?
Diskutieren Sie kurz das Resultat. (1 Punkt)
e) Schreiben Sie eine ML-Funktion, die vier Zahlen als Argumente hat und als Ergebnis das Pro- dukt der zweiten und der vierten Zahl, vermindert um die Summe der ersten und dritten Zahl, zuruckliefert. Testen Sie die Funktion anhand von mindestens funf aussagekraftigen Eingaben.
(3 Punkte) f) Strings werden in doppelte Hochkommata eingeschlossen, wie z. B. "ein string". Strings werden mit Hilfe des Konkatenationsoperators ^ aneinandergehangt. Schreiben Sie eine ML- Funktion, die vier Strings als Argumente hat, diese Strings aneinanderhangt und den so zusam- mengesetzten String als Ergebnis liefert. Testen Sie auch diese Funktion mit mindestens funf Eingaben.
(3 Punkte)