opora

frantisek.plesicek
from frantisek.plesicek More from this publisher
10.02.2019 Views

KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A ZÁSOBNÍKOVÉ AUTOMATY83 (i) Jestliže l ≥ k, pak pro všechna Z ∈ Γ 1 a α ∈ Γ ∗ 1 taková, že |α| = m − k δ 1 ([q, X 1 . . . X k α], a, Z) obsahuje ([r, β], γZ) kde βγ = Y 1 . . . Y l α a |β| = m. (ii) Je-li l < k, pak pro všechna Z ∈ Γ 1 a α ∈ Γ ∗ 1 taková, že |α| = m − k δ 1 ([q, X 1 . . . X k α], a, Z) obsahuje ([r, Y 1 . . . Y l αZ], ɛ) b) Pro všechna q ∈ Q, Z ∈ Γ 1 a α ∈ Γ ∗ 1 taková, že |α| < m δ 1 ([q, α], ɛ, Z) = {([q, α, Z], ɛ)} Tato pravidla vedou k naplnění vyrovnávací paměti (obsahuje m symbolů). (4) q 1 = [q 0 , Z 0 , Z m−1 1 ]. Vyrovnávací paměť obsahuje na počátku symbol Z 0 na vrcholu a m − 1 symbolů Z 1 na dalších místech. Symboly Z 1 jsou speciální znaky pro označení dna zásobníku. (5) F 1 = {[q, α] | q ∈ F, α ∈ Γ ∗ 1} Lze ukázat, že (q, aw, X 1 . . . X k X k+1 . . . X n ) ⊢(r, w, Y 1 . . . Y l X k+1 . . . X n ) P platí, právě když ([q, α], aw, β) ⊢ + P 1 ([r, α ′ ], w, β ′ ) kde αβ = X 1 . . . X n Z m 1 α ′ β ′ = Y 1 . . . Y l X k+1 . . . X n Z1 m |α| = |α ′ | = m a mezi těmito dvěma konfiguracemi automatu P 1 není žádná konfigurace, ve které by druhý člen stavu (vyrovnávací paměť) měl délku m. Tedy relace platí, právě když (g 0 , w, Z 0 ) ⊢(q, ɛ, α) P pro q ∈ F, α ∈ Γ ∗ ([q 0 , Z 0 , Z m−1 1 ], w, Z 1 ) ∗ ⊢ P 1 ([q, β], ɛ, γ) kde |β| = m a βγ = αZ m 1 . Tedy L(P ) = L(P 1 ). Definice 4.21 Nechť P = (Q, Σ, Γ, δ, q 0 , Z 0 , F ) je zásobníkový nebo rozšířený zásobníkový automat. Řetězec w je přijímán s vyprázdněním zásobníku, jestliže platí (q 0 , w, Z 0 ) ⊢ + (q, ɛ, ɛ), q ∈ Q. Označme L ɛ (P ) množinu všech řetězců, které jsou přijímány zásobníkovým automatem P s vyprázdněním zásobníku. Věta 4.12 Nechť L je jazyk přijímaný zásobníkovým automatem P = (Q, Σ, Γ, δ, q 0 , Z 0 , F ), L = L(P ). Lze zkonstruovat zásobníkový automat P ′ takový, že L ɛ (P ′ ) = L. Důkaz: Opět budeme konstruovat automat P ′ tak, aby simuloval automat P . Kdykoli automat P dospěje do koncového stavu, přejde do speciálního stavu q ɛ , který způsobí vyprázdnění zásobníku. Musíme však uvážit situaci, kdy automat P je v konfiguraci s prázdným zásobníkem, nikoliv však v koncovém stavu. Abychom zabránili případům, že automat P ′ přijímá řetězec, který nemá být přijat, přidáme ✷

KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A ZÁSOBNÍKOVÉ AUTOMATY84 k zásobníkové abecedě automatu P ′ znak, jenž bude označovat dno zásobníku a může být vybrán pouze tehdy, je-li automat P ′ ve stavu q ɛ . Formálně vyjádřeno, nechť P = (Q ∪ {q ɛ , q ′ }, Σ, Γ ∪ {Z ′ }, δ ′ , q ′ , Z ′ , ∅), kde symbolem ∅ vyznačujeme, že P přijímá řetězec s vyprázdněním zásobníku. Zobrazení δ nyní definujeme takto: (1) Jestliže δ(q, a, Z) obsahuje (r, γ), pak δ ′ (q, a, Z) obsahuje (r, γ) pro všechna q ∈ Q, a ∈ Σ ∪ {ɛ} a Z ∈ Γ. (2) δ(q ′ , ɛ, Z ′ ) = {(q 0 , Z 0 Z ′ )}. První přechod zásobníkového automatu P ′ uloží do zásobníku řetězec Z 0 Z ′ , kde Z ′ je speciální znak označující dno zásobníku, a přejde do počátečního stavu automatu P . (3) Pro všechna q ∈ F a Z ∈ Γ ∪ {Z ′ } obsahuje δ ′ (q, ɛ, Z) prvek (q ɛ , ɛ). (4) Pro všechna Z ∈ Γ ∪ {Z ′ } je δ(q ɛ , ɛ, Z) = {(q ɛ , ɛ)}. Nyní zřejmě platí právě když (q ′ , w, Z ′ ) ⊢ P ′ (q 0 , w, Z 0 Z ′ ) ⊢ n P ′ (q, ɛ, Y 1 . . . Y r ) ⊢ P ′ (q ɛ , ɛ, Y 2 . . . Y r ) ⊢ r−1 P ′ (q ɛ, ɛ, ɛ) kde Y r = Z ′ , (q 0 , w, Z 0 ) ⊢ n (q, ɛ, Y 1 . . . Y r−1 ) P pro q ∈ F a Y 1 . . . Y r−1 ∈ Γ ∗ . Tudíž L ɛ (P ′ ) = L(P ). Předchozí věta platí také obráceně ✷ Věta 4.13 Nechť P = (q, Σ, Γ, δ, q 0 , Z 0 , ∅) je zásobníkový automat přijímající vyprázdněním zásobníku. Lze zkonstruovat zásobníkový automat P ′ takový, že L(P ′ ) = L ɛ (P ). Důkaz: Zásobníkový automat P ′ konstruujeme tak, že má speciální symbol Z ′ na dně zásobníku. Jakmile je tento symbol ze zásobníku odstraněn, přechází automat P ′ do nového koncového stavu q f : F ′ = {q f }. Formální konstrukci automatu P ′ nebudeme provádět. ✷ 4.11 Ekvivalence bezkontextových jazyků a jazyků přijímaných zásobníkovými automaty Nejdříve ukážeme, jak lze zkonstruovat nedeterministický syntaktický analyzátor jazyka generovaného bezkontextovou gramatikou, který pracuje metodou shora– dolů. L 2 = L P L 2 ⊆ L P Věta 4.14 Nechť G = (N, Σ, P, S) je bezkontextová gramatika. Z gramatiky G můžeme zkonstruovat zásobníkový automat R takový, že L ɛ (R) = L(G). Důkaz: Zásobníkový automat R konstruujeme tak, aby vytvářel levou derivaci vstupního řetězce v gramatice G. Nechť R = ({q}, Σ, N ∪ Σ, δ, S, ∅), kde δ je definováno takto: (1) Je-li A → α pravidlo z P , pak δ(q, ɛ, A) obsahuje (q, α).

KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A ZÁSOBNÍKOVÉ AUTOMATY84<br />

k zásobníkové abecedě automatu P ′ znak, jenž bude označovat dno zásobníku a<br />

může být vybrán pouze tehdy, je-li automat P ′ ve stavu q ɛ . Formálně vyjádřeno,<br />

