• No results found

Minimalizovaný automat A3

Mezi velmi časté otázky patří: „Co se stane v případě, kdy při inicializaci nemá mnoţina výstupů stejné přechody?“ Odpověď je jednoduchá – mnoţina výstupů se rozdělí také a automat bude mít více výstupních stavů. Pro takový příklad doporučuji navštívit stránku Old Dominion Univerzity (Toida 2013), ze které byl čerpán i předchozí příklad.

1.7.3 Normalizace

Normalizace se zabývá uvedením automatu do tzv. „normovaného tvaru“. Jedná se o předepsané označení stavů, kdy u deterministického automatu označíme počáteční stav nejniţším číslem (zpravidla 1 nebo 0 – tak jako v našem případě) a postupujeme postupně se symboly abecedy dle pořadí symbolů do dalších stavů. Pokud stav, kam jsme se symbolem přešli, není označen, přiřadíme mu další nejniţší moţné číslo. Takto postupujeme pro další stavy dle pořadí, dokud nejsou všechny stavy označeny.

Pokud bude mít automat 5 stavů, lze ho pojmenovat 5! způsoby. Normovaný tvar tak řeší problém výběru jednoznačného pojmenování stavů automatu a tím i přechodové funkce.

Připomeňme si (neminimalizovaný) automat A3:

Vstupní stav se označí jako Q0 (obrázek č.12) a stavy, kam lze přejít dle pořadí v abecedě, dalšími nejniţšími čísly (obrázek č.13). Zatím ale nejsou označeny všechny stavy, a proto se pokračuje od dalšího stavu v pořadí, tj. stavu Q1. Opět se postupně označí všechny stavy dle pořadí přechodů a nastane situace, kdy mají všechny stavy své označení – automat je v normovaném tvaru (obrázek č.14). Proto lze algoritmus ukončit, jinak by pokračoval přechody stavu Q2 atd.

Obrázek 12: Úvod normalizace Obrázek 13: Průběh normalizace

Obrázek 14: Normovaný automat A3

Další příklad převodu do normovaného tvaru lze nalézt např. v jiţ zmiňované přednášce doktora Kota (et al 2007).

1.7.4 Reverzace (zrcadlení)

Reverzace konečného automatu spočívá v otočení směru přechodové funkce. Pokud tedy automat přechází symbolem „a“ ze stavu Q0 do stavu Q1, po reverzaci bude symbolem přecházet z Q1 do Q0. Zároveň se v automatu prohodí vstupy a výstupy. Pokud původní automat rozeznával sekvence {abb,aabb,aaab,...}, zrcadlený automat bude rozeznávat sekvence {bba,bbaa,baaa,...}. Tato operace změní většinu deterministických automatů na nedeterministické.

Obrázek 15: Reverzovaný automat A2

1.7.5 Negace (doplněk)

Negací automatu budeme v této práci zamýšlet jeho doplněk, tedy komplementární záměnu jeho výstupů – tj. stavy, které výstupními nebyly, nově budou, ale naopak stavy, které výstupem byly, nadále nebudou. Automat, který původně rozpoznával jazyk L, bude po této operaci rozpoznávat Σ*-L. Operace neovlivní typ automatu.

Obrázek 16: Negace automatu A2

1.7.6 Iterace

Iterace automatu, operátor „*“, vede na jeho opakované provedení. Pokud by automat rozpoznával pouze sekvenci „ab“ (automat A4, obrázek č.17), po iteraci by se rozeznávaná sekvence změnila na „(ab)*“ (obrázek č.18), tj. automat by nyní rozeznával i nekonečně dlouhou sekvenci „abababab...“. Nejjednodušší způsob, jak iterace dosáhnout, je vytvořit zobecněný nedeterministický automat, který k původnímu automatu přidá „e“ přechod z výstupního do vstupního stavu.

Obrázek 17: Automat A4 Obrázek 18: Iterovaný automat A4

1.8 Základní operace pro dva (a více) automatů

1.8.1 Podmnožinová konstrukce množinových operací a ekvivalence

Před uvedením samotných základních mnoţinových operací, které lze s automaty provádět (tj. sjednocení, průnik a rozdíl), objasníme algoritmus podmnoţinové konstrukce pro více automatů. Algoritmus bude probíhat stejně jako algoritmus vyuţitý k determinizaci automatu popsanému v kapitole č.1.7.1 pouze s tím rozdílem, ţe tentokrát se vytváří mnoţina dostupných stavů (tj. nové řádky tabulky) ze všech automatů účastnících se operace. Následuje elementární příklad pro operaci mezi dvěma automaty A5 a A6 (další se mohou přidat analogicky):

