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