nechť<br />

P = (Q ∪ {q ɛ , q ′ }, Σ, Γ ∪ {Z ′ }, δ ′ , q ′ , Z ′ , ∅), kde<br />

symbolem ∅ vyznačujeme, že P přijímá řetězec s vyprázdněním zásobníku. Zobrazení<br />

δ nyní definujeme takto:<br />

(1) Jestliže δ(q, a, Z) obsahuje (r, γ), pak δ ′ (q, a, Z) obsahuje (r, γ) pro všechna<br />

q ∈ Q, a ∈ Σ ∪ {ɛ} a Z ∈ Γ.<br />

(2) δ(q ′ , ɛ, Z ′ ) = {(q 0 , Z 0 Z ′ )}. První přechod zásobníkového automatu P ′ uloží<br />

do zásobníku řetězec Z 0 Z ′ , kde Z ′ je speciální znak označující dno zásobníku,<br />

a přejde do počátečního stavu automatu P .<br />

(3) Pro všechna q ∈ F a Z ∈ Γ ∪ {Z ′ } obsahuje δ ′ (q, ɛ, Z) prvek (q ɛ , ɛ).<br />

(4) Pro všechna Z ∈ Γ ∪ {Z ′ } je δ(q ɛ , ɛ, Z) = {(q ɛ , ɛ)}.<br />

Nyní zřejmě platí<br />

právě když<br />

(q ′ , w, Z ′ ) ⊢ P<br />

′ (q 0 , w, Z 0 Z ′ )<br />

⊢ n P ′ (q, ɛ, Y 1 . . . Y r )<br />

⊢ P<br />

′ (q ɛ , ɛ, Y 2 . . . Y r )<br />

⊢ r−1<br />

P ′ (q ɛ, ɛ, ɛ) kde Y r = Z ′ ,<br />

(q 0 , w, Z 0 ) ⊢<br />

n (q, ɛ, Y 1 . . . Y r−1 )<br />

P<br />

pro q ∈ F a Y 1 . . . Y r−1 ∈ Γ ∗ . Tudíž L ɛ (P ′ ) = L(P ).<br />

Předchozí věta platí také obráceně<br />

✷<br />

Věta 4.13 Nechť P = (q, Σ, Γ, δ, q 0 , Z 0 , ∅) je zásobníkový automat přijímající<br />

vyprázdněním zásobníku. Lze zkonstruovat zásobníkový automat P ′ takový, že<br />

L(P ′ ) = L ɛ (P ).<br />

Důkaz: Zásobníkový automat P ′ konstruujeme tak, že má speciální symbol Z ′ na<br />

dně zásobníku. Jakmile je tento symbol ze zásobníku odstraněn, přechází automat<br />

P ′ do nového koncového stavu q f : F ′ = {q f }. Formální konstrukci automatu P ′<br />

nebudeme provádět.<br />

✷<br />

4.11 Ekvivalence bezkontextových jazyků a jazyků<br />

přijímaných zásobníkovými automaty<br />

Nejdříve ukážeme, jak lze zkonstruovat nedeterministický syntaktický analyzátor<br />

jazyka generovaného bezkontextovou gramatikou, který pracuje metodou shora–<br />

dolů.<br />

L 2 = L P<br />

L 2 ⊆ L P<br />

Věta 4.14 Nechť G = (N, Σ, P, S) je bezkontextová gramatika. Z gramatiky G<br />

můžeme zkonstruovat zásobníkový automat R takový, že L ɛ (R) = L(G).<br />

Důkaz: Zásobníkový automat R konstruujeme tak, aby vytvářel levou derivaci<br />

vstupního řetězce v gramatice G. Nechť R = ({q}, Σ, N ∪ Σ, δ, S, ∅), kde δ je<br />

definováno takto:<br />

(1) Je-li A → α pravidlo z P , pak δ(q, ɛ, A) obsahuje (q, α).

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!