Obrázek 19: Automat A5 Obrázek 20: Automat A6

Z grafu je patrné, ţe konečný automat A5 rozeznává sekvenci „aa“ a automat A6 „a+b“.

Tabulka přechodové funkce pak bude vypadat následovně (pozn. věnujte pozornost faktu, ţe automat A6 má stavy označené apostrofem):

Tabulka 8: Tabulka podmnoţinové konstrukce pro více automatů Vstup /

výstup Mnoţina stavů Znaky abecedy Σ

„a“ „b“

Vstup se jako inicializační mnoţina oproti algoritmu pro jeden automat nezměnil. Rozdílně se ale v závislosti na operaci zpracují výstupy vzniklého automatu. Tabulku přechodové funkce tak ponechme v tuto chvíli bez výstupů, postupně bude doplněna u kaţdé operace.

1.8.2 Sjednocení

Sjednocením dvou či více automatů získáme automat rozpoznávající jazyk tvořený sjednocením jazyků původních automatů. To znamená, ţe pokud vstupní výraz nějaký automat rozpozná, rozpozná ho i automat, který byl vytvořen jeho sjednocením s jiným. Pokud mají automaty vstupující do operace rozdílné abecedy, pak i abeceda Σ výsledného automatu odpovídá sjednocení jednotlivých vstupních automatů.

Dořešení příkladu pro operaci sjednocení tedy výstupy nastaví následovně:

Tabulka 9: Dořešení výstupů pro operaci sjednocení Vstup /

výstup Mnoţina stavů Znaky abecedy Σ

„a“ „b“

Obrázek 21: Automat pro sjednocení A5 s A6

1.8.3 Průnik

Průnikem dvou či více automatů získáme automat rozpoznávající jazyk tvořený průnikem jazyků původních automatů. Tedy – vstupní výraz musí rozpoznat všechny automaty vstupující do operace, následně ho rozpozná i automat výsledný. Pro abecedy platí totéţ, co u operace sjednocení, tj. abeceda Σ výsledného automatu je sjednocením abeced všech automatů vstupujících do operace.

Tabulka 10: Průnik automatů A5 a A6

Průnikem automatů můţe být i ∅ – takový automat sice můţe existovat, nicméně nesplňuje omezení daná výukovým programem. Automat bez výstupu nedává pro výuku smysl, a proto je nyní označován jako nevalidní.

Jak je z tabulky č.10 patrné, jedná se i o případ našeho původního příkladu. Jako validní příklad tak bude uveden průnik automatu A6 spolu s automatem, který byl vytvořen u operace sjednocení:

Vstup /

výstup Mnoţina stavů Znaky abecedy Σ

„a“ „b“

vstup {Q0,Q0‘} {Q1,Q1‘} {Q3,Q1‘}

- {Q1,Q1‘} {Q2,Q2‘} {Q3,Q2‘}

- {Q3,Q1‘} {Q3,Q2‘} {Q3,Q2‘}

- {Q2,Q2‘} {Q3,Q2‘} {Q3,Q2‘}

- {Q3,Q2‘} {Q3,Q2‘} {Q3,Q2‘}

Tabulka 11: Průnik automatů

Obrázek 22: Průnik automatů A6 s automatem z operace sjednocení

1.8.4 Rozdíl

Pro vyjádření rozdílu vyuţijeme výrokové logiky a přepíšeme zápis rozdílu „L1-L2“, kde L jsou jazyky rozpoznávané danými automaty do tvaru „L1∩(-L2)“. Z tohoto zápisu je jiţ patrné, jak budeme postupovat. Provedeme negaci automatu rozpoznávajícího jazyk L2 a následně provedeme operaci průniku. Jelikoţ všechny potřebné operace jiţ byly vysvětleny, není nutné uvádět nový příklad.

Vstup /

výstup Mnoţina stavů Znaky abecedy Σ

„a“ „b“

vstup {Q0,Q0‘} {Q1,Q1‘} {Q2,Q1‘}

výstup {Q1,Q1‘} {Q3,Q2‘} {Q4,Q2‘}

výstup {Q2,Q1‘} {Q4,Q2‘} {Q4,Q2‘}

- {Q3,Q2‘} {Q4,Q2‘} {Q4,Q2‘}

- {Q4,Q2‘} {Q4,Q2‘} {Q4,Q2‘}

1.8.5 Ekvivalence

