Entdecken Sie eBooks
Kategorien
Entdecken Sie Hörbücher
Kategorien
Entdecken Sie Zeitschriften
Kategorien
Entdecken Sie Dokumente
Kategorien
Lösung - Übung 1
Prof.aa
Dr. J. Giesl S. Dollase, M. Hark
S1 → O
S1 → s(S1 )
S1 → plus(S1 ; S1 )
Die Semantik W(A) eines syntaktisch korrekten EAAs A ist wie folgt definiert, wobei x und y ebenfalls
syntaktisch korrekte EAAs sind:
W(O) = 0
W(s(x)) = W(x) + 1
W(plus(x; y)) = W(x) + W(y)
Geben Sie für die folgenden drei Ausdrücke an, ob es sich um einen syntaktisch korrekten EAA handelt
und welche Semantik er hat.
i) plus(s(O); O) ii) plus(O; s(O); O) iii) plus(plus(O; s(O)); s(plus(O; O)))
b) Beweisen oder widerlegen Sie: Zwei Ausdrücke mit gleicher Syntax haben auch die gleiche Semantik.
c) Beweisen oder widerlegen Sie: Ein syntaktisch korrektes Programm ist auch semantisch korrekt.
Lösung:
1
Programmierung WiSe 19/20
Lösung - Übung 1
S2 → A.
S2 → A.S2
A → B
A → B:-B
B → p
B → q
B → r
B → s
Die Semantik W(P) eines syntaktisch korrekten SASP Programms P ist wie folgt definiert, wobei P 0
ebenfalls ein syntaktisch korrektes SASP Programm ist und x, y ∈ {p, q, r, s}:
W(x.) = {x}
W(x:-y.) = ∅
0
W(P x.) = W(P 0 ) ∪ {x}
(
W(P 0 ) ∪ {x} falls y ∈ W(P 0 )
W(P 0 x:-y.) =
W(P 0 ) sonst
Geben Sie für die folgenden drei Ausdrücke an, ob es sich um ein syntaktisch korrektes SASP Programm
handelt und welche Semantik es hat.
i) p. q :- p ii) p. q :- p. s :- r. iii) a :- r.
b) Beweisen oder widerlegen Sie: Zwei Ausdrücke mit gleicher Semantik haben auch die gleiche Syntax.
c) Beweisen oder widerlegen Sie: Ein bzgl. einer Sprache S semantisch korrektes Programm ist bzgl. S auch
syntaktisch korrekt.
Lösung:
a) i) Das Programm ist syntaktisch nicht korrekt (der . fehlt am Ende) und hat daher keine Semantik.
ii) Das Programm ist syntaktisch korrekt und seine Semantik ist {p, q}.
iii) Das Programm ist syntaktisch nicht korrekt (a ist kein Terminalsymbol der Grammatik G2 ) und
hat daher keine Semantik.
b) Die Aussage ist falsch. Betrachten wir die beiden syntaktisch korrekten, aber verschiedenen SASP Pro-
gramme p. q. und das Programm ii) aus der vorigen Teilaufgabe. Beide haben die gleiche Semantik
{p, q}, sind jedoch syntaktisch verschieden. Dieses Gegenbeispiel widerlegt die Aussage.
c) Die Aussage ist wahr. Da ein syntaktisch inkorrektes Programm keine Semantik hat, ist syntaktische
Korrektheit eine Voraussetzung für semantische Korrektheit. Per Kontraposition gilt damit direkt die
Aussage.
2
Programmierung WiSe 19/20
Lösung - Übung 1
Lösung:
a) Die kontextfreie Grammatik G3 = ({S3 , A, B}, {a, b}, P3 , S3 ) erzeugt die Sprache L1 , wobei P3 genau die
folgenden Produktionsregeln enthält:
S3 → AB
S3 → BA
A → ε
A → aA
B → ε
B → bB
Mit dem Nonterminal S3 wählt man, ob man zuerst a oder b Symbole erzeugen will. Das Nonterminal
A erzeugt Wörter bestehend aus beliebig vielen a Symbolen, während B Wörter aus beliebig vielen b
Symbolen erzeugt.
b) Die folgende Grammatik in EBNF mit nur einer nicht-rekursiven Regel definiert L1 .
S3 = ({a}{b} | {b}{a})
| {z } | {z }
1 2
Diese Konstruktion ist analog zu der Grammatik aus Teilaufgabe a). In Teil (1) wird ein Wort erzeugt,
bei dem beliebig viele a Symbole vor beliebig vielen b Symbolen stehen. In Teil (2) wird ein Wort erzeugt,
bei dem beliebig viele b Symbole vor beliebig vielen a Symbolen stehen.
c) Das folgende Syntaxdiagramm definiert die Sprache L1 :
a b
b a
3
Programmierung WiSe 19/20
Lösung - Übung 1
L2 = {w ∈ {a, b}∗ | für jedes b steht vorher im Wort w mindestens ein a oder das Wort w enthält kein a}
a) Geben Sie eine kontextfreie Grammatik an, welche die Sprache L2 erzeugt.
b) Geben Sie eine Grammatik in EBNF an, die L2 definiert. Ihre Grammatik darf nur aus höchstens zwei
Regeln bestehen. Höchstens eine dieser Regeln darf rekursiv sein (d. h. das Nichtterminalsymbol auf der
linken Seite darf rechts auftreten).
Um die Lesbarkeit zu erhöhen, dürfen Sie Anführungszeichen um Terminalsymbole weglassen.
c) Geben Sie Syntaxdiagramme an, um die Sprache L2 zu definieren. Sie dürfen Nichtterminalsymbole
verwenden und eines der Syntaxdiagramme darf rekursiv sein.
Lösung:
a) Die kontextfreie Grammatik G4 = ({S4 , B, C}, {a, b}, P4 , S4 ) erzeugt die Sprache L2 , wobei P4 genau die
folgenden Produktionsregeln enthält:
S4 → B
S4 → C
B → bB
B → b
C → aCbC
C → aC
C → ε
Mit den ersten beiden Regeln entscheidet man, ob das Wort ein a enthält oder nicht. Aus dem Nichtter-
minal B kann man Wörter beliebiger Länge größer 0 erzeugen, die nur aus b bestehen. Mit der ersten
C Regel kann man ein b erzeugen und das zugehörige a, das vorher im Wort stehen muss. Die zweite C
Regel erzeugt beliebig viele a, die ohne weitere Einschränkung im Wort stehen dürfen. Mit der letzten
Regel kann man das leere Wort erzeugen oder C Symbole entfernen.
S4 = ({b} | C) C = {(aCb
|{z} | |{z}
a )}
1 2
Diese Konstruktion ist analog zu der Grammatik aus Teilaufgabe a). Mit S4 entscheidet man zwischen
einem Wort aus beliebig vielen b oder einem Wort, das auch a enthält. In Teil (1) der C–Regel wird ein b
mit zugehörigem a vorher im Wort erzeugt. In Teil (2) werden beliebig viele a erzeugt. Da Teil (2) auch
das leere Wort erzeugen kann, übernimmt es auch die Funktion der letzten Regel aus Teilaufgabe a).
4
Programmierung WiSe 19/20
Lösung - Übung 1
C a C b
S4 C
b a
Tutoraufgabe 5 (Zweierkomplement):
a) Sei x eine ganze Zahl. Wie unterscheiden sich die Zweierkomplement-Darstellungen von x und −x?
b) Erklären Sie im Detail, wie die beiden Ausgaben des folgenden Programms berechnet werden.
Lösung:
a) Ausgehend von der Zweierkomplement-Darstellung von x erreicht man durch die folgenden beiden Schrit-
te die Zweierkomplement-Darstellung von −x:
a) vertausche alle 0en und 1en
b) addiere 1
Mit diesen beiden Schritten ist auch die Rückrichtung (−x zu x) möglich.
In der folgenden Tabelle finden Sie alle Binärzahlen mit drei Ziffern. Man erkennt das Muster, nach dem
das genannte Verfahren funktioniert.
3 011
2 010
1 001
0 000
-1 111
-2 110
-3 101
-4 100
b) Im Folgenden werden Binärzahlen mit einem Z markiert, wenn die Zahl im Zweierkomplement verstanden
werden muss. Die Zahl 1111 Z ist also als −1 zu verstehen, während 1111 für die Zahl 15 steht.
Der Datentyp int benutzt 32 Bit. Die Darstellung der Zahl −2147483648 im Zweierkomplement ist:
5
Programmierung WiSe 19/20
Lösung - Übung 1
10000000000000000000000000000000 Z
00000000000000000000000000000001 Z
--------------------------------
10000000000000000000000000000001 Z
Auch hier gibt die führende 1 an, dass die dargestellte Zahl negativ ist. Den Dezimalwert der dargestellten
Zahl erhält man durch Invertieren und Addieren von 1:
01111111111111111111111111111110
00000000000000000000000000000001
--------------------------------
01111111111111111111111111111111
Dies steht für 2147483647. Mit der Vorzeicheninformation von oben ergibt sich -2147483647.
Berechnet man zahl - 1, berechnet sich das Ergebnis durch die Addition mit -1. Die Zahl -1 ist im
Zweierkomplement dargestellt durch:
11111111111111111111111111111111 Z
10000000000000000000000000000000 Z
11111111111111111111111111111111 Z
--------------------------------
01111111111111111111111111111111 Z
Das Ergebnis ist also nicht negativ (erkennbar durch die führende 0) und entspricht der Dezimalzahl
+2147483647. Dieses Ergebnis wird auch durch das Java-Programm ausgegeben.
c)
Bitfolge 5-Bit Zweierkomplement
00010 2
10111 -9
11011 -5
01101 13
10000 -16
b) Die zwei folgenden Java-Ausdrücke werten jeweils zu true aus. Geben Sie dafür jeweils eine Begründung.
1) −1 000 000 000 − 1 100 000 000 − 1 200 000 000 > 0
2) −(0 − 2 000 000 000 − 147 000 000 − 483 000 − 648) < 0
Lösung:
6
Programmierung WiSe 19/20
Lösung - Übung 1
a)
b) 1) Die Berechnung von −1 000 000 000 − 1 100 000 000 hat als Ergebnis −2 100 000 000. Bei der weiteren
Berechnung −2 100 000 000 − 1 200 000 000, also der Addition zweier negativer Zahlen, werden intern
die Zweierkomplement-Darstellungen mittels normaler Binärzahl-Rechnung addiert. Hierbei ist das
Ergebnis zu groß, um mit 32 Stellen dargestellt zu werden (ein Überlauf passiert). Das zusätzliche
Bit wird ignoriert und das restliche Ergebnis wird als Zahl im Zweierkomplement interpretiert. Bei
dieser konkreten Berechnung ergibt sich eine Binärzahl, bei der das vorderste Bit eine 0 ist, weshalb
das Ergebnis der Berechnung eine positive Zahl ist.
2) Der Wert in der Klammer ist −2147483648, also −231 . Bei der Berechnung von −(−2147483648)
wird der entsprechende Bitvektor 10 . . . 0 zunächst invertiert (was 01 . . . 1 ergibt), und dann noch 1
auf diesen Bitvektor addiert (was den Bitvektor 10 . . . 0 ergibt). Der entstandene Bitvektor ist genau
derselbe, von dem wir ursprünglich ausgegangen sind und insbesondere negativ.
Lösung: