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