• Keine Ergebnisse gefunden

Konstruktion 2:

N/A
N/A
Protected

Academic year: 2022

Aktie "Konstruktion 2:"

Copied!
39
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

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

(2)

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

(3)

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

(4)

... im Beispiel:

S 0

A 0

a

B 0

b

(5)

... im Beispiel:

S 0

A 0

a

B 0

b

(6)

... im Beispiel:

S 0

A 0

a

B 0

b

(7)

... im Beispiel:

S 0

A 0

a

B 0

b

(8)

... im Beispiel:

S 0

A 0

a

B 0

b

(9)

... im Beispiel:

S 0

A 0

a

B 0

b

(10)

... im Beispiel:

S 0

A 0

a

B 0

b

(11)

... im Beispiel:

S 0

A 0

a

B 0

b

(12)

... im Beispiel:

S 0

A 0

a

B 0

b

(13)

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

(14)

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

(15)

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

(16)

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

(17)

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

(18)

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)

(19)

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

(20)

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!

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

(22)

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)

(23)

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:

(24)

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.

(25)

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.

(26)

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

(27)

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 "⊆” :-)

(28)

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

(29)

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

(30)

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

(31)

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

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

(33)

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.

(34)

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

(35)

Es gilt:

Satz:

In jedem vollständigen Verband D besitzt jede Teilmenge X ⊆ D eine größte untere Schranke F X.

Beweis:

Konstruiere U = {u ∈ D | ∀xX : ux}.

// die Menge der unteren Schranken von X :-) Setze: g := FU

(36)

Es gilt:

Satz:

In jedem vollständigen Verband D besitzt jede Teilmenge X ⊆ D eine größte untere Schranke F X.

Beweis:

Konstruiere U = {u ∈ D | ∀xX : ux}.

// die Menge der unteren Schranken von X :-) Setze: g := FU

Behauptung: g = F X

(37)

Es gilt:

Satz:

In jedem vollständigen Verband D besitzt jede Teilmenge X ⊆ D eine größte untere Schranke F X.

Beweis:

Konstruiere U = {u ∈ D | ∀xX : ux}.

// die Menge der unteren Schranken von X :-) Setze: g := FU

(38)

(1) g ist eine untere Schranke von X :

Für xX gilt:

ux für alle uU

==⇒ x ist obere Schranke von U

==⇒ gx :-)

(2) g ist größte untere Schranke von X :

Für jede untere Schranke u von X gilt:

uU

==⇒ ug :-))

(39)

(1) g ist eine untere Schranke von X :

Für xX gilt:

ux für alle uU

==⇒ x ist obere Schranke von U

==⇒ gx :-)

(2) g ist größte untere Schranke von X :

Für jede untere Schranke u von X gilt:

uU

==⇒ ug :-))

Referenzen

ÄHNLICHE DOKUMENTE

Lineare Algebra II Pr¨ asenzaufgaben, Teil 1?.

2. Die beiden

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

Oponentlka prace If

Konfusion Die Konfusion einer Blockchiffre ist groß, wenn die statistische Verteilung der Chiffretexte in so. komplizierter Weise von der Verteilung

Unerläßliche Sicherheitseigenschaft Der private Schlüssel d kann nicht mit vertretbarem Aufwand aus dem öffentlichen Schlüssel e berechnet werden. Umsetzung in der Praxis

• 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