10.02.2019 Views

opora

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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

4.7 Greibachové normální forma<br />

Definice 4.15 Gramatika G = (N, Σ, P, S) je v Greibachové normální formě<br />

(GNF), je-li G gramatikou bez ɛ-pravidel a jestliže každé pravidlo (s výjimkou<br />

případného pravidla S → ɛ) má tvar A → aα kde a ∈ Σ a α ∈ N ∗ .<br />

Lemma 4.1 Nechť G = (N, Σ, P, S) je gramatika bez levé rekurze. Pak existuje<br />

lineární uspořádání < definované na množině nonterminálních symbolů N takové,<br />

že je-li A → Bα v P , pak A < B.<br />

Důkaz: Nechť R je relace na množině N taková, že ARB platí právě když<br />

A ⇒ + Bα pro nějaké α ∈ (N ∪ Σ) ∗ . Z definice levé rekurze plyne, že R je<br />

částečné uspořádání (R je tranzitivní). Každé částečné uspořádání pak lze rozšířit<br />

na lineární uspořádání.<br />

✷<br />

Nyní zformulujeme algoritmus převodu gramatiky G do Greibachové normální<br />

formy.<br />

Algoritmus 4.8 Převod do Greibachové normální formy.<br />

Vstup: Vlastní gramatika bez levé rekurze G = (N, Σ, P, S)<br />

Výstup: Ekvivalentní gramatika G ′ v GNF<br />

Metoda:<br />

(1) Podle lemmy 4.1 vytvoř lineární uspořádání < na N takové, že každé<br />

A-pravidlo začíná buď terminálem, nebo nějakým nonterminálem B takovým,<br />

že A < B. Nechť<br />

N = {A 1 , A 2 , . . . , A n } a A 1 < A 2 < · · · < A n .<br />

(2) Polož i = n − 1.<br />

(3) Je-li i = 0 přejdi k bodu (5), je-li i ≠ 0 nahraď každé pravidlo tvaru<br />

A i → A j α, kde j > i pravidly A i → β 1 α | . . . | β m α, kde A j → β 1 |<br />

. . . | β m jsou všechna A j -pravidla. (Každý z řetězců β 1 . . . β m začíná<br />

terminálem.)<br />

(4) Polož i = i − 1 a opakuj krok (3).<br />

(5) V tomto okamžiku všechna pravidla (s výjimkou pravidla S → ɛ) začínají<br />

terminálním symbolem. V každém pravidle A → aX 1 . . . X k nahraď ty<br />

symboly X j , které jsou terminálnímy symboly, novým nonterminálem<br />

X ′ j .<br />

(6) Pro všechna X ′ j z bodu (5) přidej pravidla X′ j → X j.<br />

Věta 4.10 Nechť L je bezkontextový jazyk. Pak existuje gramatika G v GNF<br />

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

Důkaz: Z definice uspořádání < vyplývá, že všechna A n -pravidla začínají terminály,<br />

a že po opakovaném provádění kroku (3) algoritmu 4.8 budou všechna<br />

A i -pravidla pro i = 1, . . . , n − 1 začínat také terminálními symboly. Krok (5) a<br />

(6) převádí nepočáteční terminální symboly pravých stran na nonterminály, aniž<br />

se mění generovaný jazyk.<br />

✷<br />

Příklad 4.19 Převeďme gramatiku G s pravidly

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

Saved successfully!

Ooh no, something went wrong!