Dva automaty jsou ekvivalentní, právě tehdy kdyţ rozpoznávají stejný jazyk L (tzn. rozpoznávají stejná slova). Ekvivalence se taktéţ zjišťuje pomocí algoritmu podmnoţinové konstrukce. Podmínka je následující: pokud je ve výstupním stavu jeden z analyzovaných automatů, musí být ve výstupním stavu i druhý automat. Pokud tato podmínka neplatí, pak automaty nejsou ekvivalentní.

Tabulka 12: Neúspěšná ekvivalence (automaty A5 a A6)

Jak je patrné z původního příkladu, automaty A5 a A6 nejsou ekvivalentní. Tento fakt je zjištěn jiţ u druhé vkládané mnoţiny a algoritmus vytváření tabulky by nemusel dále pokračovat. Jako ukázku ekvivalentních automatů pouţijeme ukázky deterministického automatu spolu s ukázkou determinizace. Pro připomenutí grafy:

Tabulka 13: Úspěšná ekvivalence

Ekvivalence Mnoţina stavů Znaky abecedy Σ

„a“ „b“

Ekvivalence Mnoţina stavů Znaky abecedy Σ

„a“ „b“

vyhovující {Q0,Q0‘} {Q1,Q1‘} {Q0,Q0‘}

vyhovující {Q1,Q1‘} {Q2,Q2‘} {Q0,Q0‘}

vyhovující {Q2,Q2‘} {Q2,Q2‘} {Q3,Q2‘}

vyhovující {Q3,Q2‘} {Q2,Q2‘} {Q3,Q2‘}

1.8.6 Zřetězení (součin)

Zřetězení značí poskládání automatů za sebe do série. To zrealizujeme velmi jednoduše – přivedeme výstupy předchozího automatu na vstup následujícího.

Pro naše ukázkové automaty A5 a A6 tak vznikne nový automat, který rozpoznává jazyk L=L(A5).L(A6) = L(A5.A6) – tedy pro náš příklad jazyk L rozpoznávající slovo „aa(a+b)“.

Obrázek 23: Zřetězení automatů A5 a A6

Tím byly shrnuty všechny základní operace pro jeden a více automatů, které byly nalezeny v materiálech českých vysokých škol (Barták 2013; Češka 2014; Dostál 2008; Kocur 2000;

Kot at al. 2007; Záda 2012). Nyní bude pozornost zaměřena na jiţ realizovaná řešení.

2 Existující projekty

Neţ se začneme zabývat samotnou aplikací, je důleţité se seznámit s jiţ existujícími projekty, které danou problematiku zpracovávají. Pro vyhledání existujících projektů bylo vyuţito standardních vyhledávačů (př. Google), databáze (př. Science Direct) a v neposlední řadě interní vyhledávače stránek, které uchovávají veřejně dostupné programy s otevřeným zdrojovým kódem (př. Sorceforge.net či CodePlex). V této kapitole jsou zmíněny tři projekty – přesněji – dva konkrétní projekty a jeden typový příklad.

2.1 Webové aplikace

Na internetu se vyskytuje řada projektů, které se zabývají převodem regulárního výrazu na nedeterministický automat – případně vygenerovaný nedeterministický automat dále převedou na deterministický. Jako ukázkový projekt v tomto bodě zmíníme webovou aplikaci na serveru HackingOff (2012).

Obrázek 24: Webový parser na serveru HackingOff

Z webových aplikací, které byly během tvorby práce vyhledány, má zřejmě nejpokročilejší parser a přehledné uţivatelské rozhraní. Tato aplikace vytvoří z regulárního výrazu nedeterministický automat a zároveň rovnou zobrazí i jeho deterministický ekvivalent. Bohuţel, jak je často u zahraničních projektů zvykem, u deterministických automatů nezobrazuje

„odpadní stav“, tj. stav, kde se schází nevalidní zadání, po kterých automat jiţ nemůţe v ţádném případě do výstupního stavu.

Na následujících obrázcích si názorně ukáţeme zadání z obrázku č.24, tj. výrazu „a+b“

(zapsáno syntaxí „a|b“, jak je zvykem ve většině případů zahraničních prací a projektů). Dále je potřeba zmínit, ţe sluţba generuje obrázky ve formátu *.svg, a u sloţitějšího zadání bychom zjistili, ţe generovaný výsledek není v minimálním tvaru.

Obrázek 25: Nedeterministický automat a+b vygenerovaný serverem HackingOff

