• Keine Ergebnisse gefunden

Offenbar gilt:

N/A
N/A
Protected

Academic year: 2022

Aktie "Offenbar gilt:"

Copied!
36
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Offenbar gilt:

• Die Folge der Reduktionen entspricht einer reversen Rechtsableitung für die Eingabe :-)

• Zur Korrektheit zeigt man, dass für jedes q gilt:

(q, w)⊢ (q A, ǫ) gdw. A w

• Der Kellerautomat MG(1) ist i.a. nicht-deterministisch :-(

• Um ein deterministisches Parse-Verfahren zu erhalten, muss man die Reduktionsstellen identifizieren ==⇒ LR-Parsing

342

(2)

Donald E. Knuth, Stanford

343

(3)

Konstruktion 2: Item-Kellerautomat

• Rekonstruiere eine Linksableitung.

• Expandiere Nichtterminale mithilfe einer Regel.

• Verifiziere sukzessive, dass die gewählte Regel mit der Eingabe übereinstimmt.

==⇒ Die Zustände sind jetzt Items.

• Ein Item ist eine Regel mit Punkt:

[A →α •β] , A → α β ∈ P

Der Punkt gibt an, wieweit die Regel bereits abgearbeitet wurde :-)

344

(4)

Unser Beispiel:

SA B Aa Bb

Wir fügen eine Regel: SS hinzu ;-) Dann konstruieren wir:

Anfangszustand: [S → • S] Endzustand: [SS•]

[S → • S] ǫ [S → • S] [S→ • A B] [S→ • A B] ǫ [S→ • A B] [A→ • a]

[A→ • a] a [Aa •]

[S→ • A B] [Aa•] ǫ [SAB]

[SAB] ǫ [SAB] [B→ • b]

[B→ • b] b [Bb•]

[SAB] [Bb•] ǫ [SA B•] [S → • S] [SA B•] ǫ [SS•]

345

(5)

Der Item-Kellerautomat M(2)G hat drei Arten von Übergängen:

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

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

A→α Bβ, B→γ ∈ P

Items der Form: [A→α•] heißen auch vollständig :-)

Der Item-Kellerautomat schiebt den Punkt einmal um den Ableitungsbaum herum ...

346

(6)

... im Beispiel:

S 0

A 0

a

B 0

b

347

(7)

... im Beispiel:

S 0

A 0

a

B 0

b

348

(8)

... im Beispiel:

S 0

A 0

a

B 0

b

349

(9)

... im Beispiel:

S 0

A 0

a

B 0

b

350

(10)

... im Beispiel:

S 0

A 0

a

B 0

b

351

(11)

... im Beispiel:

S 0

A 0

a

B 0

b

352

(12)

... im Beispiel:

S 0

A 0

a

B 0

b

353

(13)

... im Beispiel:

S 0

A 0

a

B 0

b

354

(14)

... im Beispiel:

S 0

A 0

a

B 0

b

355

(15)

Diskussion:

• Die Expansionen einer Berechnung bilden eine Linksableitung :-)

• Leider muss man bei den Expansionen nichtdeterministisch zwischen verschiedenen Regeln auswählen :-(

• Zur Korrektheit der Konstruktion zeigt man, dass für jedes Item [A→α • Bβ] gilt:

([A→α • Bβ], w) ⊢ ([A→α B•β], ǫ) gdw. B w

• LL-Parsing basiert auf dem Item-Kellerautomaten und versucht, die Expansionen durch Vorausschau deterministisch zu machen ...

356

(16)

Philip M. Lewis, SUNY Richard E. Stearns, SUNY

357

(17)

Beispiel:

S ǫ | a S b

Die Übergänge des zugehörigen Item-Kellerautomat:

0 [S → • S] ǫ [S → • S] [S→•]

1 [S → • S] ǫ [S → • S] [S→ • a Sb]

2 [S→ • a S b] a [SaSb]

3 [SaSb] ǫ [SaSb] [S→•]

4 [SaSb] ǫ [SaSb] [S→ • a S b] 5 [SaSb] [S→•] ǫ [Sa Sb]

6 [SaSb] [Sa Sb•] ǫ [Sa Sb]

7 [Sa Sb] b [Sa Sb•]

8 [S → • S] [S→•] ǫ [SS•]

9 [S → • S] [Sa S b•] ǫ [SS•]

Konflikte gibt es zwischen den Übergängen (0, 1) bzw. zwischen (3,4) – die sich durch Betrachten des nächsten Zeichens lösen ließen :-)

358

(18)

2.3 Vorausschau-Mengen

Für eine Menge LT definieren wir:

Firstk(L) = {uL | |u| < k} ∪ {uTk | ∃vT : uvL}

Beispiel:

ǫ

a b a a b b a a a b b b

359

(19)

2.3 Vorausschau-Mengen

