OSTRAVSKÁ UNIVERZITA V OSTRAVĚ PŘÍRODOVĚDECKÁ FAKULTA BAKALÁŘSKÁ PRÁCE 2002 SEDLÁK MARIAN - 1 -
OSTRAVSKÁ UNIVERZITA PŘÍRODOVĚDECKÁ FAKULTA KATEDRA INFORMATIKY A POČÍTAČŮ Vizualizace principů výpočtu konečného automatu BAKALÁŘSKÁ PRÁCE AUTOR: Marian SEDLÁK VEDOUCÍ PRÁCE: Mgr. Hashim HABIBALLA Ostrava 2002-2 -
Prohlašuji, že předložená práce je mým původním autorským dílem, které jsem vypracoval samostatně.literaturu a další zdroje, z nichž jsem zpracování čerpal, v práci řádně cituji. Chtěl bych zde uvést poděkování vedoucímu mé práce Mgr. Hashimu Habiballovi za poskytnuti odborných připomínek při řešení dané práce. Dále bych chtěl poděkovat Mgr. Rostislavu Fojtíkovi za odborné konzultace při ladění zdrojového kódu. V poslední řadě bych rád poděkoval Martinu Tomišovi za pomoc při stylizaci textu. - 3 -
Anotace Cílem této práce je vytvořit vhodnou aplikaci pro vizualizaci výpočtu konečného automatu. Bude vytvořen algoritmus znázorňující chování konečného automatu a aplikace pomocí níž bude prezentována funkce konečného automatu. K programu je připojeno několik ilustrativních příkladů. Klíčová slova: Konečný automat je matematický model pro modelování systému, který má konečný počet stavů a reaguje na konečný počet vnějších podnětů jež způsobují změnu stavu. Stavový prostor je konečná neprázdná množina stavů automatu Abeceda je konečná neprázdná množina vstupních symbolů Přechodová funkce vyjadřuje přechod z aktuálního stavu při daném vstupním symbolu do stavu nového. Slovo je libovolná kombinace vstupních symbolů, které automat zpracovává. - 4 -
Obsah 1 Úvod.. 6 2.1 Definice konečných automatů 7 2.2 Možnosti reprezentace konečných automatů. 8 3.1 Popis programu.. 9 3.2 Formát vstupního souboru 11 4 Závěr 12 5 Použité informační zdroje 13-5 -
1 Úvod Hlavní úkoly této práce jsou uvedeny v následujících třech bodech: Nastudování teorie z oblasti Formálních jazyků a automatů potřebné k praktickému zvládnutí tématu. Zvolení vhodného vývojového prostředí pro naprogramování aplikace pro vizualizaci výpočtu KA. Detailní návrh algoritmů pro vizualizaci výpočtu KA a návrh prostředí aplikace. Implementace ve formě počítačové aplikace. Zpracování jednoduchých příkladů a kompletace doprovodného textu bakalářské práce. Podmínkou pro naprogramování aplikace pro vizualizaci výpočtu konečného automatu bylo užití operačního systému Windows. Na základě toho jsem zvolil vývojové prostředí Borland C++ Builder 5.0. - 6 -
2.1 DEFINNICE KONEČNÝCH AUTOMATŮ Konečný automat je abstraktní model k modelování systémů, u nichž lze vymezit konečný počet stavů a konečně mnoho vnějších podnětů. Stav tohoto systému se změní pouze na základě vnějšího podnětu a to jednoznačně. Konečný automat je definován pěticí A = (Q, Ε, δ, q 0, F). Kde Q je neprázdná konečná množina stavů tzv. stavový prostor, Ε je neprázdná konečná množina vstupních symbolů tzv. vstupní abeceda. δ je zobrazení Q x Ε Q tzv. Přechodová funkce. q 0 je počáteční stav a F je podmnožinou Q tzv. množina koncových stavů. O tomto automatu budeme hovořit jako o deterministickém. Dále je vhodné si nadefinovat pojem slovo, které automat zpracovává. Je-li Ε konečná množina (abeceda), pak množinu Ε + označujeme jako množinu neprázdných a konečných posloupností prvků z množiny Ε. Symbolem e označujeme prázdnou posloupnost prvků z množiny Ε. Symbol e pak nazýváme prázdným slovem. Slovem pak nazveme posloupnost prvků z množiny Ε kde Ε * = Ε + {e}. Z definice slova vyplývá definice jazyka L. Jazyk L Ε *. Této jazyk pak nazýváme jazykem definovaným nad abecedou Ε. Poté můžeme říci že jestliže jazyk L je rozpoznatelný konečným automatem pak automat musí po průchodu slova skončit v koncovém stavu. Musím ještě podotknout, že existují také jiné typy konečných automatů a to nedeterministický a zobecněný nedeterministický. Nedeterministickým konečným automatem budeme nazývat pětici A = (Q, Ε, δ, I, F), kde Q je neprázdná konečná množina stavů, Ε je abeceda automatu, δ je zobrazení Q x Ε P(Q). P(Q) je množina všech podmnožin Q. I Q je množina všech počátečních stavů a F Q je množinou všech koncových stavů. Pozn. Nedeterministický konečný automat přijímá slovo tehdy existuje-li cesta z některého počátečního stavu do některého koncového stavu. - 7 -
Zobecněným nedeterministickým automatem budeme nazývat pětici A = (Q, Ε, δ, I, F), kde Q je neprázdná konečná množina stavů, Ε je abeceda automatu, δ je zobrazení Q x (Ε {e}) P(Q). Nedeterministický i zobecněný nedeterministický konečný automat lze převést na deterministický konečný automat. Proto se již dále nebudeme těmito automaty zabývat. 2.2 MOŽNOSTI REPREZENTACE KONEČNÝCH AUTOMATŮ Konečné automaty lze reprezentovat několika způsoby: Výčtem konečného automatu (obr. 1.1) Tabulkou (obr. 1.2) Stavovým stromem (obr. 1.3) Stavovým diagramem (obr. 1.4) Obr. 1.1 Výčet konečného automatu Obr. 1.2 Tabulka Obr. 1.3 Stavový strom Obr 1.4 Stavový diagram - 8 -
3.1 Popis programu Jak již vyplývá ze zadání bakalářské práce je hlavním požadavkem funkčnost programu v operačním systému Microsoft Windows. Z tohoto důvodu jsem zvolil vývojový nástroj C++ Builder 5.0. Tento nástroj lze použít jak pro vytváření aplikací pro DOS tak i Windows pomocí programovacího jazyka C++. Program je navržen pro zkoušeni různých slov z jazyka. Po nahrání vstupního souboru s parametry automatu (viz. další kapitola) je možné zadávat postupně jednotlivá slova a provádět jejich výpočet. Výpočet je možné provádět po krocích směrem vpřed i vzad. Popřípadě lze výpočet dokončit pomocí jediného tlačítka. V průběhu výpočtu je zobrazován průchod celým slovem až do jeho konce. Průběžně s tímto je také možné sledovat použité přechodové funkce nebo tabulku kde je vždy vysvícen použitý řádek a sloupec. Po spuštění programu se objeví pouze hlavní okno s menu (obr 2.1), které obsahuje základní příkazy. Obr 2.1 Hlavní menu aplikace Popis menu soubor (obr 2.2): Otevři - Otevře požadovaný soubor s příponou.aut Ulož jako - Uloží soubor s automatem pod zadaným jménem. Obr 2.2 Menu soubor Zavři Uzavře soubor a zpřístupní položku pro otevření. nového souboru. Konec Ukončení aplikace. Po vybrání souboru v dialogu Otevři se objeví okno s daným automatem (obr. 2.3). - 9 -
Obr. 2.3 Okno automatu. Popis tlačítek: Nové slovo po stisku tohoto tlačítka se objeví dialog pro zadání slova (obr. 2.4) Tlačítka Další a Zpět slouží k pohybu ve slově. Tlačítko Dokonči projde slovem až do konce a ukončí výpočet. Toto okno dále v horní části obsahuje modro červený panel, který znázorňuje pozici ve slově. Vlevo od červeného políčka jsou již přečtené znaky slova. V červeném políčku je znak, na který je právě nastavena čtecí hlava automatu a je připraven ke zpracování. V posledním poli jsou dosud nepřečtené znaky slova. Pod tímto panelem je zobrazována právě použitá přechodová funkce. V pravé části okna je tabulka v níž je vysvícen použitý řádek a sloupec k výpočtu.jejich průsečík je ještě zvýrazněn červenou barvou. Obr. 2.4 Okno pro zadání slova automatu - 10 -
3.2 Formát vstupního souboru Jako vstup byl zvolen textový soubor. Toto volbu jsem provedl proto, že data v textovém souboru jsou daleko lépe čitelná a snadná je i jeho editace. Obr 3.1 Struktura vstupního souboru Struktura vstupního souboru je vidět na obrázku (obr. 3.1). Tento soubor obsahuje povinně tři klíčová slova nazev, abeceda a stavy. Všechna tato slova musí být zakončena dvojtečkou. Za klíčovým slovem nazev: je možno uvést jméno automatu. Po slově abeceda: následuje výčet znaků abecedy. Jednotlivé znaky musejí být odděleny čárkou. Slovo stavy: uvozuje tabulku přechodových funkcí. Formát jednotlivých řádků je následující: T S P1 P2 T typ stavu vstupní = 2, koncový = 1, jiný = 0 (při kombinaci vstupního a koncového stavu je typ = 3, logická funkce OR). S název stavu. P1 název stavu kam automat přejde po přečtení prvního znaku v abecedě. P2 - název stavu kam automat přejde po přečtení druhého znaku v abecedě. - v případě použití více znaků v abecedě se vkládají další názvy stavů, na které automat přejde po dalších symbolech abecedy. vstupní stav může být pouze jeden. Jedná o deterministický konečný automat. - 11 -
4 Závěr Myslím si, že tato práce bude přínosem pro studium teoretické informatiky a pomůže tímto k lepšímu pochopení a porozumění principu práce konečných automatů. Toto zadání jsem si vybral zcela záměrně protože i já jsem měl problémy při studiu regulárních a bezkontextových jazyků a chyběl mi právě nějaký program pro vyzkoušení a porozumění práce konečných automatů. Doufám že se mi podařilo alespoň částečně tuto mezeru v takovémto softwaru zaplnit. Tato práce podstatě splnila požadavky zadání, ale na druhou stranu je možné jí dále rozvíjet např. nalezení algoritmu, který by automaticky generoval celý graf konečného automatu. Tímto příslibem do budoucna bych tuto práci zakončil. - 12 -
5 Použité informační zdroje 1. CHYTIL M.: Automaty a gramatiky, vydání 1., Praha, SNTL, 1984, ISBN 04-012-84 2. ČEŠKA M., RÁBOVÁ Z.: Gramatiky a jazyky, VUT Brno, 1985 3. MATOUŠEK D.: C++ Builder 4.0 a 5.0, vývojové prostředí, vydání 2., Praha, BEN, 2000, ISBN 80-86056-70-8 4. VIRIUS M.: C++ Builder 4.0 podrobný průvodce, vydání 1., Praha, Grada Publishing, 1999, ISBN 80-7169-796-6 - 13 -