Obrázek 26: Deterministický automat a+b vygenerovaný serverem HackingOff Jak je vidět z obrázku č.26, validní deterministický automat by v našem podání musel mít ještě stav Q3, který by pro znaky „a“ i „b“ cykloval a kam by se zároveň sbíhaly přechody

„a“ i „b“ ze stavů Q1 a Q2. Na jedné straně můţe být zápis bez těchto přechodů výrazně jednodušší a přehlednější, na stranu druhou můţe uţivatele zmást, kdy bude přechod marně hledat nebo na první pohled nepochopí problém. Proto bude v případě této práce volen druhý přístup, tj. kompletní zápis včetně „odpadního stavu“.

Funkcionalita serveru HackingOff však nekončí převodem regulárního výrazu na konečný automat. Dále se zde dá mimo jiné najít samotný převod nedeterministického stroje na deterministický (nedeterministický automat se pak zadává ve formátu JSON) a vytvoření automatu z gramatiky. Nebyla nalezena webová aplikace, která by podporovala více sluţeb, neţ tento zmíněný portál.

2.2 Automata editor

Obrázek 27: Program „Automata editor“

Automata editor (Kříţ 2010) byl nejlepší volně dostupný program, který se podařilo během práce nalézt. Je dostupný z webu sorceforge.net pod licencí GPLv2 a autorem je Čech – Milan Kříţ (FEL ČVUT).

Jedná se o vektorový editor, který podporuje i základní operace pro práci s automaty, navíc je moţné program rozšířit pomocí pluginů (tj. zásuvných modulů). Seznam operací i vizáţ prostředí je znázorněna na předchozím obrázku č.27.

Základním formátem pro uloţení jsou soubory *.tex, případně lze exportovat *.svg, *.eps,

*.gml nebo běţné obrázky formátu *.png či *.bmp. Volba formátu je tak velmi bohatá a přinejmenším zajímavá při psaní delších prací.

Při práci se studenty se bohuţel ukázalo, ţe program pro mnohé není tak pochopitelný (intuitivní), jak by se na první pohled mohlo zdát. Samotné zadání automatu zabere poměrně

dlouhý čas, navíc při práci s dvěma automaty (operace sjednocení a průnik) musí uţivatel jeden uloţit a následně u operace na druhém navolit cestu k danému souboru. To uţivatele zdrţuje, a pokud potřebuje udělat více neţ jednu operaci, můţe brzy mezi soubory ztratit přehled, nehledě na jejich nepříjemné rychlé nabývání.

Pro ilustraci přikládám na obrázku č.28, jak dopadla první snaha jednoho ze studentů při prvním otevření programu.

Obrázek 28: Automata editor – první pokus studenta

2.3 JFLAP

Posledním programem je JFLAP (2005). Jedná se o program vyvíjený od roku 1995 na Duke University (soukromá univerzita v Durhamu v americkém státě Severní Karolína) – jeho historie se však datuje jiţ od roku 1990, kdy vývoj započal na Rensselaer Polytechnic Institute (vysoká technická škola ve městě Troy v americkém státě New York).

JFLAP je taktéţ edukativní projekt, který je k dispozici pod Creative Commons Attribution-NonCommercial-ShareAlike 2.5 licencí. Projekt jiţ dávno přerostl oblast samotných konečných automatů a kromě této funkcionality nabídne Mealyho a Moorovy stroje, zásobníkové automaty, Turingovy stroje, práci s gramatikami atd. Více ukáţe úvodní výběrové menu programu:

