10.02.2019 Views

opora

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 />

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

Saved successfully!

Ooh no, something went wrong!