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É AUTOMATY68<br />
Definice 4.10 Přepisovací pravidlo tvaru A → B, A, B ∈ N se nazývá jednoduché<br />
pravidlo.<br />
Algoritmus 4.5 Odstranění jednoduchých pravidel.<br />
Vstup: Gramatika G bez ɛ-pravidel.<br />
Výstup: Ekvivalentní gramatika G ′ bez jednoduchých pravidel.<br />
Metoda:<br />
(1) Pro každé A ∈ N sestroj množinu N A = {B | A ⇒ ∗ B} takto:<br />
a) N 0 = {A}, i = 1<br />
b) N i = {C | B → C je v P a B ∈ N i−1 } ∪ N i−1<br />
c) Jestliže N i ≠ N i−1 , polož i = i + 1 a opakuj krok b). V opačném<br />
případě je N A = N i .<br />
(2) Sestroj P ′ takto: Jestliže B → α je v P a není jednoduchým pravidlem,<br />
pak pro všechna A, pro něž B ∈ N A , přidej k P ′ pravidla A → α<br />
(3) Výsledná gramatika je G = (N, Σ, P ′ , S)<br />
Příklad 4.14 Uvažujme gramatiku s přepisovacími pravidly:<br />
E → E + T | T<br />
T → T ∗ F | F<br />
F → (E) | i<br />
Tato gramatika se liší od gramatiky z příkladu 4.3 pouze jiným značením nonterminálu<br />
a generuje tudíž stejný jazyk aritmetických výrazů<br />
Po aplikování algoritmu 4.5 bude<br />
N E = {E, T, F }<br />
N T = {T, F }<br />
N F = {F }<br />
a výsledná množina přepisovacích pravidel, neobsahující jednoduchá pravidla,<br />
bude:<br />
E → E + T | T ∗ F | (E) | i<br />
T → T ∗ F | (E) | i<br />
F → (E) | i<br />
Věta 4.4 Algoritmus 4.4 převádí vstupní gramatiku G na ekvivalentní gramatiku<br />
G ′ bez jednoduchých pravidel. Důkaz: Gramatika G ′ zřejmě neobsahuje jednoduchá<br />
pravidla. Abychom ukázali, že L(G) = L(G ′ ), dokážeme že platí L(G ′ ) ⊆ L(G) a<br />
také L(G) ⊆ L(G ′ ).<br />
1. L(G ′ ) ⊆ L(G)<br />
Nechť w ∈ L(G ′ ). Pak existuje v G ′ derivace S = α 0 ⇒ α 1 ⇒ . . . ⇒ α n = w.<br />
Jestliže k derivaci α i ⇒ α<br />
G ′ i+1 bylo použito pravidla A → β, pak existuje<br />
nonterminál B (A = B případně) takový, že A ⇒ ∗ B a B ⇒ β a tedy<br />
G G<br />
A ⇒<br />
G ∗ β a α i ⇒<br />
G ∗ α i+1 . Z toho plyne, že platí S ⇒<br />
G ∗ w a w je tudíž v L(G).