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 3. REGULÁRNÍ JAZYKY 42<br />

3.4 Převod regulárních výrazů na konečné automaty<br />

Nyní si ukážeme přímý převod regulárního výrazu na deterministický konečný<br />

automat. Regulární výrazy budeme převádět nejprve na tzv. rozšířené konečné<br />

automaty a ty pak na deterministické konečné automaty.<br />

Definice 3.14 Rozšířený konečný automat (RKA) je pětice M = (Q, Σ, δ, q 0 , F ),<br />

kde<br />

(a) Q je konečná množina stavů,<br />

(b) Σ je konečná vstupní abeceda,<br />

(c) δ je zobrazení Q × (Σ ∪ {ε}) → 2 Q ,<br />

(d) q 0 ∈ Q je počáteční stav,<br />

(e) F ⊆ Q je množina koncových stavů.<br />

Příklad 3.23 M = ({0, 1, 2, 3, 4}, {a, b}, δ, 0, {2, 4})<br />

ε<br />

a<br />

1 2<br />

a<br />

0<br />

ε<br />

3<br />

b<br />

4<br />

b<br />

L(M) = aa ∗ + bb ∗ = a + + b +<br />

Definice 3.15 Klíčovou funkci v algoritmu převodu RKA na DKA má výpočet<br />

funkce, která k danému stavu určí množinu všech stavů, jež jsou dostupné po ε<br />

hranách diagramu přechodů funkce δ. Označme tuto funkci jako ε-uzávěr:<br />

ε-uzávěr(q) = {p | ∃w ∈ Σ ∗ : (q, w) ∗ ⊢ (p, w)}<br />

Funkci ε-uzávěr zobecníme tak, aby argumentem mohla být množina T ⊆ Q:<br />

ε-uzávěr(T ) = ⋃<br />

ε-uzávěr(s)<br />

Příklad 3.24<br />

s∈T<br />

ε<br />

ε ε-uzávěr({q, r, s}) =<br />

t q<br />

p<br />

a<br />

{p, q, r, s, t}<br />

r<br />

ε<br />

s<br />

Pro popis výpočtu ε-uzávěru si zavedeme relaci<br />

∀q 1 , q 2 ∈ Q : q 1<br />

ε def<br />

−→ q 2 ⇐⇒ q 2 ∈ δ(q 1 , ε)<br />

ε<br />

−→ v množině Q takto:<br />

Pak ε-uzávěr(p) = {q ∈ Q | p −→ ε ∗ q}.<br />

K výpočtu ε-uzávěru pak použijeme Warshallův algoritmus, doplníme diagonálu<br />

jedničkami a z příslušného řádku matice výsledné relace vyčteme ε-uzávěr.

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

Saved successfully!

Ooh no, something went wrong!