Für eine Menge LT definieren wir:

Firstk(L) = {uL | |u| < k} ∪ {uTk | ∃vT : uvL}

Beispiel:

ǫ

a b a a a a

die Präfixe der Länge 2 :-)

360

(20)

Rechenregeln:

Firstk(_) ist verträglich mit Vereinigung und Konkatenation:

Firstk(∅) = ∅

Firstk(L1L2) = Firstk(L1) ∪ Firstk(L2)

Firstk(L1 · L2) = Firstk(Firstk(L1) · Firstk(L2)) := Firstk(L1) ⊙ Firstk(L2)

k −Konkatenation

Beachte:

• Die Menge Dk = 2Tk ist endlich :-)

• Die Operation: ⊙ : Dk × Dk → Dk ist distributiv in jedem Argument:

L ⊙ ∅ = ∅ L ⊙ (L1L2) = (LL1) ∪(LL2)

∅ ⊙ L = ∅ (L1L2) ⊙ L = (L1L) ∪(L2L)

361

(21)

Für α ∈ (NT) sind wir interessiert an der Menge:

Firstk(α) = Firstk({wT | α → w})

Für k ≥ 1 gilt:

Firstk(x) = {x} für xT ∪ {ǫ}

Firstk1α2) = Firstk1) ⊙ Firstk2)

Frage: Wie berechnet man First

k

( A ) ??

Idee: Stelle ein Ungleichungssystem auf!

362

(22)

Für α ∈ (NT) sind wir interessiert an der Menge:

Firstk(α) = Firstk({wT | α → w})

Für k ≥ 1 gilt:

Firstk(x) = {x} für xT ∪ {ǫ}

Firstk1α2) = Firstk1) ⊙ Firstk2)

Frage: Wie berechnet man First

k

( A ) ??

Idee: Stelle ein Ungleichungssystem auf!

363

(23)

Für α ∈ (NT) sind wir interessiert an der Menge:

Firstk(α) = Firstk({wT | α → w})

Für k ≥ 1 gilt:

Firstk(x) = {x} für xT ∪ {ǫ}

Firstk1α2) = Firstk1) ⊙ Firstk2)

Frage: Wie berechnet man First

k

( A ) ??

Idee: Stelle ein Ungleichungssystem auf!

364

(24)

Beispiel:

k = 2

EE+T 0 | T 1 TTF 0 | F 1

F → ( E ) 0 | name1 | int2 Jede Regel gibt Anlass zu einer Inklusionsbeziehung:

First2(E) ⊇ First2(E+T) First2(E) ⊇ First2(T) First2(T) ⊇ First2(TF) First2(T) ⊇ First2(F) First2(F) ⊇ First2(( E )) First2(F) ⊇ {name,int}

Eine Inklusion First2(E) ⊇ First2(E + T) kann weiter vereinfacht werden zu:

First2(E) ⊇ First2(E) ⊙ {+} ⊙First2(T)

365

(25)

Beispiel:

k = 2

EE+T 0 | T 1 TTF 0 | F 1

F → ( E ) 0 | name1 | int2 Jede Regel gibt Anlass zu einer Inklusionsbeziehung:

First2(E) ⊇ First2(E+T) First2(E) ⊇ First2(T) First2(T) ⊇ First2(TF) First2(T) ⊇ First2(F) First2(F) ⊇ First2(( E )) First2(F) ⊇ {name,int}

Eine Inklusion First2(E) ⊇ First2(E+T) kann weiter vereinfacht werden zu:

First2(E) ⊇ First2(E) ⊙ {+} ⊙First2(T)

366

(26)

Insgesamt erhalten wir das Ungleichungssystem:

First2(E) ⊇ First2(E) ⊙ {+} ⊙First2(T) First2(E) ⊇ First2(T) First2(T) ⊇ First2(T) ⊙ {∗} ⊙First2(F) First2(T) ⊇ First2(F) First2(F) ⊇ {(} ⊙First2(E) ⊙ {)} First2(F) ⊇ {name,int}

Allgemein:

Firstk(A) ⊇ Firstk(X1) ⊙ . . .Firstk(Xm)

für jede Regel AX1 . . .XmP mit XiTN.

367

(27)

Insgesamt erhalten wir das Ungleichungssystem:

First2(E) ⊇ First2(E) ⊙ {+} ⊙First2(T) First2(E) ⊇ First2(T) First2(T) ⊇ First2(T) ⊙ {∗} ⊙First2(F) First2(T) ⊇ First2(F) First2(F) ⊇ {(} ⊙First2(E) ⊙ {)} First2(F) ⊇ {name,int}

Allgemein:

Firstk(A) ⊇ Firstk(X1) ⊙ . . .Firstk(Xm)

für jede Regel AX1 . . . XmP mit XiTN.

