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É AUTOMATY65<br />

Věta 4.1 Algoritmus 4.1 má výstup ANO, právě když S ⇒ ∗ w pro nějaké w ∈ Σ ∗<br />

Důkaz: Nejprve dokážeme indukcí pro i implikaci:<br />

Jestliže platí A ∈ N i , pak A ⇒ ∗ w pro nějaké w ∈ Σ ∗ (1)<br />

Pro i = 0 implikace platí, protože N 0 = ∅. Předpokládejme, že (1) platí pro i, a že<br />

A je prvkem množiny N i+1 . Je-li zároveň A ∈ N i , pak je induktivní krok triviální.<br />

Jestliže A leží v N i+1 − N i , pak existuje pravidlo A → X 1 . . . X k , kde X j je buď<br />

terminální symbol, nebo X j ∈ N i , j = 1, . . . , k. Pro každé j tedy existuje řetězec<br />

w j ∈ Σ ∗ takový, že X j ⇒ ∗ w j a platí tak<br />

A ⇒ X 1 . . . X k ⇒ ∗ w 1 X 2 . . . X k ⇒ ∗ . . . ⇒ ∗ w 1 . . . w k = w<br />

Opačnou implikaci:<br />

Jestliže A ⇒ n w, pak A ∈ N i pro nějaké i (2)<br />

dokážeme opět indukcí.<br />

Je-li n = 1, pak zřejmě i = 1. Předpokládejme, že (2) platí pro n, a že<br />

A ⇒ n+1 w . Pak můžeme psát A ⇒ X 1 . . . X k ⇒ n w, kde w = w 1 . . . w k a X j ⇒ nj<br />

w j pro j = 1, . . . , k, n j ≤ n. (Podřetězce w j jsou fráze řetězce w vzhledem<br />

k nonterminálům X j v případě, že X j ∈ N, pak X j ∈ N ij pro nějaké i j . Položme<br />

i j = 0, jestliže X j ∈ Σ. Nechť i = 1+max(i 1 , . . . , i k ). Pak, podle definice, A ∈ N i .<br />

Položíme-li nyní A = S v implikacích (1) a (2), dostáváme důkaz věty 4.1. ✷<br />

Definice 4.8 Říkáme, že symbol X ∈ (N ∪ Σ) je nedostupný v gramatice G =<br />

(N, Σ, P, S), jestliže X se nemůže objevit v žádné větné formě.<br />

Algoritmus 4.2 Odstranění nedostupných symbolů<br />

Vstup: Gramatika G = (N, Σ, P, S).<br />

Výstup: Gramatika G ′ = (N ′ , Σ ′ , P ′ , S), pro kterou platí<br />

(i) L(G ′ ) = L(G)<br />

(ii) Pro všechna X z (N ′ ∪ Σ ′ ) existují řetězce α a β z (N ′ ∪ Σ ′ ) ∗ tak, že<br />

S ⇒ ∗ αXβ v gramatice G ′ .<br />

Metoda:<br />

(1) Položíme V 0 = {S} a i = 1<br />

(2) Konstruujeme V i = {X | A → αXβ ∈ P ∧ A ∈ V i−1 } ∪ V i−1<br />

(3) Je-li V i ≠ V i−1 , polož i = i + 1 a vrať se ke kroku 2.<br />

Je-li V i = V i−1 , pak<br />

N ′ = V i ∩ N<br />

Σ ′ = V i ∩ Σ<br />

P ′ ⊆ P obsahuje ta pravidla, která jsou tvořena pouze symboly z V i .<br />

Algoritmus 4.2 je podobný algoritmu 4.1. Protože je V i ⊂ N∪Σ, je počet opakování<br />

bodu (2) algoritmu 4.2 konečný. Důkaz algoritmu se provede indukcí pro i této<br />

ekvivalence:<br />

S ⇒ ∗ αXβ, právě když X ∈ V i pro nějaké i.<br />

Nyní zformulujeme algoritmus pro odstranění zbytečných symbolů.<br />

Algoritmus 4.3 Odstranění zbytečných symbolů.

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

Saved successfully!

Ooh no, something went wrong!