opora

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

KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A ZÁSOBNÍKOVÉ AUTOMATY89 (3) Jestliže δ(q, a, Z) obsahuje (r, ɛ), pak k P přidej pravidlo [qZr] → a. (4) Pro každý stav q ∈ Q přidej k P pravidlo S → [q 0 Z 0 q]. Indukcí lze opět dokázat, že pro všechna q, r ∈ Q a Z ∈ Γ platí [qZr] ⇒ m w, právě když (q, w, Z) ⊢ n (r, ɛ, ɛ). Speciální případ této ekvivalence je S ⇒ [q 0 Z 0 q] ⇒ + w, právě když (q 0 , w, Z 0 ) ⊢ + (q, ɛ, ɛ), q ∈ F . To však znamená, že L ɛ (R) = L(G). Příklad 4.24 Nechť P = ({q 0 , q 1 }, {0, 1}, {X, Z 0 }, δ, q 0 , Z 0 , ∅) kde zobrazení δ je dáno takto: δ(q 0 , 0, Z 0 ) = {(q 0 , XZ 0 )} δ(q 0 , 0, X) = {(q 0 , XX)} δ(q 0 , 1, X) = {(q 1 , ɛ)} δ(q 1 , 1, X) = {(q 1 , ɛ)} δ(q 1 , ɛ, X) = {(q 1 , ɛ)} δ(q 1 , ɛ, Z 0 ) = {(q 1 , ɛ)} Zkonstruujme gramatiku G = (N, Σ, P, S) takovou, že L(P ) = L(G). Množiny nonterminálů a terminálů mají tvar: N = {S, [q 0 Xq 0 ], [q 0 Xq 1 ], [q 1 Xq 0 ], [q 1 Xq 1 ], [q 0 Z 0 q 0 ], [q 0 Z 0 q 1 ], [q 1 Z 0 q 0 ], [q 1 Z 0 q 1 ]} Σ = {0, 1} Množina N obsahuje některé nonterminály, které jsou v gramatice G nedostupné. Abychom je nemuseli dodatečně odstraňovat, začneme konstruovat pravidla gramatiky G počínaje S-pravidly a přidávejme pouze ty nonterminály, které se objevují na pravých stranách konstruovaných pravidel. Podle bodu (4) sestrojíme S-pravidla: S → [q 0 Z 0 q 0 ] S → [q 0 Z 0 q 1 ] Nyní přidáme pravidla pro nonterminál [q 0 Z 0 q 0 ] vyplývající z δ(q 0 , 0, Z 0 ) = {(q 0 , XZ 0 )}. Pravidla pro nonterminál [q 0 Z 0 q 1 ] [q 0 Z 0 q 0 ] → 0[q 0 Xq 0 ][q 0 Z 0 q 0 ] [q 0 Z 0 q 0 ] → 0[q 0 Xq 1 ][q 1 Z 0 q 0 ] [q 0 Z 0 q 1 ] → 0[q 0 Xq 0 ][q 0 Z 0 q 1 ] [q 0 Z 0 q 1 ] → 0[q 0 Xq 1 ][q 1 Z 0 q 1 ] jsou požadována zobrazením δ(q 0 , 0, Z 0 ) = {(q 0 , XZ 0 )}. Pravidla pro zbývající nonterminály jsou: [q 0 Xq 0 ] → 0[q 0 Xq 0 ][q 0 Xq 0 ] [q 0 Xq 0 ] → 0[q 0 Xq 1 ][q 1 Xq 0 ] [q 0 Xq 1 ] → 0[q 0 Xq 0 ][q 0 Xq 1 ] [q 0 Xq 1 ] → 0[q 0 Xq 1 ][q 1 Xq 1 ] ✷

KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A ZÁSOBNÍKOVÉ AUTOMATY90 protože, δ(q 0 , 0, X) = {(q 0 , XX)}; [q 0 Xq 1 ] → 1, protože δ(q 0 , 1, X) = {(q 1 , ɛ)} [q 1 Z 0 q 1 ] → ɛ, protože δ(q 1 , ɛ, Z 0 ) = {(q 1 , ɛ)} [q 1 Xq 1 ] → ɛ, protože δ(q 1 , ɛ, X) = {(q 1 , ɛ)} [q 1 Xq 1 ] → 1, protože δ(q 1 , 1, X) = {(q 1 , ɛ)}. Povšimněme si nyní, že pro nonterminály [q 1 Xq 0 ] a [q 1 Z 0 q 0 ] nejsou definována žádná pravidla, a proto ani z nonterminálu [q 0 Z 0 q 0 ] ani z [q 0 Xq 0 ] nemohou být derivovány terminální řetězce. Odstraníme-li tedy pravidla obsahující některý z uvedených čtyř nonterminálů, dostaneme ekvivalentní gramatiku generující jazyk L(P ): S → [q 0 Z 0 q 1 ] [q 0 Z 0 q 1 ] → 0[q 0 Xq 1 ][q 1 Z 0 q 1 ] [q 0 Xq 1 ] → 0[q 0 Xq 1 ][q 1 Xq 1 ] [q 1 Z 0 q 1 ] → ɛ [q 0 Xq 1 ] → 1 [q 1 Xq 1 ] → ɛ [q 1 Xq 1 ] → 1 4.12 Deterministický zásobníkový automat V předchozím odstavci jsme ukázali, že ke každé bezkontextové gramatice lze sestrojit zásobníkový automat, který reprezentuje syntaktický analyzátor pro věty generované danou gramatikou. Tento analyzátor je obecně nedeterministický. Z hlediska aplikací teorie formálních jazyků v překladačích jsou důležité tzv. deterministické bezkontextové jazyky, které lze analyzovat deterministickými syntaktickými analyzátory. V tomto odstavci definujeme třídu zásobníkových automatů, které v každém okamžiku mohou přijít pouze do jediné konfigurace, tzv. deterministické zásobníkové automaty, a jim odpovídající deterministické jazyky. Definice 4.22 Zásobníkový automat P = (Q, Σ, Γ, δ, q 0 , Z 0 , F ) nazýváme deterministickým zásobníkovým automatem, jestliže pro každé q ∈ Q a Z ∈ Γ platí buď pro každé a ∈ Σ obsahuje δ(q, a, Z) nanejvýš jeden prvek a δ(q, ɛ, Z) = ∅, nebo δ(q, a, Z) = ∅ pro všechna a ∈ Σ a δ(q, ɛ, Z) obsahuje nejvýše jeden prvek. Protože zobrazení δ(q, a, Z) obsahuje nejvýše jeden prvek, budeme místo δ(q, a, Z) = {(r, γ)} psát δ(q, a, Z) = (r, γ). Příklad 4.25 Deterministický zásobníkový automat, který přijímá jazyk L = {wcw R | w ∈ {a, b} + }, má tvar: P = ({q 0 , q 1 , q 2 }, {a, b, c}, {Z, a, b}, δ, q 0 , Z, {q 2 }) kde zobrazení δ je definováno takto: δ(q 0 , X, Y ) = (q 0 , XY ) pro všechna X ∈ {a, b} a Y ∈ {Z, a, b} δ(q 0 , c, Y ) = (q 1 , Y ) pro všechna Y ∈ {a, b} δ(q 1 , X, X) = (q 1 , ɛ) pro všechna X ∈ {a, b} δ(q 1 , ɛ, Z) = (q 2 , ɛ)

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

