VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ ÚSTAV INFORMAČNÍCH SYSTÉMŮ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INFORMATION SYSTEMS MULTIDIMENSIONÁLNÍ JAZYKY A JEJICH AUTOMATY MULTI-DIMENSIONAL LANGUAGES AND THEIR AUTOMATA BAKALÁŘSKÁ PRÁCE BACHELOR S THESIS AUTOR PRÁCE AUTHOR VEDOUCÍ PRÁCE SUPERVISOR LUKÁŠ DIBĎÁK Prof. RNDr. ALEXANDER MEDUNA, CSc. BRNO 2016
Astrkt Práce seznmuje s teorií formálních jzyků konečných utomtů. Popisuje zoecnění této teorie do dvou rozměrů. Předstvuje zákldní typy dvoudimensionálních utomtů, především teselční utomty. Pro teselční utomty jsou nídnuty lgoritmy k jejich determinizci. Jeden z lgoritmů je následně používán přiloženou plikcí pro determinizci. Astrct The Bchelor s Thesis introduces the theory of forml lnguges nd finite utomt. It descries generlistion of one-dimensionl theory into two dimensions. It introduces sic types of two-dimensionl utomt, especilly on-line tesselltion utomt. This pper offers lgorithms for the process of determiniztion of on-line tesselltion utomt. One of the lgorithms is used in enclosed ppliction. Klíčová slov Konečné utomty, Determinizce, Formální jzyky, Dvoudimensionální jzyky, Dvoudimensionální utomty, Teselční utomty Keywords Finite utomt, Determiniztion, Forml lnguges, Two-dimensionl lnguges, Twodimensionl utomt, On-line tesselltion utomt Citce DIBĎÁK, Lukáš. Multidimensionální jzyky jejich utomty. Brno, 2016. Bklářská práce. Vysoké učení technické v Brně, Fkult informčních technologií. Vedoucí práce Medun Alexnder.
Multidimensionální jzyky jejich utomty Prohlášení Prohlšuji, že jsem tuto klářskou práci vyprcovl smosttně pod vedením pn prof. RNDr. Alexnder Meduny, CSc. Uvedl jsem všechny literární prmeny pulikce, ze kterých jsem čerpl........................ Lukáš Diďák 15. květn 2016 Poděkování Chtěl ych poděkovt vedoucímu této práce, prof. RNDr. Alexnderu Medunovi, CSc., z jeho čs, rdy celkovou spolupráci. c Lukáš Diďák, 2016. Tto práce vznikl jko školní dílo n Vysokém učení technickém v Brně, Fkultě informčních technologií. Práce je chráněn utorským zákonem její užití ez udělení oprávnění utorem je nezákonné, s výjimkou zákonem definovných přípdů.
Osh 1 Úvod 3 2 Jednorozměrné jzyky konečné utomty 4 2.1 Aecedy, řetězce jzyky............................ 4 2.1.1 Aeced.................................. 4 2.1.2 Řetězec řetězcové operce....................... 4 2.1.3 Mocnění ecedy vytváření řetězců.................. 5 2.1.4 Jzyk................................... 6 2.2 Regulární výrzy jzyky............................ 7 2.3 Konečné utomty................................ 8 2.3.1 Definice chování konečného utomtu................ 9 2.3.2 Proces determinizce utomtu..................... 11 2.3.3 Dlší typy konečných utomtů..................... 18 3 Dvourozměrné jzyky konečné utomty 20 3.1 Zoecnění principů pro dv rozměry...................... 20 3.2 Regulární výrzy jzyky............................ 23 3.3 Dvourozměrné konečné utomty........................ 25 3.3.1 Čtyřcestný utomt........................... 25 3.3.2 Teselční utomt............................ 26 4 Determinizce teselčního utomtu 28 4.1 Rozor nedeterminismu............................. 28 4.2 Algoritmy determinizce............................. 31 4.2.1 Algoritmus s nedostupnými stvy.................... 31 4.2.2 Algoritmus pouze s dostupnými stvy funkcemi........... 33 5 Aplikce 36 5.1 Uživtelské rozhrní............................... 36 5.1.1 Stvy................................... 36 5.1.2 Vstupní symoly............................. 38 5.1.3 Trnsitivní funkce............................ 39 5.2 Implementce................................... 40 5.2.1 Implementce vnitřní logiky....................... 41 5.2.2 Implementce grfického rozhrní.................... 42 6 Závěr 44 1
Litertur 45 Přílohy 46 Seznm příloh...................................... 47 A Osh DVD 48 2
Kpitol 1 Úvod Cílem práce je seznámit s teorií formálních jzyků konečných utomtů v jedné i dvou dimensích. Jádrem práce je předstvení lgoritmů pro determinizci teselčního utomtu implementce jednoho z lgoritmů do přiložené plikce pro možnost provedení procesu determinizce teselčního utomtu. Práce poskytuje informce o teorii formálních jzyků. Popisuje zákldní pojmy jednorozměrných jzyků vysvětluje elementární prolemtiku těchto jzyků. Informuje o modelech pro chrkterizci regulárních jzyků regulárních výrzech konečných utomtech. Zmiňuje možnost ekvivlentního převodu mezi těmito modely. U regulárních výrzů definuje, které regulární jzyky znčí. Definuje konečné utomty princip jejich činnosti. Uvádí prolemtiku determinizce u jednorozměrných utomtů vyorzuje zákldní typy konečných utomtů. Po seznámení s teorií jednorozměrných formálních jzyků je poskytnut pohled n zoecnění této teorie do dvou rozměrů. Jsou definovány zákldní pojmy dvoudimensionálních jzyků. Práce dále předstvuje vzthy mezi tomickými jzyky regulárními výrzy, které společně znčí regulární jzyky ve dvou rozměrech. Jsou definovány dvoudimensionální utomty, jejich chování jsou vyorzeny jejich zákldní typy. Pro teselční utomt, který ptří do skupiny celulárních utomtů, jsou rozerány možné způsoy nedeterminismu. Je vysvětleno, kde tento nedeterminismus vzniká jsou vylíčen řešení, jk prolém nedeterminismu řešit. Jsou nídnuty lgoritmy pro implementci procesu determinizce teselčního utomtu. Prolém nedeterminismu jeho řešení pomocí lgoritmů je demonstrován n příkldu nedeterministického teselčního utomtu. Podle přiloženého lgoritmu je implementován plikce umožňující využít procesu determinizce nd teselčním utomtem. Tto plikce je implementován v jzyku Jv. Aplikce nízí přehledné pro osluhu jednoduché grfické uživtelské rozhrní. Je popsán implementce vnitřní logiky plikce i využítí grfických tříd, které nízí jzyk Jv, pro implementci grfického uživtelského rozhrní. 3
Kpitol 2 Jednorozměrné jzyky konečné utomty Kpitol se zývá vysvětlením zákldních pojmů z olsti teorie jednorozměrných jzyků konečných utomtů potřených k pochopení dlší teorie dvoudimensionálních jzyků utomtů. Osh této kpitoly je náplní předmětu IFJ v rámci klářského studi n FIT VUT v Brně, vyučovného prof. Medunou. Definice lgoritmy zmíněné v této kpitole jsou čerpány z přednáškových mteriálů k tomuto předmětu neo z knihy prof. Meduny [3]. 2.1 Aecedy, řetězce jzyky Podle nlogie jsou zákldními prvky jzyk písmen jeho ecedy. Z těchto písmen se skládáním vytváří slov. Nekteré z těchto slov tvoří slovo jzyk některé nikoliv. Jzyk je následně určen množinou slov tohoto jzyk. Tvor těchto slov je definován pomocí grmtických prvidel, které určují, které posloupnosti písmen tvoří slovo jzyk [6]. 2.1.1 Aeced Aecedu lze definovt jko liovolnou konečnou neprázdnou množinu symolů. Podle konvence ývá oznčován písmenem Σ. Pokud element náleží do ecedy Σ, pk je tento vzth zpsán jko Σ element lze prohlásit prvkem ecedy Σ. Níže je přiložen definice ecedy několik příkldů eced. Definice 1. Aeced je konečná, neprázdná množin elementů, které nzýváme symoly. Příkld 1. Σ = {0, 1}, pk Σ znčí inární ecedu [1]. Příkld 2. Σ = {,, c,..., z}, pk Σ znčí ecedu mlých písmen [1]. Příkld 3. Σ = {+,, *, /}, pk Σ znčí ecedu zákldních mtemtických opercí. 2.1.2 Řetězec řetězcové operce Řetězec, v některých literturách oznčován tké jko slovo, lze definovt jko konečnou posloupnost symolů nějké ecedy Σ. Tyto symoly se smozřejmě mohou v posloupnosti opkovt. Speciálním přípdem je prázdný řetězec neo-li tké prázdné slovo. V tomto řetězci se nevyskytuje žádný symol z ecedy Σ je podle konvence znčen jko ε. 4
Definice 2. Nechť Σ je eced, pk 1. ε je řetězec nd ecedou Σ 2. pokud x je řetězec nd Σ Σ, potom x je řetězec nd ecedou Σ Nd kždým řetězcem lze provést operci zjištění délky řetězce. Délk řetězce je definován jko počet výskytů kteréhokoliv symolu ecedy Σ v dném řetězci. Délk řetězce 101 nd ecedou Σ je znčen jko 101. Délk prázdného řetězce ε je nul. Jedná se o jediný řetězec s touto délkou. Příkld 4. Nechť Σ = {0, 1}, pk řetězce 0100, 10, 0, 0101, 1111 jsou řetězce nd touto ecedou jejich délky odpovídjí 0100 = 4, 10 = 2, 0 = 1 ε = 0. 2.1.3 Mocnění ecedy vytváření řetězců Aecedu je možné mocnit tím vyjádřit určitou délku řetězců z ecedy Σ. Mocnění se provádí pomocí exponencionální notce, kde Σ k znčí podmnožinu všech řetězců o velikosti k z ecedy Σ. Počet těchto řetězců se rovná 2 k. Množin všech podmnožin všech různých délek řetězců nd ecedou Σ, nzýván jko uzávěr ecedy Σ, je znčen Σ *. Množinu Σ * lze tedy tké definovt jko Σ * = Σ 0 Σ 1 Σ 2 Σ 3... Uzávěr ecedy Σ, pomocí konvencí zpsáno jko Σ *, lze vyloučit o prvek prázdného řetězce ε. Uzávěr Σ * vyloučený o prvek prázdného řetězce ε je oznčován Σ +. Pro množinu Σ + lze pk definovt následudící dv vzthy Příkld 5. Σ = {0, 1}, pk Σ + = Σ 1 Σ 2 Σ 3... Σ * = Σ + {ε}. Σ 0 = {ε}, Σ 1 = {0, 1}, Σ 2 = {00, 01, 10, 11}... Nd kždými dvěm řetězci nd ecedou Σ lze provádět operci konktennce. Operci konktennce řetězců x y lze zjednodušeně popst jko vytvoření kopie řetězce x následovného kopií řetězce y. Pro konktennci dvou řetězců x ε pltí, že výsledkem této konktennce je řetězec x. Formálně, xε = εx = x. Níže přikládám úplnou definici konktennce definice dvou neméně důležitých opercí nd řetězcem, reverzce mocnění řetězce. 5
Definice 3. Nechť x y jsou dv řetězce nd ecedou Σ. Konktence řetězců x y je řetězec xy. Definice 4. Nechť x je řetězec nd ecedou Σ. Reverzce řetězce x, reversl(x), je definován: 1. pokud x = ε, pk reversl(ε) = ε 2. pokud x = 1... n pk reversl( 1... n ) = n... 1 pro n 1 i pro všechn i = 1,..., n Definice 5. Nechť x je řetězec nd ecedou Σ. Pro i 0, i-tá mocnin řetězce x, x i, je definován: 1. x 0 = ε 2. pro i 1 : x i = xx i 1 2.1.4 Jzyk Jzyk nd ecedou Σ je definován jko množin řetězců z uzávěru Σ *, formálně L Σ *. Konečný jzyk oshuje konečný počet řetězců n pro n 1, ztímco u nekončeného jzyk je počet těchto řetězců nekonečný. Kždý jzyk nd ecedou Σ oshuje vždy nejméně dv prvky prázdnou množinu (neoshuje žádný prvek) prázdný řetězec {ε} (oshuje jeden prvek) [3]. Definice 6. Nechť Σ * znčí množinu všech řetězců nd Σ. Kždá podmnožin L Σ * je jzyk nd Σ. Příkld 6. Nechť Σ = {, }, jestliže jzyk L Σ * je definován jko pk jzyk L oshuje pouze tyto řetězce: L = { n n : 1 n 3},,,. Nd jzyky lze provádět sdu opercí. Stejně jko u řetězců lze využít operci konktennce. Tu lze u formálních jzyků definovt Definice 7. Nechť L 1 L 2 jsou dv jzyky nd Σ. Konktence jzyků L 1 L 2, L 1 L 2, je definován jko L 1 L 2 = {xy : x L 1 y L 2 }. Následují definice klsických množinových opercí sjednocení, průnik rozdíl množin specifikovné pro dv jzyky L 1 L 2. Definice 8. Nechť L 1 L 2 jsou dv jzyky nd Σ. Sjednocení jzyků L 1 L 2, L 1 L 2, je definováno: L 1 L 2 = {x : x L 1 neo x L 2 }. Definice 9. Nechť L 1 L 2 jsou dv jzyky nd Σ. Průnik jzyků L 1 L 2, L 1 L 2, je definován: 6
L 1 L 2 = {x : x L 1 x L 2 }. Definice 10. Nechť L 1 L 2 jsou dv jzyky nd Σ. Rozdíl jzyků L 1 L 2, L 1 L 2, je definován: L 1 L 2 = {x : x L 1 x L 2 }. S využitím operce reverzce řetězce je možné operci reverzce plikovt n jzyk. Definice 11. Nechť L je jzyk nd ecedou Σ. Reverzce jzyk L, reverse(l), je definován: reverse(l) = {reverse(x) : x L}. Je optimální zmínit následující tři důležité operce nd formálním jzykem doplněk, mocnění iterci jzyk. Definice 12. Nechť L je jzyk nd ecedou Σ. Doplněk jzyk L, L, je definován jko L = Σ * L. Definice 13. Nechť L je jzyk nd ecedou Σ. Pro i 0, i-tá mocnin jzyk L, L i, je definován: 1. L 0 = {ε} 2. pro i 1 : L i = LL i 1 Definice 14. Nechť L je jzyk nd ecedou Σ. Iterce jzyk L, L *, pozitivní iterce jzyk L, L +, jsou definovány L * = i=0 Li, 2.2 Regulární výrzy jzyky L + = i=1 Li. V dlších kpitolách udou vysvětleny dv zákldní modely pro chrkterizci regulárních jzyků regulární výrzy konečné utomty. Jelikož všechny řetězce nejsou kceptovné jzykem, je vhodné umět tyto řetězce popst. Akceptovné řetězce lze popst pomocí konečných utomtů či regulárních výrzů. Oproti konečným utomtům, kterým je vyhrzen následující podkpitol 2.3, regulární výrzy nízejí možnost vyjádřit kceptovné řetězce deklrtivně - pomocí výrzu oshujícího symoly operátory. Tyto operátory znčí elementární operce nd jednotlivými symoly jsou popsány v tulce 2.1. Operce (.) ( + ) ( * ) Popis předstvuje konktennci symolů předstvuje výěr jednoho ze symolů neo předstvuje iterci nd symolem Tulk 2.1: Zákldní operce regulárních výrzů Jzyky, které regulární výrzy znčí, lze definovt tulkou 2.2 (regulární výrz r znční jzyk L r regulární výrz s znčí jzyk L s ). 7
Regulární výrz Regulární jzyk, který znčí ε {ε}, kde Σ {} (r.s) L = L r L s (r + s) L = L r L s (r * ) L = L * Tulk 2.2: Regulární výrzy jzyky které znčí Regulární jzyk musí ýt vždy definován regulárním výrzem. Definice 15. Nechť L je jzyk. L je regulární jzyk, pokud existuje regulární výrz r, který tento jzyk znčí. Příkld 7. Nechť regulární výrz r = + + definuje regulární jzyk L. Tento jzyk je pk znčen L = { n n : n 1}. Regulární výrzy konečné utomty jsou mezi seou návzájem převoditelné. Pro kždý konečný utomt M existuje regulární výrz r [3]. 2.3 Konečné utomty Konečný utomt je jednoduchý výpočetní model. Jeho součástí je vstupní pásk, čtecí hlv konečné stvové řízení [3]. Vstupní pásk je rozdělen n čtverce, kždý čtverec oshuje jeden vstupní symol [3]. Tto pásk se pohyuje pod čtecí hlvou Čtecí hlv čte symoly ze vstupní pásky. Symol, který je pod čtecí hlvou je ktuálně zprcovávný Konečné stvové řízení je reprezentováno konečnou množinou stvů společně s konečnou množinou prvidel [3]. Tyto prvidl slouží pro pohy mezi jednotlivými stvy Automt následně provádí sekvenční kroky. Tyto sekvenční kroky jsou definovány prvidly. Prvidl určují jk je součsný stv měněn. Automt má definovný počáteční stv množinu koncových stvů. Pokud je ze vstupní pásky přečten symol, pásk se posune pod čtecí hlvou se nství symol následující z právě přečteným symolem. Konečné stvové řízení následně symol pod čtecí hlvou zprcuje, v množině prvidel vyhledá vhodné prvidlo posune se, je-li to možné. Úkolem utomtu je se posunout po přečtení vstupní pásky z počátečního stvu do jednoho z definovných koncových stvů. Výsledkem jsou dvě tvrzení. Automt kceptuje sekvenci symolů n pásce, popř. tuto sekvenci odmítá [3]. Automt ze vstupní pásky nemusí přečíst v sekvenčním kroku ni jeden symol, pk dochází k použití prvidl s ε-přechodem, tedy provedení nulové konfigurce. 8
2.3.1 Definice chování konečného utomtu Definice 16. Konečný utomt je pětice: M = (Q, Σ, R, s, F ), kde Q je konečná množin stvů Σ je vstupní eced R je konečná množin prvidel tvru: p q, kde p, q Q, Σ {ε} s Q je počáteční stv F Q je množin koncových stvů Chování utomtu je reprezentováno konfigurcí χ, skládjící se z ktuálního stvu utomtu následnou sekvencí symolů pro přechod mezi stvy. Formálně, χ QΣ *. Smotná konfigurce oshuje sekvenci přechodů. Přechod reprezentuje jeden výpočetní krok [3] podle vyrného prvidl z množiny prvidel R. Po provedení přechodu vzniká nová konfigurce. Nul provedených přechodů z konfigurce χ do konfigurce χ nznčuje, že n vstupní pásce neyl přečten zádný symol ylo použito prvidlo utomtu s ε-přechodem. Definice 17. Nechť χ je konfigurce. Konečný utomt M provede nul přechodů z χ do χ; zpisujeme: neo zjednodušeně χ 0 [ε] χ 0 χ. V opčném přípdě, kdy yl ze vstupní pásky přečten symol, či v sekvenčních krocích více symolů, vzniká sekvence přechodů. Níže přikládám definici pro sekvenci přechodů konfigurcí. Definice 18. Nechť χ 0, χ 1,..., χ n je sekvence přechodů konfigurcí pro n 1 pro všechn i = 1,..., n, což znmená: χ i 1 χ i [r i ], r i R χ 0 χ 1 [r 1 ] χ 2 [r 2 ]... χ n [r n ]. Pk M provede n-přechodů z χ 0 do χ n ; zpisujeme: neo zjednodušeně χ 0 χ n [r 1... r n ] χ 0 n χ n. 9
Příkld 8. Nechť konfigurce χ oshuje sekvenci q. Automt definovný množinou stvů vstupní ecedou Q = {q, r, s}, Σ = {, } má definovné dvě prvidl q r [1] r s [2], pk je možné pomocí prvidl [1] provést přechod následně dlší přechod podle prvidl [2] q r r s neo lze souhrnně zpst dv přechody konfigurce χ q 2 s. Pokud je utomt schopen přečíst celou sekvenci přechodů skončí v jednom z definovných koncových stvů utomtu, pk je přečtený řetězec přijímným řetězcem [3]. Definice 19. Nechť M = (Q, Σ, R, s, F ) je konečný utomt. Jzyk přijímný konečným utomtem M, L(M), je definován: L(M) = {w : w Σ *, sw * f, f F }. Konečný utomt lze znázornit grficky pomocí stvů symolů. Stvy jsou uzvřené v kruhu. Pokud je stv koncový, pk je uzvřen ve dvojitém kruhu. Stvy uzvřené v kruhu jsou spojeny. Tyto spoje znázorňují přechody jsou oznčeny symolem šipkou definující vstupní výstupní stv. Příkld 9. Nechť M = (Q, Σ, R, s, F ) je konečný utomt oshující prvidlo kde q r R, Q = {s, q, r}, Σ = {, }. Toto prvidlo lze grficky znázornit pomocí orázku 2.1. q r Orázek 2.1: Grfické znázornění prvidl utomtu 10
2.3.2 Proces determinizce utomtu Nedeterminizovný konečný utomt může přejít z jedné konfigurce do více dlších. Není tedy specificky určeno do které konfigurce má přejít tím může vzniknout jiný výsledek než který yl předpokládán. Determinizovný konečný utomt smí z jedné konfigurce přejít do mximálně jedné dlší. Pro kždý konečný utomt M existuje ekvivlentní model determinizovného konečného utomtu M d [3]. Proces převedení nedeterministického utomtu n ekvivlentní model deterministického utomtu se nzývá determinizce utomtu. Mezikrokem mezi konečným utomtem M determinizovným konečným utomtem M d je vytvoření ekvivlentního modelu utomtu ez ε-přechodů M. Definice 20. Dv modely pro popis formálních jzyků (npř. konečné utomty) jsou ekvivlentní, pokud specifikují tentýž jzyk. Nederminizovnou část konečného utomtu lze demonstrovt n příkldu níže. Příkld 10. Nechť M = (Q, Σ, R, s, F ) je konečný utomt definovný Q = {s, q, r}, Σ = {, } oshuje v množině prvidel R mimojiné prvidl, grficky znázorněné n orázku 2.2 s q s r, pk při konfigurci s vzniká nejednoznčnost, které prvidlo z prvidel výše použít. Po provedení konfigurce y následující konfigurce mohly ýt q r. q s r Orázek 2.2: Ukázk nedeterminismu konečného utomtu M Pokud konečný utomt oshuje prvidl s ε-přechody, pk smí utomt provádět ε-pohyy. Při tomto pohyu utomt nečte ze vstupní pásky žádný symol hrozí riziko vzniku nedeterminismu. Pro vytvoření determinizovného utomtu je tře prvidl s těmito přechody odstrnit. Řešením může ýt vytvoření ekvivlentního modelu konečného utomtu M, který neoshuje žádné ε-prvidl. Při procesu determinizce je nutné nejdříve převést konečný utomt M oshující prvidl s ε-přechody n konečný utomt ez prvidel s ε-přechody M. Níže přikládám definici pro konečný utomt ez ε-přechodů. 11
Definice 21. Nechť M = (Q, Σ, R, s, F ) je konečný utomt. M je konečný utomt ez ε-přechodů, pokud pro kždé prvidlo kde p, q Q, pltí: p q R, Σ ( ε). Pro možnost správného odstrnění ε-přechodů je nutné nejdříve pro kždý stv utomtu vytvořit jeho ε-uzávěr. Tento uzávěr musí oshovt všechny osttní stvy z utomtu do kterých lze ze stvu, pro který je ε-uzávěr vytvářen, přejít ez přečtení vstupního symolu. Níže je přiložen formální definice pro ε-uzávěr. Definice 22. Pro kždý stv p Q je definován ε-uzávěr(p): ε-uzávěr(p) = {q : q Q, p * q}. Příkld 11. Nechť M = (Q, Σ, R, s, F ) je konečný utomt, kde Q = {s, q, r, f}, v množině prvidel R jsou tyto prvidl pk ε-uzávěr(s) oshuje množinu stvů s q q r r f, {s, q, r}, Σ = {} jelikož se do těchto stvů lze dostt ez přečtení symolu (pouze využitím ε-prvidel. Tento uzávěr je grficky znázorněn n orázku 2.3. ε ε s q r f Orázek 2.3: Grfické znázornění ε-uzávěru pro stv s Vytvoření uzávěrů lze zlgoritmizovt. Jeden tkový lgoritmus 1 je přiložen níže. Vstupem je konečný utomt M = (Q, Σ, R, s, F ). Výstupem ε-uzávěr(p). Jelikož je vytvářen ε-uzávěr pro stv p, předpokládá se, že stv p náleží do množiny stvů utomtu M, formálně p Q. Následně je potře tyto uzávěry zprcovt. Pro kždý ε-uzávěr(p), kde p Q, lgoritmus 2 njde všechny prvidl ve tvru kde q r (q r) R, Σ {ε}, q ε-uzávěr(p). Do množiny prvidel ez ε-přechodů R se přidá prvidlo ve tvru p r. Pokud je nějká shod mezi stvy ε-uzávěru(p) koncovými stvy původního utomtu M, pk je stv p vložen do koncových stvů utomtu ez ε-přechodů M. 12
Algoritmus 1 získání hodnot ε-uzávěru stvu p Vstup: M = (Q, Σ, R, s, F); Výstup: ε-uzávěr(p) 1: i := 0; Q 0 := {p}; 2: repet 3: i := i + 1; p Q 4: Q i := Q i 1 {p : p Q, q p R, q Q i 1 }; 5: until Q i = Q i 1 ; 6: ε-uzávěr(p) := Q i. Algoritmus 2 odstrnění ε-přechodů Vstup: M = (Q, Σ, R, s, F) Výstup: M = (Q, Σ, R, s, F ) 1: R := ; 2: for ech p Q do egin 3: R := R {p q : p q R, Σ, p ε-uzávěr(p), q Q}; 4: end for 5: F := {p : p Q, ε-uzávěr(p) F }. Příkld 12. Nechť M = (Q, Σ, R, s, F ) je konečný utomt s ε-přechody, definovný Q = {s, q, r, f}, Σ = {, }, oshující v množině R prvidl s q, s r, q q, q f, r f, je vyorzený n orázku 2.4. ε q strt s r f Orázek 2.4: Konečný utomt oshující ε-přechod Pk lze podle lgoritmu 1 pro vytvoření ε-uzávěrů vytvořit tyto uzávěry ε-uzávěr(s) = {s, q} ε-uzávěr(q) = {q} ε-uzávěr(r) = {r} ε-uzávěr(f) = {f} 13
Podle lgoritmu 2 je nutné vzniklé ε-uzávěry zprcovt vytvořit nová prvidl do množiny R nové koncové stvy do množiny F konečného utomtu M. Konečná množin stvů Q, počáteční symol s množin vstupních symolů Σ se duplikuje z konečného utomtu s ε-přechody M. Množinu nových prvidel R prezentuje tulk 2.3, množinu nových koncových stvů F pk tulk 2.4. ε-uzávěr(s) ε-uzávěr(q) ε-uzávěr(r) ε-uzávěr(f) s r q q r f s q q f s f Tulk 2.3: Prvidl utomtu ez ε-přechodů ε-uzávěr(s) ε-uzávěr(q) ε-uzávěr(r) ε-uzávěr(f) f Tulk 2.4: Koncové stvy utomtu ez ε-přechodů Výsledný utomt ez ε-přechodů, M = (Q, Σ, R, s, F ), je zorzen n orázku 2.5. q strt s r f Orázek 2.5: Ekvivlentní konečný utomt ez ε-přechodů Druhým krokem v procesu determinizce je odstrnění nedeterministických prvidel utomtu. Vstupem je konečný utomt ez ε-přechodů M, výstupem konečný deterministický utomt M d. V tomto textu udou prezentovány dv lgoritmy pro determinizci konečného utomtu. První lgoritmus 3 vytváří stvy ze všech podmnožin množiny stvů vstupního konečného utomtu M. Bohužel vytváří nedostupné stvy do kterých utomt nemůže vkročit pomocí žádné konfigurce. Pro prktické využití je determinizovný utomt vytvořený tímto lgoritmem nevhodný, jelikož oshuje redundntní dt. Nejprve se vytvoří všechny podmnožiny stvů. Těchto komincí pro n stvů je 2 n 1. Vytvoření těchto podmnožin je demonstrováno v příkldu níže. 14
Příkld 13. Nechť M = (Q, Σ, R, s, F ) je konečný utomt, oshující v množině stvů tři stvy, formálně zpsáno Q = {q, r, s}. Tyto stvy vytvořené podmnožinmi Q pro determinizci jsou {q}, {r}, {s}, {q, r}, {q, s}, {r, s}, {q, r, s}. Po vytvoření podmnožin se pro kždý stv podmnožiny, který náleží podmnožině prohledjí prvidl ve tvru p q R, kde Σ. Pokud jeden ze stvů podmnožiny odpovídá stvu p, pk se vytvoří prvidlo, kde je stv p nhrzen celou touto podmnožinou. Pokud pro symol existuje více prvidel vyhovujících pro p, pk se výstupní stvy q slučují vytvoří nový stv. Pokud je jeden prvek z této podmnožiny shodný s některým koncovým stvem M, pk je tto podmnožin oznčen jko koncový stv. Algoritmus 3 determinizce s vytvářením nedostupných stvů Vstup: M = (Q, Σ, R, s, F) - ez ε-přechodů Výstup: M d = (Q d, Σ, R d, s d, F d ) 1: Q d := {Q : Q Q, Q }; 2: R d := ; 3: for ech Q Q d nd Σ do egin 4: Q := {q : p Q, p q R}; 5: if Q = then R d := R d {Q Q }; 6: end for 7: s d := {s}; 8: F d := {F : F Q d, F F = }. Druhý lgoritmus 4 postupuje ve všech možných konfigurcích reálného utomtu. Vznikjí tedy pouze dostupné stvy nutné pro přirozené chování utomtu. Zároveň nejsou vytvářen žádná redundntní dt. Definici dostupného stvu přikládám níže. Definice 23. Nechť M = (Q, Σ, R, s, F ) je konečný utomt. Stv je dostupný, pokud existuje pro který pltí Jink q je nedostupný. q Q w Σ *, sw * q. 15
Algoritmus 4 determinizce s vytvářením pouze dostupných stvů Vstup: M = (Q, Σ, R, s, F) - ez ε-přechodů Výstup: M d = (Q d, Σ, R d, s d, F d ) - ez nedostupných stvů 1: s d := {s}; Q new := {s d }; 2: R d := ; Q d := ; F d := ; 3: repet 4: Q Q new ; Q new := Q new {Q }; Q d := Q d {Q }; 5: for ech Σ do egin 6: Q := {q : p Q, p q R}; 7: if Q then R d := R d {Q Q }; 8: if Q Q d { } then Q new := Q new {Q } 9: end for 10: if Q F = then 11: F d := F d {Q } 12: end if 13: until Q new =. Následuje jednoduchá ukázk odstrnění nedeteminismu. Avšk, tento princip je smozřejmě využitelný i u složitějších utomtů s výšší mírou nedeterminismu. Příkld 14. Nechť M = (Q, Σ, R, s, F ) je konečný utomt neoshující žádná prvidl s ε-přechody, který je definován Q = {s, q, r, f}, Σ = {, }, s těmito prvidly v množině prvidel R s q, s r, q r, q f, r f, pk ve stvu q vzniká nedeterminismus, jelikož lze pomocí symolu, formálně pomocí konfigurce q přejít do více než jedné dlší konfigurce. Konkrétně do r či f. Tento konečný utomt M je vyorzen n orázku 2.6. q strt s r f Orázek 2.6: Nedeterministický konečný utomt V následujícím textu udu demonstrovt odstrnění tohoto nedeterminismu ez vytváření nedostupných stvů pomocí lgoritmu 4. V kždém průchodu cyklu lgoritmu se zprcovává jeden stv utomtu z množiny stvů ke zprcování. Při prvním průchodu se zprcovává inicilizční stv. Následně se pro kždý symol prohledávjí prvidl ve tvru 16
p q R, kde p je zprcovávný stv zprcovávný symol. Pokud je lespoň jedno tkové prvidlo nlezeno, vytvoří se nové prvidlo. Zde může při více výskytech vstupní části p dojít ke slučování stvů ve výstupní části q. Pokud je ve zprcovávném stv osžen jeden z koncových stvů (zprcovávný stv se může skládt z více stvů z důvodu slučování stvů), pk je zprcovávný stv vložen mezi koncové stvy nového utomtu M d. Pokud je front stvů ke zprcování prázdná, pk lgoritmus končí. Pro tento příkld lgoritmus zčíná zprcovávt počáteční stv s. Algoritmus nlezne prvidl pro kždý ze symolů, tedy pro vstupní část ve tvru s i s. Vytvoří prvidl výstupní stvy q, respektive r zřdí do fronty ke zprcování. Dále se zprcovává stv q. Zde dochází k nedeterminismu pro vstupní část q jsou nlezeny dv výstupní stvy r f. Dochází tedy ke sloučení těchto stvů stv r f je zřzen do fronty ke zprcování. Podoně lgoritmus pokrčuje i pro osttní stvy r, r f f. Jelikož už není vytvořen žádný nový stv, který y mohl ýt zprcován, lgoritmus následně končí. Celý průěh lgoritmu je zznmenán v tulce 2.5, výsledný utomt je grficky zorzen n orázku 2.7. Průchod Zprcovávný stv Vytvořené prvidl Stvy ke zprcování 1 s s q, s r q, r 2 q q r f r f 3 r r f f 4 r f r f f 5 f Tulk 2.5: Průchody lgoritmu nedeterminizovným utomtem q strt s {r, f} f r Orázek 2.7: Trnsformovný deterministický konečný utomt 17
2.3.3 Dlší typy konečných utomtů V této kpitole udou stručně vysvětleny dlší dv typy konečných utomtů - úplný determinizovný konečný utomt doře specifikovný konečný utomt. Úplný determinizovný konečný utomt má definovný výstupní stv q pro kteroukoliv dvojici vstupní části prvidl p, kde p q R, p Q, Σ. Následuje formální definice úplného determinizovného konečného utomtu. Definice 24. Nechť M = (Q, Σ, R, s, F ) je determinizovný konečný utomt. M je úplný, pokud pro liovolné p Q, Σ existuje právě jedno prvidlo p q R pro nějké q Q. Jink M je neúplný. Příkld úplného deterministického konečného utomtu je uveden n orázku 2.8. Tento utomt je uprvený podle prvidel pro vytvoření úplného determinizovného konečného utomtu. Zákldem je determinizovný konečný utomt 2.7 z minulé podkpitoly 2.3.2. Dále přikládám lgoritmus 5 podle kterého je možné tento utomt vytvořit., q, q flse strt s {r, f} f r Orázek 2.8: Úplný deterministický konečný utomt 18
Algoritmus 5 vytvoření úplného determinizovného konečného utomtu Vstup: M = (Q, Σ, R, s, F) Výstup: M c = (Q c, Σ, R c, s, F) 1: Q c := Q {q flse }; 2: R c := R {q q flse : Σ, q Q c, q p R, p Q}. Posledním typem jednorozměrného konečného utomtu, který v této práci ude vysvětlen je doře specifikovný konečný utomt. Pro vytvoření tohoto utomtu je tře zvit konečný utomt ε-přechodů provést determinizci. Tím ude zjištěno, že utomt neude oshovt nedostupné stvy. Dále je nutné utomt zvit neukončujících stvů převést ho n úplný determinizovný konečný utomt. Níže je přiložen definice ukončujícího stvu. Definice 25. Nechť M = (Q, Σ, R, s, F ) je deterministický konečný utomt. Stv q Q je ukončující, pokud existuje řetězec w Σ *, pro který pltí: qw * f, f F. Jink q je neukončující. Po splnění všech těchto podmínek vzniká doře specifikovný konečný utomt. Avšk i tento utomt oshuje právě jeden neukončující stv q flse. 19
Kpitol 3 Dvourozměrné jzyky konečné utomty Následující kpitol shrnuje pozntky potřené k pochopení zákldních principů dvoudimensionálních jzyků utomtů. Zoecňuje principy jednorozměrných jzyků do dvou rozměrů. Seznmuje s regulárními jzyky ve dvou rozměrech. Předstvuje zákldní typy dvoudimensionálních utomtů s důrzem n teselční utomt, n který je následně nvázán kpitol 4 vysvětlující proces determinizce nd tímto utomtem. 3.1 Zoecnění principů pro dv rozměry Podsttou dvourozměrných jzyků je zoecnění konceptů technik teorie formálních jzyků do dvou dimenzí [2]. Dvourozměrné jzyky zvádí nový pojem, kterým je orz. Jedná se o řetězec zoecněný z jednorozměrných jzyků z kpitoly 2 do dvou rozměrů. Orz tedy reprezentuje dvourozměrný řetězec. Definice 26. Dvourozměrný řetězec (neo tké orz) nd ecedou Σ je dvourozměrné pole elementů z ecedy Σ. Množin všech dvourozměrných řetězců nd ecedou Σ je znčen Σ **. Dvourozměrný jzyk nd ecedou Σ je podmnožinou Σ ** [5]. Nechť existuje orz p, kde p Σ **, pk l 1 (p) znčí počet řádků p l 2 (p) znčí počet sloupců p. Dvojice l 1 (p) l 2 (p) definuje velikost p. Existuje jediný orz s velikostí 0 0, který je oznčován jko prázdný orz, Λ [4]. Orzy s velikostí 0 n, n 0, kde n > 0, nejsou definovány. Množinu všech orzů o velikosti m n, kde m, n > 0, nd ecedou Σ oznčujeme jko Σ m n [2]. 20
pk Dále, nechť p je orz. Jestliže i, j jsou definovány znčí symol n souřdnicích i, j orzu p. 0 i l 1 (p) 0 j l 2 (p), p(i, j) neo-li p i,j Příkld 15. Nechť Σ = {}, dvoudimensionální jzyk reprezentovný množinou všech orzů oshujících pouze symol, které jsou definovány dvěmi řádky lze ýt zpsán L = {p p Σ ** l 1 (p) = 2} [5]. Grficky lze některé z těchto orzů znázornit podle orázku 3.1. Orázek 3.1: Ukázk prvních třech orzů dvoudimensionálního jzyk L Dvoudimensionální řetězce (orzy) definují sdu opercí. První z této sdy opercí pro orz p je operce ^p. Jestliže p definuje svojí velikost jko pk se velikost ^p rovná m n, (m + 2) (n + 2), kdy po okrjích orzu p je přidán speciální symol znčící hrnici orzu [5]. Tento speciální symol je identifikován pomocí znku #, kde # Σ. Ukázk operce ^p pro orz p je vyorzen n orázku 3.2. # # # # # # # # # # # # # # # # Orázek 3.2: Orz p následné provedení operce ^p 21
Dlšími dvěm opercemi, které udou v tomto textu prezentovány jsou řádková sloupcová konktennce [5]. Nechť p q jsou dv dvourozměrné řetězce nd ecedou Σ kde p k,l q m,n, k, l, m, n > 0. Tyto řetězce jsou vyorzeny n orázku 3.3. p = p 1,1. p k,1 p 1,l.... q = p k,l q 1,1. q m,1... q 1,n. q m,n Orázek 3.3: Grfická ilustrce orzů p q Řádková konktennce nd řetězci p, q je možná pouze pokud l = n sloupcová konktennce je možná pouze pokud k = m. Ukázky oou těchto konktenncí jsou ilustrovány n orázcích 3.4, respektive 3.5. p q = p 1,1. p k,1 q 1,1. q m,1...... p 1,l. p k,l q 1,n. q m,n Orázek 3.4: Řádková konktennce orzů p q p q = p 1,1. p k,1 p 1,l q 1,1..... p k,l q m,1... q 1,n. q m,n Orázek 3.5: Sloupcová konktennce orzů p q Jestliže dochází ke konktennci liovolného neprázdného orzu prázdného orzu Λ, pk výsledek je vždy definován Λ se v tomto přípdě chová jko neutrální prvek [5]. 22
Řádková sloupcová konktennce jsou kromě dvoudimensionálních řetězců plikovtelné i n dv dvoudimensionální jzyky. Definice 27. Nechť L 1 L 2 jsou dvoudimensionální jzyky nd ecedou Σ. Řádková konktennce jzyků L 1 L 2, L 1 L 2, je definován L 1 L 2 = {p q p L 1 q L 2 } [5]. Definice 28. Nechť L 1 L 2 jsou dvoudimensionální jzyky nd ecedou Σ. Sloupcová konktennce jzyků L 1 L 2, L 1 L 2, je definován L 1 L 2 = {p q p L 1 q L 2 } [5]. Pomocí itercí řádkových neo sloupcových konktenncí nd dvoudimensionálním jzykem lze získt uzávěr dné konktennce nd dným dvoudimensionálním jzykem [5]. Definice 29. Nechť L je dvourozměrný jzyk. Sloupcový uzávěr L je definován L 0 = Λ, L 1 L * = i=0 Li = L, L * = L L(n 1). Definice 30. Nechť L je dvourozměrný jzyk. Řádkový uzávěr L je definován L * = i=0 Li L 0 = Λ, L 1 = L, L * = L L (n 1). Příkld 16. Nechť L je jzyk nd ecedou Σ. Pk L ** lze definovt pomocí konktenncí L ** = (L * 3.2 Regulární výrzy jzyky ) *. Nechť Σ je liovolná eced, pk prázdný jzyk, kždý jzyk { }, kde Σ, jsou nzývány tomické jzyky nd ecedou Σ [5]. Množin regulárních opercí, které lze nd tomickými jzyky plikovt, je R = {,, *, *,,, c }. Jzyk nd ecedou Σ je regulární, pokud ho lze získt z nějkého tomického jzyk pomocí konečně mnoh plikcí opercí z R. Regulární výrz je pk předpis, který udává, jkým způsoem je dný jzyk pomocí regulárních opercí z tomických jzyků získán [2]. Které operce jednotlivé operátory z množiny R znčí je uvedeno v tulce 3.1. Definice 31. Regulární výrz nd ecedou Σ je rekurzivně definován 1. kždé Σ jsou regulární výrzy 2. Nechť α β jsou regulární výrzy, pk (α) (β), (α) (β), c (α), (α) (β), (α) (β), (α)*, (α)* jsou regulární výrzy [5] 23
Kždý regulární výrz nd ecedou Σ znčí dvoudimensionální jzyk nd ecedou Σ. Definice 32. Dvoudimensionální jzyk L Σ ** je regulární, jestliže existuje regulární výrz nd Σ, který jej znčí. Operátor (α) (β) (α) (β) c (α) (α) (β) (α) (β) (α) * (α) * Význm operátoru znčí sjednocení jzyků α β znčí průnik jzyků α β doplněk jzyk α znčí řádkovou konktennci α β znčí sloupcovou konktennci α β znčí řádkovou iterci α znčí sloupcovou iterci α Tulk 3.1: Operátory nd regulárními výrzy [2] Příkld 17. Nechť Σ = {, }, pk regulární výrz ((( ) * ) (( )* ))* znčí jzyky vzhledu "šchovnice" se sudou délkou strn. Dv tkové příkldy orzů znázorňuje orázek 3.6. Orázek 3.6: Grficky znázorněné orzy vyhovující regulárnímu výrzu 24
3.3 Dvourozměrné konečné utomty Tto podkpitol popisuje dv zákldní typy dvoudimensionálních konečných utomtů, konkrétně čtyřcestný teselční. Teselčnímu utomtu je věnován větší pozornost vzhledem k jeho determinizci v kpitole 4. Dvoudimensionální konečný utomt čte dvourozměrnou pásku n zákldě vnitřních prvidel, které jsou nzývány trnsitivní funkce, se po této pásce pohyuje. Podoně jko jednorozměrný utomt, dvourozměrný utomt iniciuje svojí činnost inicilizčním stvem postupně zprcovává vstupní pásku. O tyto typy utomtů oshují kceptující i odmítjící stv (stvy) pro přijmutí či odmítnutí dného orzu. 3.3.1 Čtyřcestný utomt Dvoudimensionální utomt, rozšiřující klsický dvoudimensionální utomt, rozeznává řetězce pohyem ve čtyřech směrech vlevo, vprvo, nhoru dolů. Definice 33. Nedeterministický (deterministický) čtyřcestný konečný utomt, znčený jko 4NFA (4DFA), je sedmice A = (Σ, Q,, q 0, q, q r, δ) kde Σ je vstupní eced Q je konečná množin stvů = {R, L, U, D} je množin směrů pro pohy utomtu q 0 je inicilizční stv q, q r Q je "kceptující", respektive "odmítjící" stv δ : {q, q r } Σ 2 Q (δ : {q, q r } Σ Q ) je trnsitivní funkce [5]. Jedná se o model konečného stvového řízení pomocí Q, pro jednorozměrné utomty popsáno v kpitole 2.3, který čte vstupní orz. Pohy čtecí hlvy je ovlivňován trnsitivní funkcí, která rozhoduje km se utomt dále n vstupním orze ude pohyovt [2]. U tohoto typu utomtu je trnsitivní funkci předán ktuální stv, ktuální symol pozice n které se nchází ve vstupním orzu výstupem trnsitivní funkce je nový stv pro konečné stvové řízení směr, kterým se n vstupním orzu čtecí hlv ude pohyovt. Pokud utomt nrzí n stv q neo q r, pk utomt zství, protože pro tyto stvy, podle definice čtyřcestného konečného utomtu, nejsou definovány žádné trnsitivní funkce, které y pro dlší pohy utomtu mohly ýt použity. Jestliže utomt nrzil n stv q, pk je tento vstupní orz přijt. Pokud nrzil n stv q r, pk je orz odmítnut. Automt prcuje nd vstupním orzem p, nd kterým yl proveden operce ^p prezentován v podkpitole 3.1. Pk utomt ví, kdy se nchází n okrji vstupního orzu utomticky se vrátí zpět do p v následujícím kroku. 25
Ukázkové kroky čtyřcestného utomtu jsou grficky vyorzeny n orázku 3.7. t 1 t 2 t 3 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Orázek 3.7: Ukázk pohyu čtyřcestného utomtu 3.3.2 Teselční utomt Předchozí utomt se pohyovl po vstupním orzu sekvenčně, kdy při kždém kroku zprcovl pouze jeden symol podle tohoto symolu se n vstupní pásce přesunul v jednom směru. Teselční utomt ptří do skupiny celulárních utomtů. U celulárních utomtů lze vstupní pásku chápt jko pole uňek, kde kždá tto uňk v kždém kroku může měnit svůj stv podle svého okolí. Kroky, které celulární utomt provádí jsou diskrétní. Nrozdíl od čtyřcestného utomtu je možné zprcovávt více uňek v jednom kroku. Jk je zmíněno výše, teselční utomt ptří do skupiny celulárních utomtů. Provádí tedy diskrétní kroky, všk při kždém kroku nemění hodnoty všech uňek. Teselční utomt prochází vstupní pásku digonálně podle předchozí zprcovné digonály, která je částečným okolím ktuální digonály, sociuje všechny stvy ktuálně zprcovávné digonály součsně. Kždá uňk má ve svém okolí z předchozí digonály dv zprcovávné stvy, stv "nd uňkou" stv "vlevo od uňky". Následně je této uňce přiřzen stv podle trnsitivní funkce, která je zorzen v definici níže [5]. Definice 34. Nedeterministický (deterministický) dvoudimensionální teselční utomt, znčený jko 2OTA (2-DOTA), je pětice A = (Σ, Q, q 0, F, δ) kde Σ je vstupní eced Q je konečná množin stvů q 0 Q je inicilizční stv, F Q je množin kceptujících stvů δ : Q Q Σ 2 Q (δ : Q Q Σ Q) je trnsitivní funkce Jelikož se, nrozdíl od čtyřcestného utomtu, teselční utomt nemůže liovolněkrát vrátit n některou z uňěk, celý ěh utomtu A n orzu ^p má konstntní počet kroků. Těchto kroků je l 1 (p) + l 2 (p) 1. 26
V čse t = 0 jsou všechny pozice prvního řádku sloupce ^p sociovány inicilizčním stvem. V čse t = 1 je přečten první uňk orzu p, p(1, 1), je jí přiřzen stv podle inicilizční trnsitivní funkce ve tvru δ(q 0, q 0, p(1, 1)). V čse t = 2 jsou zprcovány uňky n pozici (1, 2) (2, 1) je jim přiřzen stv podle odpovídjících trnsitivních funkcí. Automt dále pokrčuje po všech digonálách zprcovává tímto způsoem všechny stvy v digonále. V čse t = k, kde k = i + j 1, jsou součsně sociovány všechny stvy pro pozice (i, j). Automt A rozeznává přijímá orz, jestliže stv sociovný n pozici (l 1 (p), l 2 (p)) odpovídá konečnému stvu. N orázku 3.8 jsou zorzeny první tři kroky teselčního utomtu včetně inicilizčního kroku t = 0 (inicilizční stv q 0 je reprezentován stvem I), v dlších krocích jsou pk zvýrzněny stvy, které v dném kroku udou zprcovávány. t 0 t 1 t 2 # I # I # I # I # I # I # I # I # I # I # I # I # I # I # I # I # # I # # I # # I # I # # # I # I # # # I # I # # # I # # # # # I # # # # # I # # # # Orázek 3.8: Ukázk pohyu teselčního utomtu 27
Kpitol 4 Determinizce teselčního utomtu Tto kpitol seznmuje s prolémy determinizce dvoudimensionálního teselčního konečného utomtu, rozeírá tyto prolémy následně nízí řešení v podoě dvou lgoritmů. První lgoritmus generuje nedostupné stvy trnsitivní funkce, druhý lgoritmus nikoliv. 4.1 Rozor nedeterminismu Trnsitivní funkce má u nedeterministického teselčního utomtu tvr δ : Q Q Σ 2 Q [5]. ztímco u deterministického teselčního utomtu má tvr δ : Q Q Σ Q [5]. Nedeterminismus u teselčních utomtů vzniká, pokud se pro stejnou vstupní část trnsitivní funkce vyskytuje více různých výstupních částí. Počet těchto výstupních částí pro některou trnsitivní funkci může ýt ž 2 Q, kde 2 Q znčí potenční množinu oshující všechny podmnožiny množiny Q. Toto chování je pro jednoznčnost utomtu nepřijtelné. Příkld nedeterminismu u teselčních utomtů je prezentován n příkldu níže. Příkld 18. Nechť M = (Q, Σ, δ, q 0, F ) je nedeterminizovný konečný dvoudimensionální teselční utomt definovný Q = {0, 1, 2, 3, 4, 5, 6, 7, 8}, Σ = {, }, q 0 = {0}, F = {5}. s množinou trnsitivních funkcí δ oshující trnsitivní funkce δ(0 0 ) 1 [1], δ(0 0 ) 2 [2]. pk je teselční utomt nedeterministický, jelikož pro vstupní část δ(0 0 ) existují dvě výstupní části definovné stvy 1 2. 28
Při výskytu více výstupních částí pro zprcovávnou vstupní část trnsitivní funkce je tře tyto výstupní části slučovt stejně jko u jednorozměrného konečného utomtu. Buňk teselčního utomtu smí oshovt ž n sloučených či nesloučených stvů, kde n znčí počet vstupních symolů v množině vstupních symolů Σ dného utomtu. Počet těchto stvů v uňce závisí n tom, zd-li existují pro tyto symoly zprcovávné stvy vyhovující prvidl. Ukázk je demonstrován níže. Příkld 19. Nechť M = (Q, Σ, δ, q 0, F ) je konečný nedeterminizovný dvoudimensionální teselční utomt z příkldu 18. Kromě trnsitivních funkcí v množině trnsitivních funkcí δ z tohoto příkldu oshuje tto množin nvíc ještě tyto trnsitivní funkce δ(1 0 ) 3 [3], δ(1 0 ) 4 [4], δ(0 1 ) 5 [5], δ(0 1 ) 6 [6], δ(0 1 ) 7 [7], δ(0 2 ) 8 [8], δ(0 2 ) 9 [9]. pk při zprcování první uňky vzniká při prvním (inicilizčním) kroku trnsitivní funkce δ(0 0 ) 1 2 [1, 2], jelikož neexistuje žádná vyhovující inicilizční trnsitivní funkce pro symol, ude v prvním inicilizčním kroku vytvořen pouze tto jedn trnsitivní funkce. Z trnsitivní funkcí je uvedeno z jkých trnsitivních funkcí z původního nedeterministického teselčního utomtu vznikl. Zprcovávná uňk (i, j) uchovává tento výstupní stv pro symol. Pokud y existovlo vhodné inicilizční prvidlo pro symol, pk y ylo nutné v uňce uchovávt kromě stvu pro symol i stv pro symol. Při druhém průchodu je zprcováván uňk (i, j), kde uňk (i 1, j) oshuje stv 0, uňk (i, j 1) oshuje stv 1 2. Pro uňku (i, j) je nutné pro všechny symoly projít všechny komince krtézského součinu stvů v uňkách (i 1, j) (i, j 1). Jedná se tedy o komince 0 1, 0 2. Všechny úplné vstupní části trnsitivních funkcí pro zprcovávnou uňku (i, j) v nedeterminizovném utomtu jsou δ(0 1 ) [10], δ(0 2 ) [11], δ(0 1 ) [12], δ(0 2 ) [13]. výstupní části prvních dvou vstupních částí [10] [11] z původního nedeterminizovného utomtu udou následně v determinizovném utomtu tvořit jeden výstupní stv. Pokud 29
v původním nedeterministickém utomtu existují oě trnsitivní funkce s dnou vstupní částí [10] [11], pk dochází ke sloučení výstupních částí těchto funkcí výsledný stv ude uložen v uňce (i, j) jko stv pro symol. Odoně je nutné proces opkovt i pro vstupní části [12] [13] pokud udou i tyto vstupní části v původním nedeterministickém utomtu existovt, pk se jejich výstupní stv (sloučený či nesloučený podle počtu výskytů trnsitivních funkcí) uloží do téže uňky jko stv pro symol. Jk je prezentováno dříve, uňk tedy může uchovávt více stvů pro různé symoly. Vstupní části trnsitivních funkcí [10] ž [13] se v množině trnsitivních funkcí δ v původním nedeterminizovném utomtu vyskytují všechny. Dochází ke slučování všech výstupních stvů pro dný symol do determinizovného utomtu se přidávjí trnsitivní funkce δ(0 1 2 ) 4 7 [4, 7], δ(0 1 2 ) 5 6 8 [5, 6, 8]. Buňk (i, j) uchovává pro jednotlivé symoly tyto stvy : 4 7, : 5 6 8. Stejným způsoem se provádí zprcování uňek i dále pro celý teselční utomt. Pro druhou uňku zprcovávnou v tomto kroku (i, j), kde uňk (i 1, j) oshuje stv 1 2, uňk (i, j 1) oshuje stv 0, vznikjí do determinizovného teselčního utomtu trnsitivní funkce δ(1 2 0 ) 3 [3], δ(1 2 0 ) 4 [4]. V následujícím kroku utomtu y pro zprcovávnou uňku (i, j), kde uňk (i 1, j) oshuje stv 0, uňk (i, j 1) oshuje stvy 4 7 pro symol, uňk (i, j 1) oshuje stvy 5 6 8 pro symol, yly všechny úplné vstupní části trnsitivních funkcí v původním nedeterminizovném teselčním utomtu δ(0 4 ), δ(0 7 ), δ(0 5 ), δ(0 6 ), δ(0 8 ), δ(0 4 ), δ(0 7 ), δ(0 5 ), δ(0 6 ), δ(0 8 ). celý postup popisovný v tomto příkldu je znázorněn n orázku 4.1. Pokud je při determinizci vytvořen nová trnsitivní funkce je jeden z výstupních stvů shodný s některým stvem z původní množiny koncových stvů, pk je tento výstupní stv nově vytvořené trnsitivní funkce přidán do koncových stvů determinizovného teselčního utomtu. 30
q 0 0 q 0 0 q 0 0 q 0 0 # # # # p 0,0 p 0,1 p 0,2 p 0,3 q 0 # 0 p 1,0 1 2 4 7 5 6 8 q 0 # 0 p 2,0 3 4 q 0 # 0 p 3,0 Orázek 4.1: Postup při odstrňování nedeterminismu Příkld 20. Nechť M = (Q, Σ, δ, q 0, F ) je konečný determinizovný dvoudimensionální teselční utomt z příkldu 19. Při determinizci yl vytvořen trnsitivní funkce δ(0 1 2 ) 5 6 8. Původní nedeterministický utomt má definovnou množinu koncových stvů F = {5}. Nový výstupní stv trnsitivní funkce ( tedy i nový stv determinizovného utomtu) má jeden ze stvů shodný s některým ze stvů z původní množiny koncových stvů nedeterministického utomtu proto ude stv 5 6 8 oznčen jko koncový stv determinizovného utomtu 4.2 Algoritmy determinizce Následuje stručné vysvětlení syntktických konstrukcí principů jednotlivých lgoritmů determinizce 6 7. Algoritmus 6 generuje trnsitivní funkce stvy, které neudou nikdy použity z důvodu redundntní informce není vhodný. Pro implementci v přiložené plikci, která je popsán v kpitole 5, je využit lgoritmus 7, který nedostupné stvy trnsitivní funkce negeneruje. 4.2.1 Algoritmus s nedostupnými stvy Tento typ lgoritmu je prezentován lgoritmem 6. Příkld vstupu výstupu po provedení procesu determinizce pomocí toho lgoritmu je prezentován v příkldu 21. Před zhájením lgoritmu je do množiny stvů ke zprcování Q proc vložen inicilizční stv. Hlvní smyčk je se provede vzhledem ke své konstrukci vždy minimálně jednou pro inicilizční typ trnsitivní funkce. Ve vnitřní logice lgoritmu se přidávjí stvy ke zprcování. 31
Pokud je množin stvů ke zprcování prázdná, pk lgoritmus končí. Z množiny stvů ke zprcování Q proc se vyjme stv v proměnné Q current přichází dále ke zprcování. Tento stv se vloží do množiny determinizovných (výsledných) stvů Q d. Jelikož jsou trnsitivní funkce ve tvru δ : (Q 1 Q 2 ) Q 3, pk může ýt zprcovávný stv uď n pozici Q 1 neo Q 2. Do proměnných Q top Q left se tedy uloží vyhovující dvojice se zprcovávným stvem symolem v konstrukci pro kždý symol z množiny vstupních symolů Σ. V následujících konstrukcích se prochází proměnné Q top Q left vyhledávjí se výstupní části trnsitivních funkcí. Dále se vytváří trnsitivní funkce s dným výstupním stvem. Pokud nlezený výstupní stv ještě neyl zprcovný (není osžen v množině stvů Q d ), pk se vloží do množiny stvů ke zprcování Q proc. Jestliže je v tomto stvu (může dojít ke sloučení stvů, výstupních stvů může ýt více) osžen některý s původních koncových stvů nedeterminizovného utomtu, pk je tento výstupní stv vložen do koncových stvů determinizovného utomtu. Algoritmus 6 determinizce teselčního utomtu s nedostupnými stvy funkcemi Vstup: M = (Q, Σ, δ, q 0, F) Výstup: M d = (Q d, Σ, δ d, q 0, F d ) - s nedostupnými stvy 1: repet 2: Q proc := unique(q proc ); 3: Q current := Q proc ; 4: Q proc := Q proc Q current ; 5: Q d := Q d Q current ; 6: for ech Σ do egin 7: Q top := {Q 1 : Q 2 Q current, δ(q 1 Q 2 ) Q 3 ; 8: Q left := {Q 2 : Q 1 Q current, δ(q 1 Q 2 ) Q 3 ; 9: for ech top Q top do egin 10: Q out := {Q 3 : Q 1 top, Q 2 Q current, δ(q 1 Q 2 ) Q 3 }; 11: δ d := δ d δ(top Q current ) Q out ; 12: if Q out Q d then Q proc := Q proc {Q out }; 13: if Q out F then F d := F d {Q out } 14: end for 15: for ech left Q left do egin 16: Q out := {Q 3 : Q 1 Q current, Q 2 left, δ(q 1 Q 2 ) Q 3 }; 17: δ d := δ d δ(q current left ) Q out ; 18: if Q out Q d then Q proc := Q proc {Q out }; 19: if Q out F then F d := F d {Q out } 20: end for 21: end for 22: until Q proc = ; 23: δ d := unique(δ d ); 24: F d := unique(f d ). 32
4.2.2 Algoritmus pouze s dostupnými stvy funkcemi Tento typ lgoritmu je prezentován lgoritmem 7. Příkld vstupu výstupu po provedení procesu determinizce pomocí tohoto lgoritmu je prezentován v příkldu 21. Hlvní smyčk lgoritmu se provede vždy minimálně jednou pro inicilizční stv, který musí ýt vždy součástí utomtu pro spuštění procesu determinizce. Množin stvů Q proc reprezentuje ktuálně zprcovávnou digonálu, respektive ktuální zprcovávný krok teselčního utomtu. Před zprcováním kždé digonály se stvy z digonály Q proc vkládjí do množiny determinizovných stvů Q d. Buňky v digonále se zprcovávjí po dvojicích, přičemž před zprcováním kždé digonály jsou n zčátek konec množiny vloženy uňky oshující inicilizční stv, y ylo dodrženo přirozené chování postupu utomtu. Jednotlivé zprcovávné dvojice se mpují do proměnné Q mp z důvodu testování konečné podmínky lgoritmu. Při procházení dvojic uňek digonály (i 1, j) (i, j 1) se vytváří krtézský součin všech stvů těchto uňek. Tyto uňky mohou oshovt sloučené stvy zároveň více stvů pro různé symoly. Následně se dvojice tohoto krtézského součinu prochází pro kždý symol Σ. Pokud je nlezen vyhovující trnsitivní funkce (vstupní část tvoří právě zprcovávné stvy krtézského součinu právě zprcovávný vstupní symol) v původním nedeterminizovném teselčním utomtu, pk se vytvoří nová trnsitivní funkce do determinizovného teselčního utomtu výstupní stv (stv pro uňku (i, j)) pro dný symol se přidá do množiny stvů Q step. Množin Q step reprezentuje uňku utomtu. Pokud se jeden z výstupních stvů (může kvůli slučování stvů oshovt těchto stvů více) shoduje s některým z původních koncových stvů, pk je přidán celý tento výstupní stv do koncových stvů determinizovného utomtu. Po dokončení procházení krtézského součinu zprcovávné dvojice je množin Q step reprezentující uňku vložen do proměnné Q next, která reprezentuje následující digonálu, respektive následující krok teselčního utomtu. Jkmile již nelze v ktuálním kroku zprcovt žádnou dlší dvojici, pk digonál Q next, která ude zprcováván v příštím kroku oznčen jko ktuálně zprcovávná lgoritmus pokrčuje v následujícím průchodu se zprcováváním této nové digonály. Jednotlivé dvojice se mpují následně se před zprcováváním dlší digonály kontroluje toto mpování. Jestliže všechny dvojice v digonále, která má ýt zprcováván v příštím kroku, jsou již nmpovné (testuje se s přidáním dočsných uněk oshující inicilizční stvy n zčátek konec digonály), pk nemá význm provádět zprcování této digonály, jelikož y nevznikly žádné nové trnsitivní funkce ni stvy lgoritmus lze tedy ukončit ještě v tomto průchodu lgoritmu. Příkld 21. Nechť M = (Q, Σ, δ, q 0, F ) je nedeterminizovný konečný teselční utomt definovný Q = {0, 1, 2, 3}, Σ = {}, q 0 = {0}, F = {1}, 33
s množinou trnsitivních funkcí δ oshující trnsitivní funkce δ(0 0 ) 1, δ(2 3 ) 1, δ(0 1 ) 2, δ(0 2 ) 2, δ(2 1 ) 2, δ(2 2 ) 2, δ(0 1 ) 3, δ(1 0 ) 3, δ(3 0 ) 3, δ(1 3 ) 3, δ(3 3 ) 3. pk po procesu determinizce z použití lgoritmu 6 vzniká determinizovný teselční utomt M 1 = (Q 1, Σ, δ 1, q 0, F 1 ) definovný Q 1 = {0, 1, 3, 2, 23, 12, 13}, Σ = {}, q 0 = {0}, F 1 = {1, 12, 13}, s množinou trnsitivních funkcí δ 1 oshující trnsitivní funkce δ(0 0 ) 1, δ(1 0 ) 3, δ(3 0 ) 3, δ(0 1 ) 23, δ(0 2 ) 2, δ(2 1 ) 2, δ(1 3 ) 3, δ(2 3 ) 1, δ(3 3 ) 3, δ(2 2 ) 2, δ(2 23 ) 12, δ(0 23 ) 2, δ(1 23 ) 3, δ(3 23 ) 3, δ(23 3 ) 13, δ(23 1 ) 2, δ(23 2 ) 2, δ(23 0 ) 3, δ(0 12 ) 23, δ(2 12 ) 2, δ(12 3 ) 13, δ(12 1 ) 2, δ(12 2 ) 2, δ(12 0 ) 3, δ(2 13 ) 12, δ(0 13 ) 23, δ(1 13 ) 3, δ(3 13 ) 3, δ(13 0 ) 3, δ(13 3 ) 3. Ztímco po provedení procesu determinizce pomocí lgoritmu 7 vzniká determinizovný teselční utomt M 2 = (Q 2, Σ, δ 2, q 0, F 2 ) definovný Q 2 = {0, 1, 23, 3, 2, 13, 12}, Σ = {}, q 0 = {0}, F 2 = {1, 13, 12}, s množinou trnsitivních funkcí δ 2 oshující trnsitivní funkce δ(0 0 ) 1, δ(0 1 ) 23, δ(1 0 ) 3, δ(0 23 ) 2, δ(23 3 ) 13, δ(3 0 ) 3, δ(0 2 ) 2, δ(2 13 ) 12, δ(13 3 ) 3, δ(2 12 ) 2, δ(12 3 ) 13, δ(3 3 ) 3, δ(2 2 ) 2. Je zřejmé, že první lgoritmus 6 vygenerovl mnohem více trnsitivních funkcí některé z nich neudou vzhledem k postupu utomtu nikdy použity. Tyto funkce jsou tedy nepotřené množství informcí vygenerovné prvním lgoritmem je redundntní. Při nevhodně zvoleném nedeterminizovném teselčním utomtu může dojít i k vytváření nedostupných stvů, to le není tento přípd. Jelikož druhý lgoritmus 7 kopíruje chování utomtu jeho průchody dvoudimensionálním řetězcem, ude vždy generovt pouze dostupné trnsitivní funkce stvy potřené k fungování utomtu. 34
Algoritmus 7 determinizce teselčního utomtu s dostupnými stvy funkcemi Vstup: M = (Q, Σ, δ, q 0, F) Výstup: M d = (Q d, Σ, δ d, q 0, F d ) - s dostupnými stvy 1: repet 2: Q d := Q d Q proc ; 3: Q proc := I Q proc I; 4: repet 5: Q top Q proc 6: Q proc := Q proc {Q top } 7: Q left := Q proc 8: Q mp := mp(q top, Q left ); 9: for ech top Q top do egin 10: for ech left Q left do egin 11: for ech Σ do egin 12: Q out := {Q 3 : Q 1 top, Q 2 left, δ d (Q 1 Q 2 ) Q 3 δ}; 13: if Q out then 14: δ d := δ d δ(top left ) Q out 15: Q step := Q step Q out ; 16: end if 17: if Q out F then F d := F d Q out ; 18: end for 19: end for 20: end for 21: Q next := Q next Q step ; 22: Q step = ; 23: until count(q proc ) > 1; 24: Q proc := Q next ; 25: Q next := ; 26: until mpcheck(q mp, Q proc ) 27: Q d := unique(q d ); δ d := unique(δ d ); F d := unique(f d ). 35
Kpitol 5 Aplikce Následující kpitol se zývá popisem výsledné plikce n determinizci konečného teselčního utomtu. Bude předstveno uživtelské rozhrní, zdůvodněn výěr progrmovcího jzyk popsán způso implementce. 5.1 Uživtelské rozhrní Zákldem progrmu je jednoduché funkční uživtelské rozhrní. Pro celý proces determinizce je zpotřeí nízký počet funkcí, které plikce nízí v uživtelském rozhrní s elegntním, jednoduchým přehledným designem. Při spuštění plikce se zorzí vodorovně rozdělené okno. Horní polovin vyorzuje ktuální hodnoty vstupního nedeterminizovného utomtu, dolní následně ktuální hodnoty výstupního determinizovného utomtu. Mezi těmito polovinmi se nchází tlčítko k zhájení procesu determinizce. Vstupní i výstupní utomt zorzuje tři zákldní komponenty teselčního utomtu stvy, symoly trnsitivní funkce. Všechny tyto komponenty jejich vyorzení udou prezentovány dále. Pokud je vstupní nedeterminizovný utomt prázdný, pk nelze spustit proces determinizce. Toto chování je indikováno nektivním tlčítkem Determinizovt uprostřed plikce. Ay ylo možné determinizci spustit, pk musí vstupní nedeterminizovný utomt oshovt nejméně jeden stv v množině stvů, který je zároveň oznčen jko inicilizční. N orázku 5.1 je pro úvodní předstvu vyorzeno uživtelské rozhrní plikce s ukázkovými dty utomtu. 5.1.1 Stvy Komponent stvů zhrnuje textové pole pro zdání názvu stvu, několik doplňujících možností pro specifikci stvu či filtrování stvů zásoník stvů pro rychlou orientci v již vložených stvech utomtu. Všechny tyto prvky rozhrní jsou pro větší přehlednost vyorzeny n orázku 5.3. Přidání stvu se provádí pomocí stisku tlčítk Přidt. Pokud je vstupní pole prázdné, pk nelze stv přidt, jelikož není pojmenovný. Pokud je zdán název stvu, který již v utomtu existuje, pk rovněž neude možné tento stv přidt. Tyto dvě možnosti, kdy nelze stv přidt jsou simulovány nektivním tlčítkem Přidt, které nelze v těchto situcích stisknout. Jestliže ude zdán název stvu, který se v utomtu ztím nevyskytuje, pk se tlčítko Přidt utomticky změní n ktivní uživteli tímto způsoem dává zpětnou vzu, že lze tento stv do utomtu přidt. Rekce tlčítk Přidt n různé vstupy v textovém poli je uveden n orázku 5.2. 36
Orázek 5.1: Ukázk uživtelského rozhrní plikce Před smotným přidáním stvu lze zvolit ze dvou možností, které udávjí vlstnosti dného stvu. První možností je zškrtnutí pole Inic. stv, v tom přípdě ude stv oznčen jko inicilizční. Pokud se už ude v utomtu jeden inicilizční stv vyskytovt, pk plikce nedovolí uživteli dlší inicilizční stv přidt simuluje toto chování znektivněním této možnosti. Druhou možností je oznčit vkládný stv jko koncový pomocí zškrtnutí voly Koncový stv, potom ude stv přidán jko koncový. N tuto možnost se omezení nevzthují užvtel smí definovt liovolný počet koncových stvů. Poněvdž může uživtel vložit chyný stv, lze tento stv smzt oznčením dného stvu v zásoníku stvů stisknutím tlčítk Smzt. Pokud není v zásoníku stvů vyrán žádný stv, pk se tlčítko Smzt utomticky znektivní. Nopk, tlčítko Smzt se utomticky zktivní jkmile ude oznčen některý ze stvů v zásoníku. Následující možnosti již nepřidávjí specifikce pro přidávný stv, všk nízí možnost filtrování již vložených stvů. Zde jsou n výěr tři možnosti. Zorzit Všechny stvy, Inicilizční stv či Koncové stvy. Aktuální výěr indikuje znektivnění dného tlčítk. 37
Jednotlivé prvky komponenty stvů ilustrovné n orázku 5.3: 1. Textové pole pro vložení názvu stvu 2. Tlčítko Přidt 3. Tlčítko Smzt 4. Zškrtávcí ox Inicilizční stv 5. Zškrtávcí ox Koncový stv 6. Filtr Všechny stvy 7. Filtr Inicilizční stvy 8. Filtr Koncové stvy 9. Zásoník vložených stvů Orázek 5.2: Rekce mezi vstupem v textovém poli tlčítkem Přidt 5.1.2 Vstupní symoly Komponent vstupních symolů nízí textové pole pro název symolu, který musí ýt jednoznkový tlčítk Přidt či Smzt. Funkčnost tlčítek Přidt Smzt je shodná s funkčností u komponenty stvů, nemá tedy smysl ji hlouěji rozeírt. Popis prvků komponenty vstupních symolů je prezentován níže, tyto prvky jsou ilustrovány n orázku 5.3. Jednotlivé prvky komponenty vstupních symolů: 10. Textové pole pro vložení názvu vstupního symolu 11. Tlčítko Přidt 12. Tlčítko Smzt 13. Zásoník vložených symolů 38
Orázek 5.3: Komponenty stvů symolů jejich popis 5.1.3 Trnsitivní funkce Komponent trnsitivních funkcí nízí možnost přidávt jednotlivé trnsitivní funkce. Skládá se ze čtyř výěrových polí pro specifikci trnsitivní funkce, tlčítek Přidt Smzt, možností pro filtrování trnsitivní funkce zásoníku trnsitivních funkcí. Pro přidání trnsitivní funkce je podle předpisu trnsitivní funkce δ : Q Q Σ Q nutné zdt dv vstupní stvy, vstupní symol výstupní stv, y tto trnsitivní funkce mohl ýt pomocí tlčítk Přidt přidán. Tyto stvy symol musí ýt nejdříve přidné v komponentě stvů, respektive symolů. Pokud ještě trnsitivní funkce v zásoníku trnsitivních funkcí neexistuje, pk ji lze do zásoníku přidt pomocí stisknutí tlčítk Přidt. Pokud již v zásoníku existuje, pk je tlčítko Přidt znektivněno uživteli není umožněno jej stisknout. Pokud je oznčen některá z trnsitivních funkcí v zásoníku, pk ji lze smzt pomocí tlčítk Smzt. Pokud není v zásoníku oznčen žádná, pk je tlčítko znektivněno. Popis všech prvků komponenty trnsitivních funkcí je popsán níže tyto prvku jsou ilustrovány n orázku 5.4. Jednotlivé prvky komponenty trnsitivních funkcí: 1. Pole pro výěr vstupního stvu (i 1, j) 2. Pole pro výěr vstupního stvu (i, j 1) 3. Pole pro výěr vstupního symolu 4. Pole pro výěr výstupního stvu (i, j) 5. Tlčítko Přidt 39
6. Tlčítko Smzt 7. Filtr Všechny trnsitivní funkce 8. Filtr Inicilizční trnsitivní funkce. Jedná se o funkce, které v jednom ze stvů vstupní části oshují inicilizční stv 9. Filtr Koncové trnsitivní funkce. Jedná se o funkce, ve kterých je výstupní stv stvem koncovým 10. Zásoník vložených trnsitivních funkcí Orázek 5.4: Komponent trnsitivních funkcí její popis 5.2 Implementce Aplikce je implementován v Jvě. Jv je ojektovně orientovný progrmovcí jzyk. Jedná se o velmi rozšířený jzyk v součsné doě tké o nejpoužívnější progrmovcí jzyk n světě. Největší výhodou Jvy je ezesporu její přenositelnost nezávislost n konkrétní pltformě. Tento jzyk je tké velice ezpečný co se týče z hledisk tvoření potenciálně neezpečných syntktických konstrukcí přetypování. Jzyk yl dále zvolen kvůli elegntnímu lehce čitelnému kódu. Syntxe Jvy je jednoduchá, jelikož součástí jzyk nejsou některé ze zákldních progrmovcích součástí jzyků C/C++, npř. preprocesor či ukztele. Implementce proíhl ve dvou částech. První část definuje nprogrmování vnitřní logiky reprezentováno hlvní třídou vnitřní logiky Controller. Tto část zhrnovl vytvoření optimálního rozhrní pro stvy, symoly trnsitivní funkce implementci procesu determinizce podle lgoritmu 7 z předcházející kpitoly. Druhou část definuje vytvoření grfického uživtelského rozhrní pro snzší komunikci mezi vnitřní logikou plikce uživtelem. Tto část je reprezentován hlvní grfickou třídou AppWindow. Oě tyto části jsou uzvřeny v hlvní třídě progrmu zvné Determiniztion. 40
5.2.1 Implementce vnitřní logiky Hlvní třídou vnitřní logiky je tříd Controller, která zjišťuje hlvní kontrolu nd progrmem. Uchovává informce o vstupním nedeterminizovném konečném utomtu i výsledném výstupním konečném determinizovném utomtu, jednotlivé informce o právě zprcovávném kroku teselčního utomtu informce o mpování dvojic. Zároveň je v této třídě implementován nejdůležitější funkce celého progrmu smotný proces determinizce jeho lgoritmus. Tříd Controller využívá pro uchování informcí o utomtu třídu Automton. Tříd Automton ukládá jednotlivé trnsitivní funkce do instnce třídy RuleStck jednotlivé symoly do instnce třídy SymolStck. Smyslem těchto tříd, RuleStck SymolStck, je pouze uschovt jednotlivé instnce Rule pro trnsitivní funkci, respektive Symol pro symol, nízet sdu opercí nd těmito instncemi, npř. vrátit množinu těchto instncí či tyto instnce seřdit. Třídy RuleStck SymolStck využívjí dědičnosti generické třídy ArryList<>. Tříd Symol reprezentuje jeden vstupní symol utomtu, kdy využívá konstruktoru s jediným prmetrem typu chr, symoly tedy mohou ýt pouze jednoznkové. Tříd Rule uchovává informce o trnsitivní funkci, která se skládá ze třech stvů, dvou vstupních jednoho výstupního, jednoho symolu. Této signtuře odpovídá i jediný konstruktor této třídy. Třídy Rule i Symol implementují generické rozhrní Comprle pro možnost využití seřzení pomocí sttické metody sort třídy Collections pro seřzení množiny symolů/trnsitivních funkcí. Pro implementci stvů utomtu je zvoleno odlišné řešení. Celkem ylo implementováno pět tříd pro zprcování stvů front těchto stvů. Všechny tyto třídy jsou přehledně zorzeny v tulce 5.1. Jelikož může dojít při procesu determinizce ke slučování výstupních stvů, pk je nutné prcovt s instncí třídy, která je schopn uchovávt více než jeden stv. Tříd vytvářející tyto instnce je nzýván StteSet. Tto tříd je výchozí třídou pro reprezentci stvu v utomtu. Jednotlivé stvy, které tříd StteSet uchovává jsou reprezentovány třídou Stte. Tříd Stte nízí dv konstruktory. První konstruktor přeírá jeden prmetr typu String, který reprezentuje název stvu jedná se o stv, který nemá funkci inicilizčního ni koncového stvu. Druhý konstruktor kromě prmetru String pro deklrování názvu stvu nízí možnost vytvořit inicilizční či koncový stv pomocí dlších prmetrů typu Role. Enumerce Role nízí dvě hodnoty INIT pro inicilizční stv, FINITE pro koncový stv. Jedn uňk teselčního utomtu může oshovt při determinizci více stvů z důvodu přítomnosti více symolů v utomtu. Z tohoto důvodu se v progrmu vyskytuje tříd StteQueue. Tříd StteQueue reprezentuje jednu uňku teselčního utomtu uchovává instnce třídy StteSet, tedy jednotlivé stvy. Tto tříd nízí množinu opercí nd uchovávnými instncemi stvů, npř. řzení stvů, odstrnění duplicit stvů či různé druhy odstrňování stvů z množiny. Zprcovávný krok teselčního utomtu lze vykreslit jko digonálu, kterou prezentuje tříd DigonlQueue. Tříd DigonlQueue uchovává instnce třídy StteQueue, tedy jednotlivé uňky teselčního utomtu stvy v nich. Tto tříd nízí tké sdu opercí nd množinou uchovávných instncí. Jednou z těchto opercí je vložení inicilizčního stvu n zčátek i konec fronty tk, y yl správně simulováno zprcování digonály 41
teselčním utomtem. Poslední třídou prcující s množinou stvů je tříd MpQueue. Tto tříd slouží k mpování dvojic testování podmínky pro ukončení lgoritmu determinizce, jestliže již nelze zprcovt nové dvojice v příštím kroku utomtu tím vytvořit nové trnsitivní funkce či nové stvy. Tříd Stte StteSet StteQueue DigonlQueue MpQueue Význm třídy Jednotlivý stv Set reprezentující stv utomtu Buňk teselčního utomtu Digonál teselčního utomtu Mpování zprcovných dvojic utomtu Tulk 5.1: Shrnutí tříd prcujících se stvy či s množinou stvů 5.2.2 Implementce grfického rozhrní Pro tvoru grfického uživtelského rozhrní jsou použity Jv knihovny AWT Swing. K rozvržení jednotlivých částí hlvního okn progrmu je použit především GridBgLyout, který dovoluje solutní kontrolu nd rozvržením. Sekundárně je pro jednodušší rozvržení použit BorderLyout. Pro zprcování událostí jsou použity třídy ActionListener pro tlčítk či KeyListener pro vstupní textové pole následné přepsání jejich metod. V tulce 5.2 jsou uvedeny zákldní třídy knihovny Swing pro tvoru prvků grfického uživtelského rozhrní. Jko hlvní třídu celého progrmu lze oznčit třídu Determiniztion dědící třídu Cnvs pro vytvoření uživtelského rozhrní. V této třídě se vytváří instnce hlvní logické třídy Controller pro vykonávání vnitřní logiky instnce třídy AppWindow dědící třídu JFrme definující hlvní okno plikce. Tříd AppWindow určuje specifické vlstnosti hlvního okn plikce, zejmén nstvení šířky výšky okn. Tříd MinPnel rozděluje hlvní okno progrmu n tři části. Horní dolní část okn plikce je vyhrzen pro vstupní, respektive výstupní utomt definovný grfickou třídou AutomtonPnel. Prostor v prostřední části je vytvořen pro tlčítko zhjující proces determinizce, Determinizovt. Tříd AutomtonPnel vyplňuje horní část svého přiděleného prostoru pomocí specifického ndpisu utomtu ( nedeterministický, deterministický ) zylou část pomocí komponent utomtu (stvů, symolů trnsitivních funkcí). Tyto komponenty mjí několik společných prvků, proto loky StteBlock, SymolBlock, RuleBlock reprezentující jednotlivé komponenty, dědí ze stejné strktní třídy AutomtPrt. Rozvržení tříd v hlvním okně plikce je pro přehlednost ilustrováno n orázku 5.5. Odpovídjící legend k orázku je v tulce 5.3. 42
Prvek rozhrní tlčítko textové pole zškrtávjící pole pole pro výěr tulk Odpovídjící grfická tříd JButton JTextField JCheckBox JComoBox JTle Tulk 5.2: Prvky grfického uživtelského rozhrní knihovny Swing Tříd grfického rozhrní MinPnel AutomtonPnel StteBlock SymolBlock RuleBlock tlčítko Determinizovt Znázorňující rv Tulk 5.3: Legend k rozvržení tříd Orázek 5.5: Rozvržení hlvního okn plikce 43