4.2 KiB
Übungsblatt 10
Wenzel Schwan (1125033), Paul Kneidl (1125219), David Schirrmeister (1125746), Michelle Klein (1126422)
Aufgabe 1
1a)
Gegeben sei folgende CNF-Grammatik G_1
:
G_1:
S → AB | CD
C → AB
D → BA
A → 0
B → 1
Nutzen Sie den CYK-Algorithmus, um zu entscheiden, ob das Wort w = 0110
zur Sprache L(G_1)
gehört.
Legen Sie dazu eine Tabelle analog zu dem Beispiel aus der Vorlesung (Kapitel 7, Folie 16) an und füllen Sie diese entsprechend aus.
Var(w)_{[i,j]}(G_1) |
1 | 2 | 3 | 4 |
---|---|---|---|---|
1 | \{A\} |
{S,C} | {} | \{S\} |
2 | - | \{B\} |
{} | {} |
3 | - | - | \{D\} |
|
4 | - | - | - | \{A\} |
→ w ∈ L(G_1)
1b)
Gegeben sei folgende CNF-Grammatik G_2
:
G_2:
S → AB
A → AA | AC | a
B → BC | b
C → CC | a | c
Nutzen Sie analog zu Aufgabe 1a den CYK-Algorithmus, um zu entscheiden, ob das Wort w = acb
zur Sprache L(G_2)
gehört.
Var(w)_{[i,j]}(G_2) |
1 | 2 | 3 |
---|---|---|---|
1 | \{A,C\} |
\{A,C\} |
\{S\} |
2 | - | \{C\} |
{} |
3 | - | - | \{B\} |
→ w ∈ L(G_1)
Aufgabe 2
Gegeben sei folgende CNF-Grammatik G
:
G:
S → AB
A → AA | AC | a
B → BC | b
C → CC | a | c
2a)
Zeichnen Sie zwei verschiedene Syntaxbäume für das Wort w = acacaaabaca \in L(G)
.
2b)
Finden Sie ein Wort w \in L(G)
, zu dem ein Ableitungsbaum mit möglichst wenig Knoten existiert, und zeichnen Sie den zugehörigen Ableitungsbaum.
w = ab
Aufgabe 3
Betrachten Sie die folgenden Grammatiken G_1
und G_2
. Gibt es zu der jeweiligen Grammatik G_i
(i \in \{1, 2\}
) ein Wort w \in L(G_i)
mit mehr als einem Syntaxbaum? Begründen Sie Ihre Antwort.
3a)
G_1:
S → 0 1 | 0 S 1
Nein, es gibt kein Wort mit mehreren Syntaxbäumen, da die Regeln jeden Schritt genau vorgeben, da wir nur eine Regel mit Rekursion haben, ist keine Mehrdeutigkeit möglich.
3b)
G_2:
S → 0 B | 1 A
A → 0 | 0 S | 1 A A
B → 1 | 1 S | 0 B B
Nein, es gibt keine Möglichkeit mehrere Syntaxbäume zu bilden, da zwar eine Rekursion möglich ist durch
B → 0BB
und A→1AA
, jedoch durch die 1 und 0 vor den Variablen kein alternativer Pfad gebildet werden kann.
Aufgabe 4
Für eine Sprache L
über einem Alphabet \Sigma
definieren wir
L^R := \{ w^R \mid w \in L \}
Dabei gilt w^R = w_n w_{n-1} \dots w_1
für w = w_1 w_2 \dots w_n \in L
mit w_i \in \Sigma
.
Beschreiben Sie ein algorithmisches Verfahren, das aus einer kontextfreien Grammatik G
eine kontextfreie Grammatik G^R
erzeugt, so dass L(G^R) = L(G)^R
gilt. Begründen Sie die Korrektheit Ihres Verfahrens.
Gegeben: G=(Σ, V, S, R)
- S, V und Σ bleiben gleich
- Für jede Regel
A → X_1X_2...X_n
- Regel
A → X_n, X_{n-1}, ..., X_1
hinzufügen
- Regel
Da kontextfreie Grammatiken keine Einschränkungen hinsichtlich der Position von (Nicht-)Terminalen in Regeln haben,
bleibt die resultierende Grammatik G^R
kontextfrei.
Die Korrektheit folgt daraus, dass jede Regel in G
eine Regel in G^R
erzeugt, die das gleiche Wort in umgekehrter Reihenfolge generiert.
Aufgabe 5
Für eine Sprache L
über dem Alphabet \Sigma = \{ 0, 1 \}
definieren wir
L^{\text{prfx}} := \{ x \in \Sigma^\ast \mid \exists y \in \Sigma^\ast : x \cdot y \in L \}
Beschreiben Sie ein algorithmisches Verfahren, das aus einer regulären Grammatik G
eine reguläre Grammatik G_{\text{prfx}}
erzeugt, so dass L(G_{\text{prfx}}) = L(G)_{\text{prfx}}
gilt. Begründen Sie die Korrektheit Ihres Verfahrens.
Gegeben: G=(Σ, V, S, R)
-
Wandle G in einen NEA N um
-
Markiere alle Zustände als akzeptierend →
N_{prfx}
- Präfix kann beliebig lang sein und muss kein nachfolgendes Symbol haben
-
Wandle
N_{prfx}
in eine rechtslineare GrammatikG_{prfx}
um -
Oder für jede Nichtterminale die Regel
A → ε
hinzufügen