protože, δ(q 0 , 0, X) = {(q 0 , XX)};<br />

[q 0 Xq 1 ] → 1, protože δ(q 0 , 1, X) = {(q 1 , ɛ)}<br />

[q 1 Z 0 q 1 ] → ɛ, protože δ(q 1 , ɛ, Z 0 ) = {(q 1 , ɛ)}<br />

[q 1 Xq 1 ] → ɛ, protože δ(q 1 , ɛ, X) = {(q 1 , ɛ)}<br />

[q 1 Xq 1 ] → 1, protože δ(q 1 , 1, X) = {(q 1 , ɛ)}.<br />

Povšimněme si nyní, že pro nonterminály [q 1 Xq 0 ] a [q 1 Z 0 q 0 ] nejsou definována<br />

žádná pravidla, a proto ani z nonterminálu [q 0 Z 0 q 0 ] ani z [q 0 Xq 0 ] nemohou být derivovány<br />

terminální řetězce. Odstraníme-li tedy pravidla obsahující některý z uvedených<br />

čtyř nonterminálů, dostaneme ekvivalentní gramatiku generující jazyk<br />

L(P ):<br />

S → [q 0 Z 0 q 1 ]<br />

[q 0 Z 0 q 1 ] → 0[q 0 Xq 1 ][q 1 Z 0 q 1 ]<br />

[q 0 Xq 1 ] → 0[q 0 Xq 1 ][q 1 Xq 1 ]<br />

[q 1 Z 0 q 1 ] → ɛ<br />

[q 0 Xq 1 ] → 1<br />

[q 1 Xq 1 ] → ɛ<br />

[q 1 Xq 1 ] → 1<br />

4.12 Deterministický zásobníkový automat<br />

V předchozím odstavci jsme ukázali, že ke každé bezkontextové gramatice lze sestrojit<br />

zásobníkový automat, který reprezentuje syntaktický analyzátor pro věty<br />

generované danou gramatikou. Tento analyzátor je obecně nedeterministický. Z hlediska<br />

aplikací teorie formálních jazyků v překladačích jsou důležité tzv. deterministické<br />

bezkontextové jazyky, které lze analyzovat deterministickými syntaktickými<br />

analyzátory. V tomto odstavci definujeme třídu zásobníkových automatů, které<br />

v každém okamžiku mohou přijít pouze do jediné konfigurace, tzv. deterministické<br />

zásobníkové automaty, a jim odpovídající deterministické jazyky.<br />

Definice 4.22 Zásobníkový automat P = (Q, Σ, Γ, δ, q 0 , Z 0 , F ) nazýváme deterministickým<br />

zásobníkovým automatem, jestliže pro každé q ∈ Q a Z ∈ Γ platí<br />

buď pro každé a ∈ Σ obsahuje δ(q, a, Z) nanejvýš jeden prvek a δ(q, ɛ, Z) = ∅,<br />

nebo δ(q, a, Z) = ∅ pro všechna a ∈ Σ a δ(q, ɛ, Z) obsahuje nejvýše jeden prvek.<br />

Protože zobrazení δ(q, a, Z) obsahuje nejvýše jeden prvek, budeme místo δ(q, a, Z)<br />

= {(r, γ)} psát δ(q, a, Z) = (r, γ).<br />

Příklad 4.25 Deterministický zásobníkový automat, který přijímá jazyk<br />

L = {wcw R | w ∈ {a, b} + }, má tvar:<br />

P = ({q 0 , q 1 , q 2 }, {a, b, c}, {Z, a, b}, δ, q 0 , Z, {q 2 })<br />

kde zobrazení δ je definováno takto:<br />

δ(q 0 , X, Y ) = (q 0 , XY ) pro všechna X ∈ {a, b} a Y ∈ {Z, a, b}<br />

δ(q 0 , c, Y ) = (q 1 , Y ) pro všechna Y ∈ {a, b}<br />

δ(q 1 , X, X) = (q 1 , ɛ) pro všechna X ∈ {a, b}<br />

δ(q 1 , ɛ, Z) = (q 2 , ɛ)

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

Saved successfully!

Ooh no, something went wrong!