• Keine Ergebnisse gefunden

Topdown Parsing Idee:

N/A
N/A
Protected

Academic year: 2022

Aktie "Topdown Parsing Idee:"

Copied!
30
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

2.4 Topdown Parsing

Idee:

• Benutze den Item-Kellerautomaten.

• Benutze die nächsten k Zeichen, um die Regeln für die Expansionen zu bestimmen ;-)

• Eine Grammatik heißt LL(k) , falls dies immer eindeutig möglich ist.

Wir definieren:

Eine reduzierte Grammatik heißt dann LL(k), falls für je zwei verschiedene Regeln A → α , A → αP und jede Ableitung SL u Aβ mit uT gilt:

Firstk(α β) ∩ Firstkβ) = ∅

(2)

2.4 Topdown Parsing

Idee:

• Benutze den Item-Kellerautomaten.

• Benutze die nächsten k Zeichen, um die Regeln für die Expansionen zu bestimmen ;-)

• Eine Grammatik heißt LL(k) , falls dies immer eindeutig möglich ist.

Wir definieren:

Eine reduzierte Grammatik heißt dann LL(k), falls für je zwei verschiedene Regeln A→α , A→αP und jede Ableitung SL u Aβ mit uT gilt:

Firstk(α β) ∩ Firstkβ) = ∅

(3)

Beispiel 1:

Sif ( E ) S else S | while ( E ) S |

E; Eid

ist LL(1), da First

k(E) = {id} :-)

(4)

Beispiel 2:

Sif ( E ) S else S | if ( E ) S |

while ( E ) S |

E; Eid

... ist nicht LL(k) für jedes k > 0.

(5)

Struktur des LL ( k ) -Parsers:

δ

M

Ausgabe

• Der Parser sieht ein Fenster der Länge k der Eingabe;

• er realisiert im Wesentlichen den Item-Kellerautomaten;

• die Tabelle M[q,w] enthält die jeweils zuwählende Regel :-)

(6)

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

(7)

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

(8)

Ein erweitertes Item ist ein Paar: [A→α •γ, L] (A→α γ ∈ P, LT≤k) Die Menge L benutzen wir, um First

k(β) 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

•γ, First

k(β) ⊙ L ])

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

(9)

Ein erweitertes Item ist ein Paar: [A→α •γ, L] (A→α γ ∈ P, LT≤k) Die Menge L benutzen wir, um First

k(β) 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

•γ, First

k(β) ⊙ L ])

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

(10)

Ein erweitertes Item ist ein Paar: [A→α •γ, L] (A→α γ ∈ P, LT≤k) 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

(11)

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

(12)

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

(13)

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

• ...

(14)

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}]

. . . . . .

(15)

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

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

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

[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

(16)

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) = ∅

(17)

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) = ∅

(18)

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→αP :

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

(19)

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

(20)

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

(21)

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

(22)

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

(23)

Sei G LL(1).

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

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

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

(24)

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(β)

= ∅

(25)

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

(26)

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

(27)

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

(28)

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 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 ==⇒ Übung!

(29)

Berechnung von Follow

k

( B ) :

A2 i2

A1 i1 β1 β2

A im S i0

α

βm

B

Followk(B)

Followk(A)

(30)

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) ⊇ {ǫ}

Follow

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

Referenzen

ÄHNLICHE DOKUMENTE

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

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

[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

[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