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

Další důležitou transformací, kterou nyní popíšeme, je transformace odstraňující<br />

z gramatiky pravidla tvaru A → ɛ (ɛ je prázdný řetězec), tzv. ɛ-pravidla.<br />

Jestliže ovšem L(G) má obsahovat také prázdný řetězec, pak není možné aby<br />

G neobsahovala žádné ɛ-pravidlo. Následující definice gramatiky bez ɛ-pravidla<br />

respektuje tuto skutečnost.<br />

Definice 4.9<br />

Říkáme, že gramatika G = (N, Σ, P, S) je gramatikou bez ɛ-pravidel, jestliže<br />

buď P neobsahuje žádné ɛ-pravidlo, nebo, v případě ɛ ∈ L(G), existuje jediné<br />

ɛ-pravidlo tvaru S → ɛ a výchozí symbol S se nevyskytuje na pravé straně žádného<br />

pravidla z P .<br />

Algoritmus 4.4 Transformace na gramatiku bez ɛ-pravidel.<br />

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

Výstup: Ekvivalentní gramatika G ′ = (N ′ , Σ ′ , P ′ , S ′ ) bez ɛ-pravidel.<br />

Metoda:<br />

(1) Sestroj N ɛ = {A | A ∈ N a A ⇒ ∗ ɛ}. Konstrukce množiny N ɛ je analogická<br />

konstrukci N t z 4.1.<br />

(2) Nechť P ′ je množina pravidel, kterou konstruujeme takto:<br />

a) Jestliže A → α 0 B 1 α 1 B 2 . . . B k α k je v P, k ≥ 0 a každé B i je v N ɛ , 1 ≤<br />

i ≤ k, avšak žádný ze symbolů řetězců α j není v N ɛ , 0 ≤ j ≤ k, pak<br />

k P ′ přidej všechna nová pravidla tvaru<br />

A → α 0 X 1 α 1 X 2 . . . X k α k<br />

kde X i je buď B i nebo ɛ. Nepřidávej ɛ-pravidlo A → ɛ, které se<br />

objeví, jsou-li všechna α i = ɛ.<br />

b) Jestliže S ∈ N ɛ pak k P ′ přidej pravidla<br />

S ′ → ɛ | S<br />

S ′ je nový výchozí symbol. Polož N ′ = N ∪ {S ′ } Jestliže S /∈ N ɛ ,<br />

pak N ′ = N a S ′ = S<br />

(3) Výsledná gramatika má tvar G ′ = (N ′ , Σ ′ , P ′ , S ′ )<br />

Příklad 4.13 Uvažujme gramatiku G = ({S}, {a, b}, P, S), kde P obsahuje pravidla<br />

S → aSbS | bSaS | ɛ. Po aplikování algoritmu 4.4 získáme gramatiku G ′<br />

bez ɛ-pravidel. G ′ = ({S ′ , S}, {a, b}, P ′ , S ′ ), kde P ′ obsahuje pravidla<br />

S ′ → S | ɛ<br />

S → aSbS | abS | aSb | ab | bSaS | baS | bSa | ba<br />

Věta 4.3 Algoritmus 4.3 převádí vstupní gramatiku G na ekvivalentní gramatiku<br />

G ′ bez ɛ-pravidel Důkaz: G ′ zřejmě neobsahuje ɛ-pravidla kromě případného<br />

pravidla S → ɛ, je-li ɛ ∈ L(G). Důkaz, že L(G) = L(G ′ ) se provede indukcí pro<br />

délku řetězce w v ekvivalenci<br />

A ⇒<br />

G ′ ∗ w právě když w ≠ ɛ ∧ A ⇒<br />

G ∗ w<br />

Jinou užitečnou transformací je odstranění pravidel tvaru A → B.<br />

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

Saved successfully!

Ooh no, something went wrong!