• Keine Ergebnisse gefunden

... im Beispiel:

N/A
N/A
Protected

Academic year: 2022

Aktie "... im Beispiel:"

Copied!
27
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

... im Beispiel:

Sif ( E ) S else S 0 | while ( E ) S 1 | E; 2

Eid0

Zustände: Items

Tabelle:

if while id

[. . . → . . . • S. . .] 0 1 2 [. . . → . . . • E. . .] − − 0

(2)

Im Allgemeinen ...

• ist die Menge der möglichen nächsten k Zeichen gegeben durch:

Firstk(α β) = Firstk(α) Firstk(β) wobei:

(1) α die rechte Seite der passenden Regel;

(2) β ein möglicher rechter Kontext von A ist :-)

• Firstk(β) müssen wir dynamisch akkumulieren.

==⇒ Wir erweitern Items um Vorausschau-Mengen ...

(3)

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: [S0 → •S, {}]

Endzustand: [S0S, {}] Übergänge:

Expansionen:

([A → α • Bβ, L],,[A → α • Bβ, L] [B

•γ, Firstk(β) L ]) Shifts:

([A → α • aβ, L], a, [A → α a•β, L]) für A → α aβ ∈ P

(4)

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: [S0 → • S, {}]

Endzustand: [S0S, {}]

Übergänge:

Expansionen:

([A → α • Bβ, L],,[A → α • Bβ, L] [B

•γ, Firstk(β) L ]) Shifts:

([A → α • aβ, L], a, [A → α a•β, L]) für A → α aβ ∈ P

(5)

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: [S0 → • S, {}]

Endzustand: [S0S•, {}]

Ü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→γ• , L0],,[A→α B•β, L]) für

(6)

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

(7)

([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

(8)

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 :-(

• ...

(9)

Beispiel:

S | aSb

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

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

1 [S0 → • S,{}] [S0 → • 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→ •a Sb,{b}]

5 [SaSb,{}] [S→•,{b}] [Sa Sb,{}]

[SaSb,{b}] [S→•,{b}] [Sa Sb,{b}]

. . . . . .

(10)

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

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

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

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

8 [S0 → • S,{}] [S→•,{}] [S0S,{}]

9 [S0 → • S,{}] [SaSb,{}] [S0S,{}]

Die Vorausschau-Tabelle:

a b

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

(11)

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(β) | SL u Aβ} .

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

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

(12)

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(β) | SL u Aβ} .

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

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

(13)

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(β) | SL u Aβ} .

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

(14)

... im Beispiel:

S | aSb

Follow1(S) = {,b}

First1() Follow1(S) = {} {,b} = {, b} First1(aSb) Follow1(S) = {a} {,b} = {a}

Wir schließen:

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

(15)

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 | aSb

a b

S 0 1 0

Satz

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

(16)

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 | aSb

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) :-))

(17)

Beweis:

Sei G stark LL(k).

Betrachte eine Ableitung SL u Aβ und Regeln A→α, A→α0P.

Dann haben wir:

Firstk(α β) ∩ Firstk0 β) = Firstk(α) Firstk(β) ∩ Firstk0) Firstk(β)

Firstk(α) Followk(A) ∩ Firstk0) Followk(A)

= 0

Folglich ist G auch LL(k) :-)

(18)

Sei G LL(1).

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

Fall 1:First1(α) ∩ First10) .

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

(19)

Sei G LL(1).

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

Fall 1:First1(α) ∩ First10) .

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

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

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

First1(α) Follow1(A) ∩ First10) Follow1(A)

= First1(α) ∩ First10)

= First1(α) First1(β) ∩ First10) First1(β)

= 0

(20)

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

First1(α) Follow1(A) ∩ First10) Follow1(A)

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

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

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

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

= S{∅ | SL u Aβ}

= ∅

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

(21)

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

First1(α) Follow1(A) ∩ First10) Follow1(A)

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

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

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

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

= S{∅ | SL u Aβ}

= ∅

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

(22)

Beispiel:

Sa Aa a 0 | 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 Grammatik nicht 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!

(23)

Beispiel:

Sa Aa a 0 | 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 Grammatik nicht 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

(24)

Berechnung von Follow

k

( B ) :

A2 i2

A1 i1 β1 β2 A im

S i0

α

βm B

Followk(B)

Followk(A)

(25)

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 | aSb

Followk(S) ⊇ {}

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

(26)

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 ...

(27)

2.5 Schnelle Berechnung von Vorausschau-Mengen

Im Fall k = 1 lassen sich First, Follow besonders effizient berechnen ;-)

Beobachtung:

Seinen L1, L2T ∪ {} mit L1 6= ∅ 6= L2. Dann ist:

L1 L2 =

L1 falls ∈ L1 (L1\{})∪ L2 sonst

Ist G reduziert, sind alle Mengen A nichtleer :-)

Referenzen

ÄHNLICHE DOKUMENTE

[r]

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:

We show how to continuously com- pute the set of hot items over social (Web 2.0) data streams by defining a dynamic top-k aggregation query and show how pre-aggregations of popular

derö als unter Aufsicht der Kreisärzte auSuben, von ihnen die Lymphe nehmen und ihnen jeden zweifel- haften Fall bey der Operation unverzüglich anzeigen, auch von allen durch

[r]

a) Am Diensta___ habe ich Musi___unterricht in der Schule. c) Wenn ich abbiege, zeige ich lin___s oder rechts an. g) Die Fabri___, in der meine Oma arbeitet schließt in einer

Überlege dir, ob die Namen der Bilder mit „ch“ oder „sch“ geschrieben

Sulasemeelsuse tuhinas unustab Nietzsche täiesti, et tema otsekohesus „isandate" tuludele kõige suuremat kahju saadab, just niisamati kui Macchiavelli