Konečný automat Teorie programovacích jazyků oc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@menelu.cz
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Osnova nešní přenášky 1 Automaty v běžném životě 2 Konečný automat efinice a konfigurace automatu přecho mezi konfiguracemi reprezentace přechoové funkce varianty konečných automatů 3 Metoy konstrukce konečného automatu zaveení pomocné struktury na stavech moulární návrh převo z regulárního výrazu a regulární gramatiky 4 Deterministický konečný automat algoritmus převou NKA na DKA implementace v programovacím jazyce Teorie programovacích jazyků Přenáška 4: Konečný automat 2 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Automaty v běžném životě zapni V Z vypni Teorie programovacích jazyků Přenáška 4: Konečný automat 3 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Automaty v běžném životě t Č t z v Ž Č v V v Ž Z v t Z t Teorie programovacích jazyků Přenáška 4: Konečný automat 4 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Automaty v běžném životě provést změny ruh jízenky Zobrazena cena vhoit mince Připraven zrušit Tisk vzít lístek Teorie programovacích jazyků Přenáška 4: Konečný automat 5 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Konečný automat Virtuální stroj skláající se z říicí jenotky a čtecího zařízení, které čte vstupní pásku zleva oprava Říicí jenotka se může nacházet v konečném počtu vnitřních stavů (jeiná paměť uchovávající honotu) Čtecí zařízení snímá jenotlivé symboly věty ze vstupní pásky Vstupem konečného automatu je věta w Výstupem je informace, za věta w patří o jazyka L Kleeneho věta Libovolný jazyk je regulární právě tehy, kyž je rozpoznatelný konečným automatem. Teorie programovacích jazyků Přenáška 4: Konečný automat 6 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Konečný automat a a b a b b b a... jenosměrnávstupnípáska M říicí jenotka Obecně eterministický stroj = výpočet a implementace automatu jsou jenoznačné Při návrhu je ale často výhoné uvažovat neeterministický automat, který násleně převeeme na ekvivalentní eterministický Teorie programovacích jazyků Přenáška 4: Konečný automat 7 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Konečný automat Definice Neeterministický konečný automat je pětice M = (Q, Σ, δ, q 0, F), ke: Q je neprázná konečná množina vnitřních stavů Σ je konečná množina vstupních symbolů (abecea) δ : Q Σ 2 Q je přechoová funkce q 0 Q je počáteční stav automatu F Q je množina koncových stavů Definice umožňuje i F =, takový automat nepřijme žáné slovo a jím rozpoznávaný jazyk bue prázný Teorie programovacích jazyků Přenáška 4: Konečný automat 8 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Konfigurace automatu Definice Dvojici (q, w) Q Σ nazveme konfigurace konečného automatu. Konfiguraci (q 0, w), ke q 0 je počáteční stav automatu a w je vstupní věta, nazveme počáteční. Konfiguraci (q F, ϵ), ke q F F, nazveme koncovou. Konfigurace efinuje situaci, v níž se automat nachází, pomocí aktuálního vnitřního stavu a osu nepřečtené části vstupní věty Věta je přijata (akceptována), jestliže se automat během své činnosti ostane o koncové konfigurace Teorie programovacích jazyků Přenáška 4: Konečný automat 9 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Přecho mezi konfiguracemi Přecho o jené konfigurace k násleující efinuje přechoová funkce δ na záklaě aktuálního vnitřního stavu a přečteného symbolu ze vstupní pásky je-li násleujících stavů více, je automat neeterministický je-li násleující stav nejvýše jeen, je automat eterministický Příkla Automat M = ({q 0, q 1, q 2, q 3 }, {a, b, c}, δ, q 0, {q 3 }) s přechoovou funkcí δ: δ(q 0, a) = q 1 δ(q 1, c) = q 0 δ(q 2, a) = q 1 δ(q 3, c) = q 3 δ(q 0, b) = q 2 δ(q 1, c) = q 3 δ(q 2, b) = q 3 Teorie programovacích jazyků Přenáška 4: Konečný automat 10 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Relace přechou a stavy automatu Na množinou konfigurací automatu Q Σ efinujeme relaci přechou, tzv. krok Definice Jestliže q i Q, q j Q, w Σ, a Σ, potom (q i, aw) (q j, w) právě tehy, kyž δ(q i, a) = q j u DKA, resp. q j δ(q i, a) u NKA. Teorie programovacích jazyků Přenáška 4: Konečný automat 11 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Relace přechou a stavy automatu Bueme používat označení k pro k-tou mocninu, + pro tranzitivní uzávěr a pro tranzitivní a reflexivní uzávěr relace Definice Stav q Q je osažitelný, poku existuje přecho (q 0, w) n (q, ϵ) pro nějaké n 0, w Σ. Poku takový přecho neexistuje, stav q Q je neosažitelný. Teorie programovacích jazyků Přenáška 4: Konečný automat 12 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Automat jako prostřeek specifikace jazyka Definice Automat přijímá (akceptuje) větu w Σ, jestliže platí (q 0, w) (q F, ϵ) pro nějaké q F F. Jazyk popsaný automatem je potom množina vět ze vstupní abecey, které jsou aným automatem akceptovány Definice Jazyk L(M) popsaný automatem M je vyjářen jako L(M) = {w Σ (q 0, w) (q F, ϵ) q F F}. Teorie programovacích jazyků Přenáška 4: Konečný automat 13 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Reprezentace přechoové funkce Tabulka přechoů řáky jsou označeny stavy z Q počáteční stav je označen, koncové stavy sloupce jsou označeny symboly z Σ pole tabulky obsahují výsleky přechoové funkce, tj. pomnožiny množiny stavů Diagram přechoů stavy jsou znázorněny jako uzly grafu koncové stavy jsou vyznačeny vojitým kroužkem mezi uzly jsou orientované spojnice ohonocené příslušným terminálním symbolem Výpočetní (stavový) strom pouze pro eterministické automaty jsou znázorněny pouze osažitelné stavy Teorie programovacích jazyků Přenáška 4: Konečný automat 14 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Reprezentace přechoové funkce Příkla M = ({q 0, q 1, q 2, q 3 }, {a, b, c}, δ, q 0, {q 3 }) δ a b c q 0 {q 1 } {q 2 } q 1 {q 0, q 3 } q 2 {q 1 } {q 3 } q 3 {q 3 } q 0 a b c q 1 q 2 a c b q 3 c Zpracování věty acbacbbc: (q 0, acbacbbc) (q 1, cbacbbc) (q 0, bacbbc) (q 2, acbbc) (q 1, cbbc) (q 0, bbc) (q 2, bc) (q 3, c) (q 3, ϵ) Teorie programovacích jazyků Přenáška 4: Konečný automat 15 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Varianty konečných automatů Neeterministický konečný automat násleujících stavů může být více, tj. δ : Q Σ 2 Q využití při konstrukci automatu z regulární gramatiky Zobecněný neeterministický konečný automat obsahuje ϵ-kroky, tj. δ : Q (Σ {ϵ}) 2 Q využití při konstrukci automatu z regulárního výrazu Deterministický konečný automat násleující stav je určen jenoznačně, tj. δ : Q Σ Q využití při implementaci v programovacím jazyku Totální automat eterministický automat s totální přechoovou funkcí v kažém stavu je schopen reagovat na všechny signály ( q Q)( a Σ)( p Q) že takové, δ(q, a) = p Teorie programovacích jazyků Přenáška 4: Konečný automat 16 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Metoy konstrukce konečného automatu Zaveení pomocné struktury na stavech stavy konečného automatu přestavují konečnou paměť, o níž je možné ukláat informace o osu přečtené části vstupní věty informaci spojenou s aným stavem je účelné zachytit přímo v jeho označení Příkla L = { w {a, b} w poslovo obsahuje abaa } b a a a b a a q ǫ q a q ab q aba q abaa b b b Teorie programovacích jazyků Přenáška 4: Konečný automat 17 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Metoy konstrukce konečného automatu Moulární návrh (synchronní paralelní kompozice) využití uzávěrových vlastností regulárních jazyků pro M 1 a M 2 lze sestrojit automat rozpoznávající L M1 L M2, L M1 L M2, L M1 L M2 a L M1 \ L M2 Příkla L 1 = { w {0, 1} w 0 mo 2 = 0 }, L 2 = { w {0, 1} w 1 mo 3 = 0 } L = L 1 L 2 = { w {0, 1} w 0 mo 2 = 0 w 1 mo 3 = 0 } 0 1 r2 1 1 q1,r1 q1,r2 q1,r3 1 1 1 0 1 0 0 0 0 0 0 1 1 r1 r3 q2,r1 q2,r2 q2,r3 q1 q2 0 0 1 0 1 Teorie programovacích jazyků Přenáška 4: Konečný automat 18 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Konstrukce automatu převoem REGULÁRNÍ VÝRAZ KONEČNÝ AUTOMAT REGULÁRNÍ GRAMATIKA Teorie programovacích jazyků Přenáška 4: Konečný automat 19 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Regulární gramatika konečný automat Algoritmus Vstup: (Pravá) regulární gramatika G = (N, Σ, P, S). Výstup: Neeterministický konečný automat M = (Q, Σ, δ, q 0, F) takový, že L G = L M. Metoa: 1 Q = {q A A N} {q F } 2 Σ M = Σ G 3 q B δ(q A, a) pro kažé pravilo A ab P, q F δ(q A, a) pro kažé pravilo A a P 4 q 0 = q S 5 F = {q F } {q S S ϵ P} Teorie programovacích jazyků Přenáška 4: Konečný automat 20 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Regulární gramatika konečný automat Příkla Regulární gram. G = ({S, A, B, C}, {,,.}, P, S) esetinných čísel: S A A C B B A A C C.B Ekvivalentní konečný automat M = (Q, Σ, δ, q 0, F): 1 Q = {q S, q A, q B, q C, q F } 2 Σ = {,,.} 3 δ(q S, ) = {q A, q C, q F }, δ(q S, ) = {q A }, δ(q A, ) = {q A, q C, q F }, δ(q B, ) = {q B, q F }, δ(q C,.) = {q B } 4 q 0 = q S 5 F = {q F } Teorie programovacích jazyků Přenáška 4: Konečný automat 21 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Regulární gramatika konečný automat Příkla (pokračování) M = ({q S, q A, q B, q C, q F }, {,,.}, δ, q S, {q F }) δ. q S {q A, q C, q F } {q A} q A {q A, q C, q F } q B {q B, q F } q C {q B } q F q S q A q F q B. q C Teorie programovacích jazyků Přenáška 4: Konečný automat 22 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Regulární výraz konečný automat Algoritmus q q p a q {ǫ} {a} F p F G q F G p s q ǫ ǫ p s q F+G F G F Teorie programovacích jazyků Přenáška 4: Konečný automat 23 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Regulární výraz konečný automat Příkla (a+b) c(aa+b) q A (a+b) ǫ ǫ q A q B q C c (aa+b) ǫ ǫ q D q E q F q G ǫ q H ǫ q Z q Z ǫ a ǫ c ǫ b ǫ ǫ ǫ q A q B q C q D q E a q F q G q H q Z a b c b a q E1 q A q D a q Z b a q E1 Teorie programovacích jazyků Přenáška 4: Konečný automat 24 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat NKA DKA Algoritmus Vstup: Neeterministický automat M = (Q, Σ, δ, q 0, F) Výstup: Deterministický automat M = (Q, Σ, δ, q 0, F ) takový, že L M = L M Metoa: 1 Nová množina stavů bue množinou všech pomnožin půvoní množiny stavů, tj. Q = {M M Q} = 2 Q 2 q 0 = {q 0 } 3 Koncové stavy jsou všechny, které (coby množiny) obsahují alespoň jeen půvoní koncový stav, tj. M F M F 4 δ (M, a) = {q q δ(p, a) p M} Teorie programovacích jazyků Přenáška 4: Konečný automat 25 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat NKA DKA Při práci s reprezentací přechoové funkce tabulkou postupujeme jenouše takto: rozšíříme množinu Q tak, aby několik půvoních stavů tvořilo jeen nový stav, např. z {q A, q B } vytvoříme q AB tento nový kompozitní stav přebírá vazby a vlastnosti všech půvoních stavů, z nichž vznikl kompozitní stav použijeme právě tam, ke výsleek přechoové funkce není jeiný stav, ale množina stavů, tey δ(q i, a) > 1 v tabulce pak není nezbytné psát množinové závorky Převoem může vzniknout velké množství nových stavů, z nichž mnohé jsou neosažitelné a nabytečné, proto je nutné násleně tyto nepotřebné stavy ostranit (v uveeném pořaí) Teorie programovacích jazyků Přenáška 4: Konečný automat 26 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat NKA DKA Příkla M = ({q S, q A, q B, q C, q F }, {,,.}, δ, q S, {q F }) M = ({q S, q A, q B, q C, q F, q AC F, q B F }, {,,.}, δ, q S, {q F, q AC F, q B F }) δ. q S {q A, q C, q F } {q A} q A {q A, q C, q F } q B {q B, q F } q C {q B } q F δ. q S q AC F q A q A q B q C q F q AC F q B F q B q AC F q AC F q B q B F q B F Teorie programovacích jazyků Přenáška 4: Konečný automat 27 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat NKA DKA Příkla (pokračování) q A q S q F q B. q C q A q F.. q S q AC F q B q C q B F Teorie programovacích jazyků Přenáška 4: Konečný automat 28 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Ostranění neosažitelných stavů Algoritmus Vstup: Konečný automat M = (Q, Σ, δ, q 0, F) Výstup: Ekvivalentní automat M = (Q, Σ, δ, q 0, F Q ) bez neosažitelných stavů Metoa: 1 Polož S 0 = {q 0 }, i = 1. 2 Konstruuj S i = {q δ(p, a) = q p S i 1 a Σ} S i 1. 3 Je-li S i S i 1, polož i = i + 1 a opakuj krok 2. 4 Je-li S i = S i 1, polož Q = S i a skonči. Teorie programovacích jazyků Přenáška 4: Konečný automat 29 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Ostranění nabytečných stavů Algoritmus Vstup: Konečný automat M = (Q, Σ, δ, q 0, F) bez neosažitelných stavů Výstup: Ekvivalentní automat M = (Q, Σ, δ, q 0, F Q ) bez nabytečných stavů Metoa: 1 Polož E 0 = {F}, i = 1. 2 Konstruuj E i = {q δ(q, a) = p p E i 1 a Σ} E i 1. 3 Je-li E i E i 1, polož i = i + 1 a opakuj krok 2. 4 Je-li E i = E i 1, polož Q = E i a skonči. Teorie programovacích jazyků Přenáška 4: Konečný automat 30 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Ostranění stavů Příkla δ. q S q AC F q A q A q AC F q A. q B q B q B F q S q AC F q AC F q AC F q B q B F q B F q B F Q = {q S, q A, q B, q AC F, q B F } Teorie programovacích jazyků Přenáška 4: Konečný automat 31 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Stavový strom automatu Příkla q S δ. q S q AC F q A q A q AC F. q A q B q AC F q B F q AC F q AC F q B q AC F q AC F q B q B F q B F q B F q B F Teorie programovacích jazyků Přenáška 4: Konečný automat 32 / 33
Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu Deterministický konečný automat Implementace konečného automatu Simulace programovým moulem přecházejícím mezi jenotlivými konfiguracemi Aktuální vnitřní stav automatu je moelován jenouchou proměnnou, která může nabývat honot z množiny stavů Čtecí mechanismus je realizován proceurou, která je schopna ze vstupu oat násleující terminální symbol Realizace logickou funkcí, jejímž jeiným výslekem je zpráva o akceptaci věty (true), nebo o první chybě vstupu (false) Teorie programovacích jazyků Přenáška 4: Konečný automat 33 / 33