10.02.2019 Views

opora

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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

2. L(G) ⊆ L(G ′ )<br />

Nechť w ∈ L(G) a S = α 0 ⇒ α 1 ⇒ . . . ⇒ α n = w je levá derivace řetězce<br />

w v gramatice G. Nechť i 1 , i 2 , . . . i k je posloupnost indexů tvořená pouze<br />

těmi j, pro které v levé derivaci α j−1 ⇒ α j nebylo použito jednoduchého<br />

pravidla. Speciálně i k = n, protože poslední aplikované pravidlo v derivaci<br />

řetězce w nemůže být jednoduché. Derivace řetězce w v G je levou derivací,<br />

a proto aplikací jednoduchých pravidel nahrazujeme pouze nejlevější nonterminál<br />

jiným nonterminálem (reprezentuje levou stranu pravidla v G ′ ). Platí<br />

tedy S ⇒ α i G ′ 1<br />

⇒ . . . ⇒ α<br />

G ′ G ′ i 1<br />

= w a tudíž w ∈ L(G ′ ).<br />

Dokázali jsme tak ekvivalenci gramatik G a G ′ .<br />

✷<br />

Definice 4.11 Říkáme, že G je gramatika bez cyklu, jestliže v ní neexistuje derivace<br />

tvaru A ⇒ + A pro žádné A z N. Jestliže G je gramatika bez cyklu a bez ɛ-pravidel<br />

a nemá žádné zbytečné symboly, pak říkáme, že G je vlastní gramatika.<br />

Věta 4.5 Je-li L bezkontextový jazyk, pak existuje vlastní gramatika G taková,<br />

že L = L(G).<br />

Důkaz: Vyplývá z algoritmů 4.1–4.5. Gramatika, jež neobsahuje ɛ-pravidla a<br />

jednoduchá pravidla, je zřejmě gramatikou bez cyklu.<br />

✷<br />

Poznámka 4.4 Gramatika, která obsahuje cykly, je víceznačná a nemůže být<br />

např. použita pro konstrukci deterministického syntaktického analyzátoru. Existence<br />

ɛ-pravidel a jednoduchých pravidel, na druhé straně, neimplikuje existenci<br />

cyklu (tj. derivace tvaru A ⇒ + A pro nějaké A ∈ N).<br />

Další transformací, kterou uvedeme, je odstranění levé rekurze. Tato transformace<br />

je důležitá pro použití analýzy typu shora-dolů.<br />

Definice 4.12 Nechť G = (N, Σ, P, S). Přepisovací pravidlo z P se nazývá rekurzivní<br />

zleva (rekurzivní zprava), jestliže je tvaru A → Aα(A → αA), A ∈ N, α ∈ (N∪Σ) ∗ .<br />

Jestliže v G existuje derivace A ⇒ + αAβ, pro nějaké A ∈ N, říkáme, že gramatika<br />

G je rekurzivní. Je-li α = ɛ, pak mluvíme o gramatice rekurzivní zleva, je-li β = ɛ,<br />

pak říkáme, že G je rekurzivní zprava.<br />

Poznamenejme, že je-li jazyk L(G) nekonečný, pak G musí být rekurzivní.<br />

Dříve, než zformujeme algoritmus eliminující levou rekurzi, ukážeme, jakým<br />

způsobem lze odstranit přepisovací pravidla rekurzivní zleva.<br />

Definice 4.13 Pravidlo A → α , s levou stranou tvořenou nonterminálem A,<br />

budeme nazývat A-pravidlo (Neplést s ɛ-pravidlem.)<br />

Věta 4.6 Nechť G = (N, Σ, P, S) je gramatika a nechť A → Aα 1 | Aα 2 | . . . |<br />

Aα m | β 1 | β 2 | . . . | β n jsou všechna A-pravidla. Žádný z řetězců β i nezačíná<br />

nonterminálem A. Gramatika G ′ = (N ∪{A ′ }, Σ, P ′ , S), kde P ′ obsahující namísto<br />

uvedených pravidel pravidla<br />

A → β 1 | β 2 | . . . | β n | β 1 A ′ | β 2 A ′ | . . . | β n A ′<br />

A ′ → α 1 | α 2 | . . . | α m | α 1 A ′ | α 2 A ′ | . . . | α m A ′<br />

je ekvivalentní s gramatikou G, tj. L(G) = L(G ′ ).

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

Saved successfully!

Ooh no, something went wrong!