Obrázek 29: JFLAP úvodní menu (převzato z: http://www.jflap.org/tutorial/fa/createfa/fa.html)

poskytne výborná webová dokumentace JFLAP Tutorial (2009). Nikde v dokumentaci ani tutoriálu se nepodařilo dohledat informace o moţnosti provedení operací více automatů (sjednocení, průnik atd.), coţ je vzhledem k rozsahu programu překvapující. Jedná se ale zjevně primárně o nástroj, který má zobrazovat jeden stroj a na něm ukázat, jak funguje.

Aplikace samotná je dostupná po vyplnění dotazníku, kde uţivatel musí vyplnit údaje jako je jeho univerzita nebo plánované uţití programu. Tento krok se poţaduje proto, aby univerzita mohla sledovat šíření a vyuţití programu. Na jiţ zmíněných stránkách programu lze nalézt informaci, ţe jen od roku 2005 získal program přes 480 000 zobrazení, je odkazován v několika publikacích a v roce 2007 se stal finalistou soutěţe „Premier Award for Excellence in Engineering Education Courseware“ vypsanou organizací „The National Engineering Education Delivery System“ (volně lze přeloţit jako: Cena o nejlepší výukový software vypsaná národní organizací pro zprostředkování technického vzdělání). Aktuálně se nachází ve verzi 7 a v dohledné době by měla být představena nová verze.

Obrázek 30: JFLAP simulace průchodu slova (převzato z:

http://www.jflap.org/tutorial/fa/createfa/fa.html)

Z výše uvedeného je patrné, ţe o aplikaci jako takovou je zájem. Přesto se mi nepodařilo najít aplikaci s jednoduchým ovládáním, která by umoţňovala efektivní práci s větším počtem konečných automatů.

3 Aplikace

V této kapitole se budeme zabývat samotnou vytvořenou aplikací. Díky studentům, kteří se podíleli na testování aplikace, bylo moţné její odladění. Významně se ujali testování od samotného počátku zejména: Bc. Jaroslav Jakoubě a Bc. Tomáš Košek.

Nejprve je nutné definovat, co se od výukové aplikace očekává. Samozřejmostí by mělo být snadno ovladatelné, intuitivní prostředí, které student pochopí pokud moţno bez dalšího vysvětlování. Díky tomu by měl odpadnout čas nutný ke školení v ovládání aplikace,

Práce tedy bude primárně zaměřena na:

 snadno ovladatelné uţivatelské prostředí;

 efektivní vkládání dat;

 přehledný výpis dat;

 rychle přístupné operace a funkce;

 přenositelnost.

Aplikace byla napsána v jazyce C# s frameworkem .NET, konkrétně verze 3.5. Program bude bez problémů fungovat na většině školních počítačů, které běţí převáţně na operačním systému Windows – majoritně verze 7, někde stále XP. Účast verze XP opodstatňuje zvolenou verzi frameworku 3.5 – z předchozí zkušeností víme, ţe verze 4 a novější občas působila problémy, přinejmenším bylo třeba doinstalovat aktualizaci rozhraní. Verze systému s posledním service packem (tj. balíkem aktualizací) by měla mít oficiální podporu verze 4, nicméně verzi 3.5 podporuje jiţ v základu.

Pro lepší moţnost vysvětlení fungování aplikace nejprve probereme uţivatelské rozhraní s jeho funkcemi a aţ poté se vrátíme k rozboru vnitřního fungování a členění programu.

3.1 Uživatelské prostředí

Původní návrh počítal s vlastními okny pro většinu funkcí, záhy se ale přišlo na nepraktičnost

s důrazem na udrţení co největšího mnoţství funkcí v hlavním okně aplikace. Toto řešení ale skrývalo další nebezpečí – hlavní okno by se díky tomu mohlo stát snadno nepřehledným a zejména při výskytu vícestupňových menu by uţivatel mohl marně hledat poţadované funkce.

Výsledkem tak je rozloţení v záloţkách, které obsahují samotnou ucelenou funkcionalitu.

Tyto záloţky nahradily více úrovňová menu a většinu samostatných oken funkcí. Uţivatelské rozhraní se tak dostalo do podoby, kterou společnosti s oblibou označují „just one click away“ – všechny ovládací prvky se nacházejí pouze jedno kliknutí od uţivatele.

Přes veškerou snahu popis nikdy nenahradí vizuální vjem, proto bude nejvhodnější uvést názorný snímek aplikace a v popisu pokračovat přímo na něm. Pro ukázku je k práci přiloţen i snímek jednoho okna z původního návrhu, který naleznete v příloze E.

Obrázek 31: Redesignované GUI

Uţivatelské rozhraní je moţné si podrobněji prohlédnout na obrázku v příloze C.

Zde v textu je obrázek nutný pro popis rozloţení.

V levé části obrázku č.31 je vidět část programu, která interně ukládá zpracované automaty a dovoluje s nimi pracovat dle přiděleného čísla. Jakkoliv je v aplikaci vytvořen či ze souboru nahrát konečný automat, je následně přidán do tohoto listu. V horní části jsou vidět tlačítka slouţící k načtení nebo uloţení do souboru spolu s dalšími moţnostmi, o kterých více ve vlastní podkapitole (č.3.1.3) věnované této komponentě.

Pravá část téhoţ obrázku se dělí na horní a dolní část s jednotlivými záloţkami. Dolní část se stará čistě o zobrazení vybraného automatu, v horní části najdeme záloţky týkající

se moţnosti vloţení nového automatu do programu spolu s panely pro ovládání jednotlivých operací na jiţ vloţených automatech. Bliţší popis následuje v dalších podkapitolách.

3.1.1 Vložení automatu do programu

Uţivatel má několik moţností, jak automat do programu vloţit (pozn. načtení ze souboru je věnována samostatná kapitola č.3.3). Konkrétně se jedná o vytvoření automatu z regulárního výrazu, zápisem přechodové funkce do tabulky nebo zakreslením automatu pomocí grafu.

Kaţdou z těchto moţností lze nalézt v samostatném panelu:

Automat z regulárního výrazu

Jak z regulárního výrazu vytvořit automat, je uvedeno v kapitole č.1.6.1. Proto zde není nutné zabývat se teorií, ale praktickou ukázkou samotného vstupu.

Obrázek 32: Vstup regulárním výrazem

Kromě zapsání samotného regulárního výrazu nabízí uţivateli komponenta moţnost zvolit abecedu, znak prázdného slova a zástupný symbol za jakýkoliv znak abecedy. Pro lepší představu, dle obrázku č.32, při pouţití symbolu Σ komponenta před zpracováním nahradí symbol zápisem „(a+b)“. U dvouprvkové abecedy se nejedná o tak velké zjednodušení, nicméně u abeced, které mají například čtyři a více znaků, ušetří uţivateli hodně psaní. V regulárním výrazu jsou standardně podporovány symboly „*“ pro iteraci a „+“ pro nebo (or).

Původně bylo moţné abecedu volit z jakýchkoliv symbolů. To se při testech neosvědčilo, a proto byla po konzultaci omezena pouze na písmena „a-z“ a „A-Z“. Uţivatel si také můţe zvolit výstupní tvar automatu. Jak je uvedeno v kapitole č.1.6.1 o vzniku automatu z regulárního výrazu, automat takto vzniklý bude nedeterministický. Málokdy ale uţivatel potřebuje pracovat s tímto nedeterministickým automatem, a proto je jako základní výstupní volba zvolena jako deterministický stroj, kdy komponenta rovnou zajistí převod nedeterministického stroje na deterministický a aţ ten pošle k uloţení. Ušetří se tak počet uloţených poloţek a zvýší se v nich přehlednost.

Automat zápisem přechodové funkce do tabulky

Další moţností je zapsat přechodovou funkci do tabulky. Tabulku můţeme vytvořit buď prázdnou nebo ji zaloţit na nějakém jiţ uloţeném automatu. Další informace jsou na obrázku záloţky, která se o vznik stará.

Obrázek 33: Automat nový nebo zaloţený na exitujícím

Z obrázku je patrné, ţe u nového automatu opět zvolíme abecedu a prázdné slovo. Spolu s tím zvolníme typ editoru, deterministický (DKA) nebo nedeterministický (NKA). To ovlivní vyvolaný editor – v závislosti na typu nám buď umoţní přechody pomocí prázdného slova a prázdná pole, nebo ne.

Obrázek 34: Tabulkový editor přechodové funkce

Na obrázku č.34 je znázorněna ukázka nedeterministického editoru, který byl vygenerován ze sloţitějšího automatu. Pro zmenšení ukázkového obrázku je ponechána část, která rozpoznává výraz „(a+b)a“. Jak je vidět, nedeterministický editor umoţňuje nechat některá pole prázdná, nebo naopak pouţít znak pro více neţ jeden přechod (přechod prázdného slova ze stavu Q0). Deterministický editor by neumoţňoval přechody prázdným slovem a pro kaţdé pole by byl vyţadován striktně jeden přechod. V pravém horním rohu je opět vidět výběrové menu výsledného typu, obdobně jako u zadávání regulárního výrazu.

Uţivatel má moţnost zadat regulární výraz, který automat rozpoznává. Toto pole není povinné, ale můţe usnadnit orientaci v uloţených strojích. Původ automatu je další moţný identifikátor, přednastavena je hodnota „Uţivatelský vstup“.

Při zadání poţadavku na uloţení je automat překontrolován pro základní nedostatky (chybí vstup, chybí výstup, neexistuje cesta ze vstupu na výstup), a pokud je některý z parametrů porušen, upozorní uţivatele bez uzavření editoru. Pokud automat projde kontrolou, je odeslán k uloţení a tím se mu přidělí globální identifikátor – editor se v tomto případě uzavře.

Okno editoru je vyvoláváno jako samostatné a neblokuje základní aplikaci. Uţivatel jich můţe mít otevřených dle své potřeby i více najednou.

Automat grafem

Automat grafem

Related documents