• Keine Ergebnisse gefunden

Die Vorausschau-Tabelle:

N/A
N/A
Protected

Academic year: 2022

Aktie "Die Vorausschau-Tabelle:"

Copied!
22
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Ein erweitertes Item ist ein Paar: [A→α •γ, L] (A→α γ ∈ P, LTk) Die Menge L benutzen wir, um Firstk(β) für den rechten Kontext β von A zu repräsentieren :-)

Konstruktion:

Zustände: erweiterte Items Anfangszustand: [S → • S, {ǫ}]

Endzustand: [SS•, {ǫ}]

Übergänge:

Expansionen: ([A→α • Bβ, L],ǫ,[A→α • Bβ, L] [B→ •γ, Firstk(β) ⊙ L ]) für A → α Bβ, B→γ ∈ P

Shifts: ([A→α • aβ, L], a,[A→α a •β, L]) für A→α aβ ∈ P Reduce: ([A→α • Bβ, L] [B→γ•, L],ǫ,[A→α B• β, L]) für

A→α Bβ, B→γ ∈ P

(2)

A0 i0

A2 i2 A1 i1

γ

β1

β2

B i β

Die Vorausschau-Tabelle:

Wir setzen M[ [A→α • Bβ, L], w] = i genau dann wenn (B,i) die Regel B→γ ist und: wFirstk(γ) ⊙ Firstk(β) ⊙ L

(3)

([A0 → •α1 A1β1, L1], uv) ⊢ ([A0 →α1A1β1, L1] . . .[Am−1 →αmAm βm, Lm], v)

([A0 →α1 A1 β1, L1], ǫ) ... gilt genau dann wenn:

(1) α1 . . .αm u (2) Amβm . . .β1 v

(3) Lm = Firstkm−1) ⊙ . . .⊙ Firstk1) ⊙ L1

A0 i0

A2 i2 A1 i1

γ

β1

β2

Am im βm

(4)

Satz

Die reduzierte kontextfreie Grammatik G ist LL(k) genau dann wenn die k-Vorausschau-Tabelle für alle benötigten erweiterten Items wohl-definiert ist.

Diskussion:

• Der erweiterte Item-Kellerautomat zusammen mit einer

k-Vorausschau-Tabelle erlaubt die deterministische Rekonstruktion einer Links-Ableitung :-)

• Die Anzahl der Vorausschau-Mengen L kann sehr groß sein :-(

• ...

(5)

Beispiel:

S ǫ | a S b

Die Übergänge des erweiterten Item-Kellerautomat (k = 1) :

0 [S → • S,{ǫ}] ǫ [S → • S,{ǫ}] [S→•,{ǫ}]

1 [S → • S,{ǫ}] ǫ [S → • S,{ǫ}] [S→ • aSb,{ǫ}]

2 [S→ • aSb,{ǫ}] a [SaSb,{ǫ}]

[S→ • aSb,{b}] a [SaSb,{b}]

3 [SaSb,{ǫ}] ǫ [SaSb,{ǫ}] [S→•,{b}]

[SaSb,{b}] ǫ [SaSb,{b}] [S→•,{b}]

4 [SaSb.{ǫ}] ǫ [SaSb.{ǫ}] [S→ • aSb,{b}]

[SaSb.{b}] ǫ [SaSb.{b}] [S→ • aSb,{b}]

5 [SaSb,{ǫ}] [S→•,{b}] ǫ [SaSb,{ǫ}]

[SaSb,{b}] [S→•,{b}] ǫ [SaSb,{b}]

. . . . . .

(6)

. . . . . . 6 [SaSb,{ǫ}] [Sa Sb,{b}] ǫ [SaSb,{ǫ}]

[SaSb,{b}] [Sa Sb,{b}] ǫ [SaSb,{b}]

7 [SaSb,{ǫ}] b [Sa Sb,{ǫ}]

[SaSb,{b}] b [SaSb,{b}]

8 [S → • S,{ǫ}] [S→•,{ǫ}] ǫ [SS,{ǫ}]

9 [S → • S,{ǫ}] [Sa Sb,{ǫ}] ǫ [SS,{ǫ}]

Die Vorausschau-Tabelle:

ǫ a b [S → • S,{ǫ}] 0 1 − [SaSb,{ǫ}] − 1 0 [SaSb,{b}] − 1 0

(7)

Beobachtung:

• Die auszuwählende Regel hängt hier ja gar nicht von den Erweiterungen der Items ab !!!

• Unter dieser Voraussetzung können wir den Item-Kellerautomaten ohne Erweiterung benutzen :-)

• Hängt die auszuwählende Regel nur von der aktuellen Vorausschau w ab, nennen wir G auch stark LL(k) ...

Wir definieren:

Followk(A) = S{Firstk(β) | S L u Aβ} .

Die reduzierte kontextfreie Grammatik G heißt stark LL(k), falls für je zwei verschiedene A → α , A → αP :

Firstk(α) ⊙ Followk(A) ∩ Firstk) ⊙ Followk(A) = ∅

