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É AUTOMATY66<br />
Vstup: Gramatika G = (N, Σ, P, S) generující neprázdný jazyk.<br />
Výstup: Gramatika G ′ = (N ′ , Σ ′ , P ′ , S), pro kterou platí:<br />
(i) L(G) = L(G ′ )<br />
(ii) Žádný symbol v N ′ ∪ Σ’ není zbytečný<br />
Metoda:<br />
(1) Na gramatiku G aplikuj algoritmus 4.1 s cílem získat množinu N t . Polož<br />
G = (N t ∪ {S}, Σ, P 1 , S), kde P 1 obsahuje pravidla tvořená pouze symboly<br />
z N t ∪ Σ.<br />
(2) Algoritmus 4.2 aplikuj na gramatiku G. Výsledkem je gramatika G ′ =<br />
(N ′ , Σ ′ , P ′ , S), která neobsahuje zbytečné symboly.<br />
V kroku (1) algoritmu 4.3 jsou z G odstraněny všechny nonterminály, které<br />
nemohou generovat terminální řetězce. V kroku (2) jsou pak odstraněny všechny<br />
symboly, které jsou nedostupné. Pořadí použití algoritmů 4.1 a 4.2 je podstatné,<br />
obrácené pořadí nemusí vždy vést ke gramatice bez zbytečných symbolů.<br />
Věta 4.2 Gramatika G ′<br />
zbytečné symboly.<br />
z algoritmu 4.3 je ekvivalentní gramatice G a nemá<br />
Důkaz: Dokážeme sporem, že gramatika G ′ nemá zbytečné symboly. Předpokládejme,<br />
že A ∈ N ′ je zbytečný symbol. Podle definice zbytečných symbolů musíme<br />
uvažovat dva případy:<br />
1. Neplatí S ⇒<br />
G ′ ∗ αAβ pro všechna α a β. V tomto případě se však dostáváme<br />
do sporu s krokem (2) algoritmu 4.3.<br />
2. Platí S ⇒ ∗ αAβ pro nějaká α a β, avšak neplatí A ⇒ ∗ w, w ∈ Σ ′∗ . Pak<br />
G ′<br />
G ′<br />
A nebude odstraněn v kroku (2) algoritmu 4.3 a navíc, platí-li A ⇒ ∗ γBδ,<br />
G<br />
pak ani B nebude odstraněn v kroku (2). Platí-li však A ⇒<br />
G ∗ w, pak také<br />
platí A ⇒ ∗ w a tedy neplatí-li A ⇒ ∗ w, pak neplatí ani A ⇒ ∗ w, což je spor<br />
G ′<br />
G ′<br />
G<br />
s krokem (1) algoritmu 4.3.<br />
Důkaz, že G ′ neobsahuje ani zbytečný terminál se provede obdobně.<br />
Příklad 4.12 Uvažujme gramatiku G = ({S, A, B}, {a, b}, P, S), kde P obsahuje<br />
pravidla:<br />
S → a | A<br />
A → AB<br />
B → b<br />
Aplikujeme-li na G algoritmus 4.3, pak v kroku 1 získáme N t = {S, B}, takže<br />
G = ({S, B}, {a, b}, {S → a, B → b}, S}). Po aplikování algoritmu 4.2 na G<br />
obdržíme V 2 = V 1 = {S, a}. Výsledkem je tedy ekvivalentní gramatika<br />
G ′ = ({S}, {a}, {S → a}, S).<br />
Kdybychom jako první aplikovali algoritmus 4.2, zjistíme, že všechny symboly<br />
v G jsou dostupné a algoritmus 4.2 tedy gramatiku G nezmění. Po aplikování<br />
algoritmu 4.1 získáme N t = {S, B}, takže výsledná gramatika bude G a ne G ′ .<br />
✷