368

(28)

Gesucht:

• möglichst kleine Lösung (??)

• Algorithmus, der diese berechnet :-)

... im Beispiel:

First2(E) ⊇ First2(E) ⊙ {+} ⊙First2(T) First2(E) ⊇ First2(T) First2(T) ⊇ First2(T) ⊙ {∗} ⊙First2(F) First2(T) ⊇ First2(F) First2(F) ⊇ {(} ⊙First2(E) ⊙ {)} First2(F) ⊇ {name,int} ... hat die Lösung:

E name,int,(name, (int, ((,name∗,int,name+,int+ T name,int,(name, (int, ((,name∗,int∗

F name,int,(name, (int, ((

369

(29)

Beobachtung:

• Die Menge Dk der möglichen Werte für Firstk(A) bilden einen vollständigen Verband :-)

• Die Operatoren auf den rechten Seiten der Ungleichungen sind monoton, d.h. verträglich mit "⊆” :-)

370

(30)

Exkurs: Vollständige Verbände

Eine Menge D mit einer Relation ⊑ ⊆ D ×D ist eine Halbordnung falls für allea a, b, c ∈ D gilt:

aa Reflexivit¨at

abba =⇒ a = b AntiSymmetrie abbc =⇒ ac Transitivit¨at

Beispiele:

1. D = 2{a,b,c} mit der Relation “⊆” :

a,b,c

a,b a,c b,c

a b c

371

(31)

3. Z mit der Relation “=” :

2 1

0 -1

-2

3. Z mit der Relation “≤” :

-1 0

1 2

4. Z = Z∪ {⊥} mit der Ordnung:

2 1

0 -1

-2

372

(32)

d ∈ D heißt obere Schranke für X ⊆ D falls

xd für alle xX

d heißt kleinste obere Schranke (lub) falls 1.

2.

Achtung:

• {0, 2, 4, . . .} ⊆ Z besitzt keine obere Schranke!

• {0, 2, 4} ⊆ Z besitzt die oberen Schranken 4, 5, 6, . . .

373

(33)

d ∈ D heißt obere Schranke für X ⊆ D falls

xd für alle xX

d heißt kleinste obere Schranke (lub) falls 1. d eine obere Schranke ist und

2. dy für jede obere Schranke y für X.

Achtung:

• {0, 2, 4, . . .} ⊆ Z besitzt keine obere Schranke!

• {0, 2, 4} ⊆ Za besitzt die oberen Schranken 4, 5, 6, . . .

374

(34)

d ∈ D heißt obere Schranke für X ⊆ D falls

xd für alle xX

d heißt kleinste obere Schranke (lub) falls 1. d eine obere Schranke ist und

2. dy für jede obere Schranke y für X.

Achtung:

• {0, 2,4, . . .} ⊆ Z besitzt keine obere Schranke!

• {0, 2,4} ⊆ Z besitzt die oberen Schranken 4, 5,6, . . .

375

(35)

Ein vollständiger Verband (cl) D ist eine Halbordnung, in der jede Teilmenge X ⊆ D eine kleinste obere Schranke FX ∈ D besitzt.

Beachte:

Jeder vollständige Verband besitzt

→ ein kleinstes Element ⊥ = F∅ ∈ D;

→ ein größtes Element ⊤ = FD ∈ D.

376

(36)

Beispiele:

1. D = 2{a,b,c} ist ein cl :-) 2. D = Z mit “=” ist keiner.

3. D = Z mit “≤” ebenfalls nicht.

4. D = Z auch nicht :-(

5. Mit einem zusätzlichen Symbol ⊤ erhalten wir den flachen Verband Z = Z ∪ {⊥,⊤} :

2 1

0 -1

-2

377

Referenzen

ÄHNLICHE DOKUMENTE

Für die Durchführung der Prüfmethode muss der Lichtkegel des künstlichen Sternes so ausgerichtet werden, dass der Spiegel voll ausgeleuchtet ist und der Bildpunkt sich dicht neben

2. Die beiden

Das ist nicht selbstverständlich: Für mache Funktionen kann so ein Grenzwert nicht eindeutig gefunden werden, dieser kann nämlich von der Art der Folgen abhängen: So gilt

• Die praktische Effizienz von RR-Iteration hängt allerdings auch von der Anordnung der Variablen ab :-). • Anstelle von RR-Iteration gibt es auch schnellere Fixpunkt-Verfahren,

• Die Menge D k der möglichen Werte für First k ( A ) bilden einen vollständigen Verband :-). • Die Operatoren auf den rechten Seiten der Ungleichungen sind

• In general, precise values of variables will be unknown — perhaps, however, a tight

- blau, in denen die Funktion streng monoton wachsend/steigend verläuft -rot, in denen die Funktion streng monoton fallend

Oponentlka prace If