(8)

Beobachtung:

• Die auszuwählende Regel hängt hier ja gar nicht von den Erweiterungen der Items ab !!!

• Unter dieser Voraussetzung können wir den Item-Kellerautomaten ohne Erweiterung benutzen :-)

• Hängt die auszuwählende Regel nur von der aktuellen Vorausschau w ab, nennen wir G auch stark LL(k) ...

Wir definieren:

Followk(A) = S{Firstk(β) | S L u Aβ} .

Die reduzierte kontextfreie Grammatik G heißt stark LL(k), falls für je zwei verschiedene A → α , A → αP :

Firstk(α) ⊙ Followk(A) ∩ Firstk) ⊙ Followk(A) = ∅

(9)

Beobachtung:

• Die auszuwählende Regel hängt hier ja gar nicht von den Erweiterungen der Items ab !!!

• Unter dieser Voraussetzung können wir den Item-Kellerautomaten ohne Erweiterung benutzen :-)

• Hängt die auszuwählende Regel nur von der aktuellen Vorausschau w ab, nennen wir G auch stark LL(k) ...

Wir definieren:

Followk(A) = S{Firstk(β) | S L u Aβ} .

Die reduzierte kontextfreie Grammatik G heißt stark LL(k), falls für je zwei verschiedene A→α , A→αP :

Firstk(α) ⊙ Followk(A) ∩ Firstk) ⊙ Followk(A) = ∅

(10)

... im Beispiel:

S ǫ | a S b

Follow1(S) = {ǫ,b}

First1(ǫ) ⊙ Follow1(S) = {ǫ} ⊙ {ǫ, b} = {ǫ, b} First1(a Sb) ⊙ Follow1(S) = {a} ⊙ {ǫ,b} = {a}

Wir schließen:

Die Grammatik ist in der Tat stark LL(1) :-)

(11)

Ist G eine starke LL(k)-Grammatik, können wir die Vorausschau-Tabelle statt mit (erweiterten) Items mit Nichtterminalen indizieren :-)

Wir setzen M[B, w] = i genau dann wenn (B,i) die Regel B→γ ist und: wFirstk(γ) ⊙ Followk(B) .

... im Beispiel:

S ǫ | a S b

ǫ a b

S 0 1 0

Satz

• Jede starke LL(k)-Grammatik ist auch LL(k) :-)

• Jede LL(1)-Grammatik ist bereits stark LL(1) :-))

(12)

Ist G eine starke LL(k)-Grammatik, können wir die Vorausschau-Tabelle statt mit (erweiterten) Items mit Nichtterminalen indizieren :-)

Wir setzen M[B, w] = i genau dann wenn (B,i) die Regel B→γ ist und: wFirstk(γ) ⊙ Followk(B) .

... im Beispiel:

S ǫ | a S b

ǫ a b

S 0 1 0

Satz

• Jede starke LL(k)-Grammatik ist auch LL(k) :-)

• Jede LL(1)-Grammatik ist bereits stark LL(1) :-))

(13)

Beweis:

Sei G stark LL(k).

Betrachte eine Ableitung SL u Aβ und Regeln A→α, A→αP. Dann haben wir:

Firstk(α β) ∩ Firstk β) = Firstk(α) ⊙ Firstk(β) ∩ Firstk) ⊙ Firstk(β)

Firstk(α) ⊙ Followk(A) ∩ Firstk) ⊙ Followk(A)

= ∅

Folglich ist G auch LL(k) :-)

(14)

Sei G LL(1).

Betrachte zwei verschiedene Regeln A→α , A→αP.

Fall 1: ǫ ∈ First1(α) ∩ First1) .

Dann kann G nicht LL(1) sein :-)

(15)

Sei G LL(1).

Betrachte zwei verschiedene Regeln A→α , A→αP.

Fall 1: ǫ ∈ First1(α) ∩ First1) .

Dann kann G nicht LL(1) sein :-)

Fall 2: ǫ 6∈ First1(α) ∪ First1) .

Sei SL u Aβ . Da G LL(1) ist, gilt:

First1(α) ⊙ Follow1(A) ∩ First1) ⊙ Follow1(A)

= First1(α) ∩ First1)

= First1(α) ⊙ First1(β) ∩ First1) ⊙ First1(β)

= ∅

(16)

Fall 3: ǫ ∈ First1(α) und ǫ 6∈ First1) . Dann gilt:

First1(α) ⊙ Follow1(A) ∩ First1) ⊙ Follow1(A)

= First1(α) ⊙ Follow1(A) ∩ First1)

= First1(α) ⊙ (S{First1(β) | SL u Aβ}) ∩ First1)

= (S{First1(α) ⊙ First1(β) | SL u Aβ}) ∩ First1)

= S{First1(α) ⊙ First1(β) ∩ First1) | SL u Aβ}

= S{∅ | SL u Aβ}

= ∅

Fall 4: ǫ 6∈ First1(α) und ǫ ∈ First1) : analog :-)

(17)

Fall 3: ǫ ∈ First1(α) und ǫ 6∈ First1) . Dann gilt:

First1(α) ⊙ Follow1(A) ∩ First1) ⊙ Follow1(A)

= First1(α) ⊙ Follow1(A) ∩ First1)

= First1(α) ⊙ (S{First1(β) | SL u Aβ}) ∩ First1)

= (S{First1(α) ⊙ First1(β) | SL u Aβ}) ∩ First1)

= S{First1(α) ⊙ First1(β) ∩ First1) | SL u Aβ}

= S{∅ | SL u Aβ}

= ∅

Fall 4: ǫ 6∈ First1(α) und ǫ ∈ First1) : analog :-)

(18)

Beispiel:

Sa Aa a0 | b Ab a1 Ab0 | ǫ1

Offenbar ist die Grammatik LL(2) :-) Andererseits gilt:

First2(b) ⊙ Follow2(A) ∩ First2(ǫ) ⊙ Follow2(A)

= {b} ⊙ {a a, b a} ∩ {ǫ} ⊙ {a a, b a}

= {b a, b b} ∩ {a a, b a} 6= ∅

Folglich ist die Grammatiknicht stark LL(2) :-(

Wir schließen:

• Für k > 1 ist nicht jede LL(k)-Grammatik automatisch stark LL(k).

• Zu jeder LL(k)-Grammatik kann jedoch eine äquivalente starke LL(k)-Grammatik konstruiert werden RR Übung!

(19)

Beispiel:

Sa Aa a0 | b Ab a1 Ab0 | ǫ1

Offenbar ist die Grammatik LL(2) :-) Andererseits gilt:

First2(b) ⊙ Follow2(A) ∩ First2(ǫ) ⊙ Follow2(A)

= {b} ⊙ {a a, b a} ∩ {ǫ} ⊙ {a a, b a}

= {b a, b b} ∩ {a a, b a} 6= ∅

Folglich ist die Grammatiknicht stark LL(2) :-(

Wir schließen:

• Für k > 1 ist nicht jede LL(k)-Grammatik automatisch stark LL(k).

• Zu jeder LL(k)-Grammatik kann jedoch eine äquivalente starke LL(k)-Grammatik konstruiert werden ==⇒ Übung!

(20)

Berechnung von Follow

k

( B ) :

A2 i2

A1 i1 β1

β2

A im S i0

α

βm

B

Followk(B)

Followk(A)

(21)

Berechnung von Follow

k

( B ) :

Idee:

• Wir stellen ein Ungleichungssystem auf :-)

• ǫ ist ein möglicher rechter Kontext von S :-)

• Mögliche rechte Kontexte der linken Seite einer Regel propagieren wir ans Ende jeder rechten Seite ...

... im Beispiel:

S ǫ | a S b

Followk(S) ⊇ {ǫ}

Followk(S) ⊇ {b} ⊙ Followk(S)

(22)

Allgemein:

Followk(S) ⊇ {ǫ}

Followk(B) ⊇ Firstk(X1) ⊙ . . .Firstk(Xm) ⊙ Followk(A) für A→α BX1 . . . XmP

Diskussion:

• Man überzeugt sich, dass die kleinste Lösung dieses Ungleichungssystems tatsächlich die Mengen Followk(B) liefert :-)

• Die Größe der auftretenden Mengen steigt mit k rapide :-(

• In praktischen Systemen wird darum meist nur der Fall k = 1 implementiert ...

Referenzen

ÄHNLICHE DOKUMENTE

Die reduzierte kontextfreie Grammatik G ist LL ( k ) genau dann wenn die k-Vorausschau-Tabelle für alle benötigten erweiterten Items wohl-definiert

• Hat eine SZK keine eingehenden Kanten, erhält man ihren Wert, indem man die kleinste obere Schranke aller Werte in der SZK berechnet :-)c. • Gibt es eingehende Kanten, muss

• Hat eine SZK keine eingehenden Kanten, erhält man ihren Wert, indem man die kleinste obere Schranke aller Werte in der SZK berechnet :-). • Gibt es eingehende Kanten, muss

denen die Wahl oder Anstellung zusteht, ertheilt wird sie von denjenigen,

● Die Tatsache, dass die Verträ- ge mit den Impfstoffherstellern und die Preisgestaltung für den Impf- stoff geheim gehalten werden mussten (war Teil der Verträge),

Satz 6: Es ist unentscheidbar, ob es für eine Sprache L eine Grammatik G gibt, so daß G LL(k) oder LR(k) ist... Theoretische Grundlage:

Die zahlenmäßige Entwicklung der Kassenärzte in der Bundesrepublik Deutschland zeigt in den letzten Jahren zwei deutlich unterschiedli- che Wachstumstendenzen: Auf der einen

für den Halbmesser 100 berechneten Längen der Tangenten beziehungsweise Cotangenten als Behelf für die Konstruktion der Winkel von 0° bis 360°...