}w!"#$%&'()+,-./012345<ya

Rozměr: px
Začít zobrazení ze stránky:

Download "}w!"#$%&'()+,-./012345<ya"

Transkript

1 MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY }w!"#$%&'()+,-./012345<ya Rozšíření nástroje JGAF DIPLOMOVÁ PRÁCE Radek Gomola Brno, jaro 2013

2 Prohlášení Prohlašuji, že tato diplomová práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj. Radek Gomola Vedoucí práce: doc. RNDr. Jan Strejček, Ph.D. ii

3 Poděkování Tímto bych chtěl poděkovat doc. RNDr. Janu Strejčkovi, Ph.D., svému vedoucímu práce, za jeho velmi vstřícný přístup, za trpělivost při čtení této práce a za jeho připomínky a rady. Panu doc. RNDr. Petru Sojkovi, Ph.D. za jeho pomoc s textovou částí diplomky a podporu. Dále svým rodičům za mluvnickou, gramatickou a stylistickou korekturu práce a v neposlední řadě své přítelkyni Michaele Klímkové za její shovívavost a podporu při psaní této práce. Nesmím zapomenout poděkovat také všem ostatním, kteří mě podporovali a věřili mi. iii

4 Shrnutí Cílem této diplomové práce bylo rozšířit již vzniklý softwarový nástroj pro práci s formálními jazyky, zkráceně JGAF. Rozšíření se týkalo jak úprav a přidání editorů reprezentací, tak i vytvoření nových procedur. Procedurami jsou v práci myšleny převážně transformace reprezentací formálních jazyků. Obecně jsou za procedury v programu považovány veškeré simulace, transformace a analýzy formálních jazyků a jejich reprezentací. Transformace umožňují parametrizaci uživatelem, která dovoluje do jisté míry ovlivňovat běhy algoritmů. Důraz byl stále kladen na umožnění případného dalšího rozšíření a na vhodné pedagogické zpracování. iv

5 Klíčová slova Formální jazyk, Gramatika, Bezkontextová gramatika, CFG, Chomského normální forma, CNF, Greibachové normální forma, GNF, Automat, Konečný automat, Zásobníkový automat, Regulární výraz, Simulace, Analýza, Transformace, Java, Editor, Framework, JGAF v

6 Obsah 1 Úvod Struktura práce Formální jazyky a jejich reprezentace Formální jazyky Abeceda a Jazyk Gramatiky Chomského hierarchie Regulární jazyky Konečné automaty Minimalizace automatu Reprezentace konečných automatů Rozšiřující modely konečných automatů Regulární výrazy Regulární přechodové grafy Bezkontextové jazyky Zásobníkové automaty Reprezentace zásobníkových automatů Modifikované bezkontextové gramatiky a normální formy Aplikace JGAF Obecné poznatky Spuštění Možnosti aplikace Základní ovládání Okenní systém Editory Editor konečných automatů Editor regulárních výrazů Editor zásobníkových automatů Transformace, Simulace, Analýza Spuštění procedury Okno procedury Ovládání procedury Rozšiřitelnost Editory reprezentací Editor gramatik Ovládání editoru Panel nástrojů Vytvoření gramatiky Zkrácená pravidla ε-pravidla Editace Výpis Analýza Transformace vi

7 5.1 Je jazyk L(G) neprázdný? Parametrizace procedury Eliminace nedosažitelných symbolů Parametrizace procedury Eliminace nepoužitelných symbolů Paramatrizace procedury Eliminace ε-pravidel Parametrizace procedury Eliminace jednoduchých pravidel Parametrizace procedury Eliminace přímé levé rekurze Parametrizace procedury Eliminace levé rekurze Parametrizace procedury Průběh procedury Transformace do Chomského normální formy Parametrizace procedury Transformace do Greibachové normální formy Parametrizace procedury Minimalizace konečného automatu Transformace regulárního výrazu na konečný automat Parametrizace procedury Transformace konečného automatu na regulární výraz Průběh výpočtu Parametrizace procedury Obecné Text práce Programová část Závěr vii

8 1 Úvod Každoročně se studenti Fakulty informatiky Masarykovy univerzity v Brně potýkají s problémy tykajícími se pochopení definic formálních jazyků. Jedná se převážně o studenty navštěvující předměty IB005 Formální jazyky a automaty, a nebo IB102 Automaty a gramatiky. Formální jazyky patří neodmyslitelně ke studiu informatiky i obecně. V informatice je formálním jazykem myšlena množina slov nad určitou abecedou. Tato množina může být jak konečná, kde si vystačíme s výčtem prvků, tak nekonečná, kde již není výčet prvků možný a je potřeba nejrůznějších reprezentací, jako jsou gramatiky nebo automaty. Pro usnadnění pochopení jednotlivých definic a pojmů vzniklo na půdě fakulty již mnoho nejrůznějších aplikací a nástrojů, které převádějí formalizmy a algoritmy do vizuální podoby a poskytují tak náhled na jejich běh. Bohužel jejich společným nedostatkem je nejednotnost. Programy spolu nebyly nijak kompatibilní a většinou se úzce specializovaly jen na malou část velmi rozsáhlé látky. Z tohoto důvodu vznikl nástroj s názvem JGAF [3], jež vytvořil jednotné rozšiřitelné pracovní prostředí. Jednotlivé algoritmy, definice a reprezentace používané v teorii automatů, gramatik a regulárních výrazů, tak mohou být zpracovány a vizualizovány v rámci jedné nenáročné aplikace. Tato skutečnost se stala velkým posunem kupředu. Studenti, jež mají za úkol vytvořit nástroj pro vizualizaci běhu některého algoritmu, již nemusejí ztrácet čas s vývojem své vlastní platformy a grafického prostředí. Nemusejí se zabývat problémy, jako jsou způsob ukládání, vytváření a načítání souborů nebo samotnou vizualizací. Vývojáři dostanou do rukou nástroj, v němž je toto vše již naimplementováno. Program sice má své mouchy, ale postupným vylepšováním dalšími studenty se bude jeho úroveň zvyšovat a časem se určitě stane nedílnou součástí při výuce formálních jazyků. Já jsem se jedním takovým vývojářem, jež měl zlepšit funkcionalitu programu, stal. Nástroj již v základu umožňoval spravovat, vytvářet a zobrazovat formální gramatiky. Jeho nedostatkem v této oblasti však bylo, že neumožňoval vytvářet zkrácenou verzi pravidel a vpisovat prázdné slovo ε, což bylo potřeba napravit. Více se o rozšířeném editoru gramatik dozvíte v kapitole 4.1. Následně byl přidán i editor regulárních přechodových grafů. Důležitou částí mé práce bylo zavést několik chybějících algoritmů, převážně pro práci s bezkontextovými gramatikami (CFG), dále pak pro minimalizaci konečných automatů a převody mezi regulárními výrazy a konečnými automaty. Má práce by měla poskytnout studentům lepší náhled na problematiku látky při studiu, což se mi více, či v některých oblastech méně, povedlo. Doufám, že se vývoj nástroje JGAF bude i nadále posouvat vpřed a zlepší tak kvalitu studia. 1.1 Struktura práce Struktura práce je volena tak, aby poskytovala jednotný logický sled. Ve druhé kapitole jsou formálně zavedeny jednotlivé použité pojmy a definice. V kapitole třetí se blíže podíváme na samotný nástroj JGAF. Čtvrtá kapitola se zabývá rozšířením vizualizací formalizovaných pojmů. Pátá, nejrozsáhlejší kapitola, poskytuje náhled na nově zavedené transformátory. A konečně šestá kapitola zmiňuje obecné poznatky týkající se vzniklé diplomové práce. 1

9 2 Formální jazyky a jejich reprezentace V této kapitole se pokouším shrnout veškeré pojmy tykající se oblasti formálních jazyků a jejich reprezentací, které jsou v práci použity. Kapitola slouží studentům k usnadnění hledání jednotlivých definic. Veškeré definice, věty a příklady, použité v této kapitole, jsou převzaty ze skript pro předmět IB005 Formální jazyky a automaty [1], proto bylo také použito i podobné členění kapitoly. 2.1 Formální jazyky Abeceda a Jazyk Definice 2.1. Abecedou se rozumí libovolná konečná množina ozn. Σ, jejíž prvky nazýváme znaky (případně také písmena nebo symboly) abecedy. Definice 2.2. Slovo (též řetězec) v nad abecedou Σ je libovolná konečná posloupnost znaků této abecedy. Speciálním případem je tzv. prázdné slovo označované ε, které odpovídá prázdné posloupnosti znaků. Množinu všech slov nad abecedou Σ pak značíme Σ, množinu všech neprázdných slov Σ +. Definice 2.3. Jazyk nad abecedou Σ je libovolná množina slov nad Σ (jazyky nad Σ jsou tedy právě podmnožinou Σ ) Gramatiky Definice 2.4. Gramatika G je čtveřice (N, Σ, P, S), kde N je neprázdná konečná množina neterminálních symbolů (stručněji neterminálů), Σ je konečná množina terminálních symbolů (stručněji terminálů) taková, že N Σ =. Sjednocením N a Σ obdržíme množinu všech symbolů gramatiky označovanou obvykle symbolem V, P V NV V je konečná množina pravidel. Pravidlo (α, β ) obvykle zapisujeme ve tvaru α β (a čteme jako α přepiš na β ), S N je speciální počáteční neterminál (nazývaný také kořenem gramatiky). Podmínka kladená na tvar pravidel α β pouze požaduje, aby α (tzv. levá strana pravidla) obsahovala alespoň jeden neterminál; na β (pravou stranu pravidla) nejsou obecně kladeny žádné požadavky speciálně může být prázdným slovem ε. Každá gramatika G = (N, Σ, P, S) určuje binární relaci G přímého binárního odvození na množině V definovanou takto: σ G δ, právě když existuje pravidlo α β P a slova ν, γ V taková, že σ = ναγ a δ = νβγ. Na množině V zavedeme další relace: k relaci odvození v k krocích (k-násobné složení relace i G ), kterou značíme G a definujeme pro každé k N 0 induktivně takto: 2

10 2. FORMÁLNÍ JAZYKY A JEJICH REPREZENTACE 0 G je identická relace k+1 G = k G G relaci odvození, kterou značíme G a definujeme předpisem G = i=0 i G Tedy G je reflexivní a tranzitivní uzávěr relace G. relaci netriviální odvození, kterou značíme + G a definujeme předpisem + G = c i=1 Tedy + G je tranzitivní uzávěr relace G. i G V dalším textu budu index G z relací vypouštět, bude-li z kontextu patrné, o kterou gramatiku se jedná. Prvky množiny V, které lze odvodit z počátečního neterminálu, nazýváme větnými formami gramatiky G. Přesněji, α V je větná forma právě když S α. Větná forma, která neobsahuje žádné neterminály, se nazývá věta. Množina všech vět tvoří jazyk generovaný gramatikou G, označovaný L(G): L(G) = {w Σ S w} Příklad 2.1. Necht G = ({S, A, B}, {a, b}, P, S), kde P = {S ABS S ε AB BA BA AB A a B b} potom L(G) = {w {a, b} # a (w) = # b (w)} Chomského hierarchie Avram Noam Chomsky (* 7. prosince 1928, Filadelfie) je americký filozof, lingvista a logik židovského původu. Je tvůrcem tzv. Chomského hierarchické klasifikace formálních jazyků (zkráceně Chomského hierarchie), která dělí formální gramatiky do tříd a skupin s rostoucí vyjadřovací silou - každá následná třída je schopna generovat širší skupinu formálních jazyků než předchozí třída. Chomského hierarchie se stala důležitou hlavně při konstrukci kompilátorů a na poli teorie automatů [2]. Chomského hierarchie rozlišuje tyto čtyři (základní) typy gramatik: 3

11 2. FORMÁLNÍ JAZYKY A JEJICH REPREZENTACE Typ 0 Libovolná gramatika je gramatikou typu 0; na tvar pravidel se nekladou žádné omezující požadavky. Někdy též se takové gramatiky označují jako gramatiky bez omezení či frázové gramatiky (phrase grammars). Typ 1 Gramatika je typu 1 (nebo též kontextová, Context-Sensitive, CSG, méně často též monotónní), jestliže pro každé pravidlo α β platí α β s eventuální výjimkou pravidla S ε, pokud se S nevyskytuje na pravé straně žádného pravidla. Typ 2 Gramatika je typu 2 (též bezkontextová, Context-Free, CFG), jestliže každé její pravidlo je tvaru A α, kde α 1 s eventuální výjimkou pravidla S ε, pokud se S nevyskytuje na pravé straně žádného pravidla. Typ 3 Gramatika je typu 3 (též regulární či pravolineární), jestliže každé její pravidlo je tvaru A ab nebo A a s eventuální výjimkou S ε, pokud se S nevyskytuje na pravé straně žádného pravidla. Poznámka: Ke každé gramatice typu 2 s pravidly A α, kde α 0, lze sestrojit ekvivalentní gramatiku typu 2 splňující požadavek α 1 s eventuální výjimkou S ε. Více v kapitolách Modifikované bezkontextové gramatiky (viz. kap ) a Eliminace epsilon pravidel (viz. kap. 5.4). 2.2 Regulární jazyky Konečné automaty Definice 2.5. Konečný automat (Finite Automaton, FA) M je pětice (Q, Σ, δ, q 0, F ), kde Q je neprázdná konečná množina stavů, Σ je konečná množina vstupních symbolů, nazývaných také vstupní abeceda, δ Q Σ Q je parciální přechodová funkce, q 0 Q je počáteční stav, F Q je množina koncových stavů. Abychom mohli definovat jazyk přijímaný daným FA M, zavedeme rozšířenou přechodovou funkci ˆδ Q Σ Q, definovanou induktivně vzhledem k délce slova ze Σ : ˆδ(q, ε) = q pro každý stav q Q, ˆδ(q, wa) = { δ(ˆδ(q, w), a), je-li ˆδ(q, w) i δ(ˆδ(q, w), a) definováno, jinak. Symbol značí, že funkce není definována. Zápis ˆδ(q, w) = p znamená, že automat M přejde ze stavu q pod slovem w (tj. postupným přečtením slova w znak po znaku zleva doprava) do stavu p. 4

12 2. FORMÁLNÍ JAZYKY A JEJICH REPREZENTACE Jazyk přijímaný (akceptovaný, rozpoznávaný) konečným automatem M, označovaný jako L(M), je tvořen právě všemi takovými slovy, pod kterými automat přejde z počátečního stavu do některého z koncových stavů: L(M) = {w Σ ˆδ(q 0, w) F }. Příklad 2.2. Necht M = ({q 0, q 1, q 2 }, {a, b}, δ, q 0, q 1 ) je FA, kde δ(q 0, a) = q 1 δ(q 0, b) = q 2 δ(q 1, a) = q 2 δ(q 1, b) = q 0 δ(q 2, a) = q 0 δ(q 2, b) = q 1 Pak L(M) = {w {a, b} (# a (w) # b (w))mod 3 = 2}. Minimalizace automatu Definice 2.6. Necht M = (Q, Σ, δ, q 0, F ) je konečný automat bez nedosažitelných stavů, jehož přechodová funkce je totální. Pro každý stav q definujeme jazyk L(q) Σ předpisem L(q) = {x Σ ˆδ(q, x) F }. Stavy p, q nazveme jazykově ekvivalentní, psáno p q, pokud L(p) = L(q), tj. p q x Σ (ˆδ(p, x) F ˆδ(q, x) F ). Lemma 2.1. Necht M = (Q, Σ, δ, q 0, F ) je konečný automat bez nedosažitelných stavů, jehož přechodová funkce je totální. Jestliže p q, pak pro každé a Σ platí δ(p, a) δ(q, a). Definice 2.7. Necht M = (Q, Σ, δ, q 0, F ) je konečný automat bez nedosažitelných stavů, jehož přechodová funkce je totální. Reduktem (též podílovým či faktor automatem) automatu M nazveme konečný automat M/ = (Q/, Σ, η, [q 0 ], F / ), tj. automat, kde: Stavy jsou třídy rozkladu Q/ (třídu rozkladu obsahující stav q značíme [q]). Přechodová funkce η je definována pomocí reprezentantů. Je to nejmenší funkce splňující: p, q Q, a Σ δ(q, a) = p η([q], a) = [p]. Počáteční stav je třída rozkladu Q/ obsahující stav q 0. Koncové stavy jsou právě ty třídy rozkladu Q/ obsahující alespoň jeden koncový stav (jednoduchým důsledkem definice 2.6 je, že v každé třídě jsou koncové stavy bud všechny, nebo ani jeden z nich tento fakt ospravedlňuje použité značení F / ). Lemma 2.2. Necht M = (Q, Σ, δ, q 0, F ) je konečný automat bez nedosažitelných stavů, jehož přechodová funkce je totální a M/ = (Q/, Σ, η, [q 0 ], F / ) jeho redukt. Pro každé u, v, w Σ platí: 1. ˆη([q 0 ], w) = [q] ˆδ(q 0, w) = p, kde p q a 2. ˆδ(q0, u) ˆδ(q 0, v) ˆη([q 0 ], u) = ˆη([q 0 ], v). 5

13 2. FORMÁLNÍ JAZYKY A JEJICH REPREZENTACE Věta 2.1. Necht M = (Q, Σ, δ, q 0, F ) je konečný automat bez nedosažitelných stavů, jehož přechodová funkce je totální. Pak L(M) = L(M/ ). Věta 2.2. Necht M = (Q, Σ, δ, q 0, F ) je konečný automat bez nedosažitelných stavů, jehož přechodová funkce je totální, rozpoznávající jazyk L. Pak M/ je minimální automat rozpoznávající L. Definice 2.8. Necht M = (Q, Σ, δ, q 0, F ) je konečný automat bez nedosažitelných stavů, jehož přechodová funkce je totální. Pro každé i N 0 definujeme binární relaci i na Q předpisem p i q def w Σ. w i (ˆδ(p, w) F ˆδ(q, w) F ). Pokud p i q, znamená to, že stavy p a q nelze rozlišit ve smyslu definice 2.6 žádným slovem délky nejvýše i. Tedy p q právě když p i q pro každé i N 0. Lemma 2.3. Pro relaci i platí: 1. 0 = {(p, q) p F q F }, 2. i+1 = {(p, q) p i q a Σ δ(p, a) i δ(q, a)}. Reprezentace konečných automatů V příkladu 2.2 jsme mohli vidět reprezentaci pomocí úplné definice. Tato reprezentace musí zahrnovat popis všech pěti složek pětice z definice 2.5. Vypisování přechodové funkce však může být u větších automatů zdlouhavé a nepřehledné. Konečné automaty se nejčastěji objevují ve dvou níže uvedených podobách, které jsou daleko přehlednější. První reprezentací konečného automatu je tabulka přechodové funkce (obrázek 2.1). Obrázek Tabulka přechodové funkce konečného automatu. Stavy automatu jsou vypsány v záhlaví řádků, vstupní symboly v záhlaví sloupců, přechodová funkce je určena obsahem vnitřních polí tabulky (pokud je pro některé dvojice nedefinována, uvádí se ), počáteční stav je označen znakem a koncové stavy znakem. Ještě přehlednější, a proto častěji používaná, je reprezentace pomocí přechodového grafu (též přechodového sytému s návěštími ze Σ). Pro automat M z příkladu 2.2 si jej můžeme prohlédnout na obrázku 2.2 níže. 6

14 2. FORMÁLNÍ JAZYKY A JEJICH REPREZENTACE Obrázek Přechodový graf konečného automatu. Stavy odpovídají uzlům, přechodová funkce je znázorněna ohodnocenými orientovanými hranami, vstupní abeceda je tvořena symboly, kterými jsou hrany ohodnoceny, počáteční stav je označen šipkou a koncové stavy jsou dvojitě zakroužkovány. Rozšiřující modely konečných automatů Definice 2.9. Nedeterministický konečný automat (zkrác. NFA) je pětice M = (Q, Σ, δ, q 0, F ), kde význam všech složek je stejný jako v definici 2.5 s výjimkou přechodové funkce δ. Ta je definována jako (totální) zobrazení δ Q Σ 2 Q. Na deterministické automaty tedy můžeme pohlížet jako na speciální případ nedeterministických automatů, kdy pro každé q Q a a Σ je množina δ(q, a) nejvýše jednoprvková. Podobně jako u deterministických automatů zavedeme rozšířenou přechodovou funkci ˆδ Q Σ 2 Q : ˆδ(q, ε) = {q}, ˆδ(q, wa) = p ˆδ(q,w) δ(p, a). Jazyk přijímaný nedeterministickým konečným automatem M je definován takto: L(M) = {w Σ ˆδ(q 0, w) F }. 7

15 2. FORMÁLNÍ JAZYKY A JEJICH REPREZENTACE Obrázek Přechodový graf nedeterministického konečného automatu. Věta 2.3. Pro každý NFA M = (Q, Σ, δ, q 0, F ) existuje ekvivalentní DFA. Definice Nedeterministický konečný automat s ε-kroky je pětice M = (Q, Σ, δ, q 0, F ), kde význam všech složek je stejný jako v definici 2.5 s výjimkou přechodové funkce δ. Ta je definována jako (totální) zobrazení δ Q (Σ {ε}) 2 Q. Rozšířenou přechodovu funkci ˆδ ovšem musíme definovat odlišným způsobem; nejprve zavedeme funkci D ε Q 2 Q, která pro daný stav p vrací množinu stavů, kterých může M dosáhnout z p bez toho, aby četl vstup. Pro dané p Q je D ε (p) nejmenší množina X Q taková, že platí: p X, Pokud q X a r δ(q, ε), pak také r X. Nyní již můžeme definovat rozšířenou přechodovou funkci ˆδ Q Σ 2 Q takto: ˆδ(q, ε) = D ε, ˆδ(q, wa) = p ˆδ(q,w) D ε (δ(p, a)). Jazyk přijímaný automatem M s ε-kroky je definován stejně jako v případě nedeterministických automatů, tj. L(M) = {w Σ ˆδ(q 0, w) F }. Věta 2.4. Ke každému NFA s ε-kroky existuje ekvivalentní NFA (bez ε-kroků). Poznámka: Bude-li v následujícíh kapitolách použit pojem konečný automat, budeme pod ním rozumět obecně NFA s ε-kroky. Pokud budeme uvažovat konečný automat podle definice 2.5, pak budeme hovořit o deterministickém konečném automatu. 8

16 2. FORMÁLNÍ JAZYKY A JEJICH REPREZENTACE Regulární výrazy Definice Třída regulárních jazyků nad abecedou Σ, označovaná jako R(Σ), je definována induktivně takto: 1., {ε} a {a} pro každé a Σ je regulární jazyk nad Σ. 2. Jsou-li L 1, L 2 regulární jazyky nad Σ, jsou také L 1 L 2, L 1 L 2 a L 1 regulární jazyky nad Σ. 3. Každý regulární jazyk vznikne po konečném počtu aplikací kroků 1 a 2. Jinými slovy R(Σ) je nejmenší třída jazyků nad Σ splňující podmínky 1 a 2. Jazyky uvedené v bodě 1 se nazývají elementární, operace nad jazyky uvedené v bodě 2 se nazývají regulární. Je tedy vidět, že každý regulární jazyk lze popsat určením elementárních jazyků a předpisu, který určuje, jak na tyto jazyky aplikovat regulární operace. Definice Množina regulárních výrazů (regular expressions) nad abecedou Σ, označovaná RE(Σ), je definována induktivně takto: 1., {ε} a a pro každé a Σ jsou regulární výrazy nad Σ (tzv. základní regulární výrazy). 2. Jsou-li E, F regulární výrazy nad Σ, jsou také (E F ), (E + F ) a (E) regulární výrazy nad Σ. 3. Každý regulární výraz vznikne po konečném počtu aplikací kroků 1 a 2. V regulárních výrazech se mohou vyskytovat také kulaté závorky jako metasymboly, které napomáhají vymezit rozsah operátorů. Abychom jejich použití omezili na minimum, přijmeme konvenci týkající se priorit operátorů: největší prioritu má *, pak a nakonec +, přičemž nadbytečné závorky lze vypouštět. Výraz a + b c tedy odpovídá výrazu (a + (b (c) )). Každý regulární výraz E nad abecedou Σ popisuje (jednoznačně určuje) jazyk L(E) nad abecedou Σ (jazyk L(E) je sémantikou regulárního výrazu E) podle těchto pravidel: L(ε) L( ) L(a) L(E F ) L(E + F ) L(E ) def = {ε} def = def = {a} pro každé a Σ def = L(E) L(F ) def = L(E) L(F ) def = L(E) Příklad 2.3. Necht E = (a + (b (c) )) je regulární výraz uvedený jako příklad výše, potom L(E) = {a, b, bc, bcc, bcc,...}. Věta 2.5. Necht E je regulární výraz nad abecedou Σ. Pak existuje konečný automat M rozpoznávající jazyk L(E). Veta 2.4. Necht L je akceptovaný nějakým (libovolným) deterministickým konečným automatem. Pak L je popsatelný nějakým regulárním výrazem. 9

17 2. FORMÁLNÍ JAZYKY A JEJICH REPREZENTACE Regulární přechodové grafy Definice Regulární přechodový graf M je pětice (Q, Σ, δ, I, F ), kde Q je neprázdná konečná množina stavů, Σ je vstupní abeceda, δ Q Q RE(Σ) je parciální přechodová funkce, I Q je množina počátečních stavů, F Q je množina koncových stavů. Regulární přechodové grafy tedy představují další zobecnění automatů s ε-kroky. Hrany mohou být nyní ohodnoceny nejen prvky Σ {ε}, ale dokonce libovolným regulárním výrazem nad Σ (mezi libovolnými dvěma uzly je však nejvýše jedna hrana, což však není omezení podstatené - viz. operátor +). Každý automat s ε-kroky lze považovat za regulární přechodový graf s jedním počátečním stavem, jehož hrany jsou ohodnoceny regulárními výrazy tvaru a a n, kde n N a každé a i, i {1,..., n} patří do Σ {ε}. Slovo w Σ je přechodovým grafem M akceptováno, právě když existuje posloupnost stavů q 0,..., q n, kde n 1, q 0 I, q n F a δ(q i 1, q i ) je definováno pro každé 0 < i n taková, že w lze rozdělit na n částí w = v 1 v n tak, že v i L(δ(q i 1, q i )) pro každé 0 < i n. Navíc ε je akceptováno také tehdy, je-li I F. Obrázek Regulární přechodový graf. Věta 2.6. Pro libovolný regulární přechodový graf M = (Q, Σ, δ, I, F ) existuje ekvivalentní NFA M s ε-kroky. Věta 2.7. Pro každý regulární přechodový graf M = (Q, Σ, δ, I, F ) existuje ekvivalentní regulární přechodový graf M = (Q, Σ, δ, {x}, {y}), kde δ je definováno pouze pro dvojici (x, y). 2.3 Bezkontextové jazyky Zásobníkové automaty Definice Nedeterministický zásobníkový automat (Pushdown Automaton, PDA) je sedmice M = (Q, Σ, Γ, δ, q 0, Z 0, F ), kde 10

18 Q je konečná množina, jejíž prvky nazýváme stavy, Σ je konečná množina, tzv. vstupní abeceda, Γ je konečná množina, tzv. zásobníková abeceda, 2. FORMÁLNÍ JAZYKY A JEJICH REPREZENTACE δ Q ((Σ {ε}) Γ) P F in (Q Γ ), tzv. (parciální) přechodová funkce 1, q 0 Q je počáteční stav, Z 0 Γ je počáteční symbol v zásobníku, F Q je množina koncových stavů. Je-li δ(p, a, Z) definováno, pak zápis δ(p, a, Z) = {(q i, γ i ) 1 i n} intuitivně interpretujeme tak, že PDA M může ze stavu p po přečtení symbolu a ze vstupní pásky a symbolu Z z vrcholu zásobníku (Z se při tomto čtení z vrcholu odstraní) přejít do jednoho ze stavu q i a na vrchol zásobníku zapíše řetězec γ i (přičemž na vrcholu zásobníku je nyní nejlevější symbol z γ i ). Čtecí hlava se na vstupní pásce posune o jeden symbol vpravo. Obdobně interpretujeme (pokud je definováno) δ(p, ε, Z) s tím rozdílem, že pozice čtecí hlavy na vstupní pásce se nemění. Definice Necht M = (Q, Σ, Γ, δ, q 0, Z 0, F ) je PDA. Vnitřní konfigurací (též totálním stavem) M nazveme libovolný prvek (q, γ) Q Γ (kde q je momentální stav PDA M a γ je celý obsah zásobníku s vrcholem psaným vlevo). Konfigurací nazveme libovolný prvek (p, w, α) Q Σ Γ (udávající mimo totální stav navíc i w dosud nepřečtenou část vstupního řetězce). Na množině všech konfigurací automatu M definujeme binární relaci M (krok výpočtu) takto: (p, aw, Zα) M (q, w, γα) def (q, γ) δ(p, a, Z) pro a Σ {ε}. Poznámka: Reflexivní a tranzitivní uzávěr kroku výpočtu značíme M, její k-násobný součin značíme k M. Je-li M zřejmý z kontextu, píšeme stručněji, resp., resp. k. Definice Jazyk akceptovaný (též rozpoznávaný) PDA M koncovým stavem definujeme jako L(M) = {w Σ (q 0, w, Z 0 ) (q f, ε, α), kde q f F, α Γ }. Definice Jazyk akceptovaný (též rozpoznávaný) PDA M prázdným zásobníkem definujeme jako L e (M) = {w Σ (q 0, w, Z 0 ) (q, ε, ε), kde q Q}. 1. Zápis P F in (Q Γ ) značí množinu všech konečných podmnožin množiny Q Γ. 11

19 2. FORMÁLNÍ JAZYKY A JEJICH REPREZENTACE Příklad 2.4. Mějme PDA P = ({p, q, r}, {0, 1}, {Z, 0}, δ, p, Z, {p}), kde δ je definováno takto: δ(p, 0, Z) = {(q, 0Z)} δ(q, 0, 0) = {(q, 00)} δ(q, 1, 0) = {(r, ε)} δ(r, 1, 0) = {(r, ε)} δ(r, ε, Z) = {(p, ε)} Potom L e (M) = L(M) = {0 n 1 n n 0}. PDA akceptuje prázdným zásobníkem. Upravili bychom-li však přechodovou funkci a změnili δ(r, ε, Z) = {(p, ε)} na δ(r, ε, Z) = {(p, Z)}, tak L e (M) = a L(M) = {0 n 1 n n 0}. Reprezentace zásobníkových automatů Zásobníkové automaty lze stejně jako konečné automaty reprezentovat vizuálně. Jeden způsob zobrazení PDA je za pomocí stavového diagramu. Stavový diagram však není nejvhodnějším způsobem vyobrazení PDA, nebot má obecně nekonečně mnoho uzlů. Z tohoto důvodu se již nebudeme tímto způsobem vizualizace dále zabývat. Mnohem vhodnějším způsobem je zobrazit PDA za pomocí tabulky přechodové funkce (viz. obrázek 2.5 s vyobrazením přechodové funkce pro PDA z příkladu 2.4). Přechod z jednoho stavu do druhého je zde podmíněn kromě symbolu abecedy také symbolem na vrcholu zásobníku a řetězcem symbolů zásobníkové abecedy, které se zapisují na vrchol zásobníku při přechodu do druhého stavu. Obrázek Tabulka přechodové funkce zásobníkového automatu Modifikované bezkontextové gramatiky a normální formy Jelikož se nemalá část této práce věnuje transformacím bezkontextových gramatik, přijde mi vhodné napsat jejich definice již v této části textu. Lemma 2.4. (o substituci) Necht G = (N, Σ, P, S) je CFG. Necht A α 1 Bα 2 P je pravidlo a B β 1... β r jsou všechna B-pravidla z P. Necht dále G 1 = (N, Σ, P 1, S), kde P 1 = (P {A α 1 Bα 2 }) {A α 1 β 1 α 2... α 1 β r α 2 }. Pak L(G) = L(G). Definice Řekneme, že symbol X N Σ je nepoužitelný v CFG G = (N, Σ, P, S) právě když v G neexistuje derivace tvaru S wxy wxy pro nějaké w, x, y Σ. Řekneme, že G je redukovaná, jestliže neobsahuje žádné nepoužitelné symboly. 12

20 2. FORMÁLNÍ JAZYKY A JEJICH REPREZENTACE Poznámka: Povšimněte si, že výše uvedená definice postihuje nepoužitelnost dvojího druhu: neexistence první části uvedené derivace říká, že symbol X N Σ se nevyskytuje v žádné větné formě (jedná se o tzv. nedosažitelný symbol), kdežto neexistence druhé části zmíněné derivace vyjadřuje skutečnost, že z neterminálu X nelze vyderivovat terminální řetězec (tzv. nenormovaný, někdy též redundantní neterminál). Poznamenejme ještě, že existence obou derivací ještě není postačující podmínkou pro použitelnost symbolu: X se může totiž objevit jen v takové větné formě, která obsahuje nenormovaný neterminál. Věta 2.8. Každý neprázdný CFL je generován nějakou redukovanou CFG (tj. CFG bez nepoužitelných symbolů). Definice Řekneme, že CFG G = (N, Σ, P, S) je bez ε-pravidel, právě když bud : 1. P neobsahuje žádné ε-pravidlo (tj. pravidlo tvaru A ε nebo 2. v P existuje právě jedno pravidlo S ε a S se nevyskytuje na pravé straně žádného pravidla z P. Věta 2.9. Výstupní CFG G z algoritmu 5.4 je bez ε-pravidel a L(G) = L(G ). Definice Řekneme, že CFG G = (N, Σ, P, S) je bez jednoduchých pravidel, právě když P neobsahuje žádné pravidlo tvaru A B, kde A, B N. Definice Neterminál A v CFG G = (N, Σ, P, S) se nazývá rekurzivní, jestliže existuje derivace A + αaβ pro nějaká α, β. Je-li α = ε (resp. β = ε), pak se A nazývá levorekurzivní (resp. pravorekurzivní). CFG bez levorekurzivních neterminálů se nazývá nelevorekurzivní. Definice CFG G = (N, Σ, P, S) se nazývá necyklická, právě když neexistuje A N takový, že A + A. G se nazývá vlastní, právě když je bez nepoužitelných symbolů, bez ε-pravidel a necyklická. A-pravidlem nazveme každé pravidlo A α. Definice Řekneme, že CFG G = (N, Σ, P, S) je v Chomského normální formě (zkrác. CNF), právě když G je bez ε-pravidel (viz. def ) a každé pravidlo z P má jeden z těchto tvarů: 1. A BC, B, C N, 2. A a, a Σ. Definice Řekneme, že CFG G = (N, Σ, P, S) je v Greibachové normální formě (zkrác. GNF), právě když G je bez ε-pravidel (viz. def. 2.19) a každé pravidlo z P je tvaru A aα (a Σ, α N ). 13

21 3 Aplikace JGAF 3.1 Obecné poznatky Nástroj JGAF (z anglického Java Grammars and Automata Framework) je platformě nezávislá desktopová aplikace s grafickým uživatelským rozhraním a vlastním okenním systémem [3, p. 13]. Aplikace vznikla jako diplomová práce Mgr. Jana Rychtáře, aby pomáhala studentům při studiu formálních jazyků a automatů. V aplikaci bylo vytvořeno jednotné prostředí, v němž je možné vizualizovat reprezentace konečných automatů, gramatik, regulárních výrazů a zásobníkových automatů. Nad těmito reprezentacemi pak mohou uživatelé provádět různé úkony, jako je například převod regulární gramatiky na FA. Přenositelnost a nezávislost na architektuře je zajištěna programovacím jazykem, v němž je nástroj napsán. Java je objektově orientovaný programovací jazyk (zkrác. OOP), který vyvinula firma Sun Microsystems a představila jej v roce 1995 [7]. Pro vytvoření grafického prostředí (zkrác. GUI z anglického Graphical user interface) byla použita knihovna Swing, jež poskytuje aplikační rozhraní pro tvorbu a obsluhu klasického grafického uživatelského rozhraní. Pomocí Swingu je možno vytvářet okna, dialogy, tlačítka, rámečky, rozbalovací seznamy, atd.[8]. Obrázek Prostředí aplikace JGAF. 3.2 Spuštění Výhodou aplikace je, že není nutné ji instalovat, je distribuována jako adresář (jgaf) obsahující spustitelný soubor JGAF.jar. Program je možné spustit bud dvojklikem na ikonu 14

22 3. APLIKACE JGAF souboru JGAF.jar nebo z terminálu příkazem java -jar JGAF.jar. Aktuální adresář musí být nastaven na jgaf [3, p. 14]. Pro spuštění aplikace je potřeba mít nainstalovánu Java Virtual Machine (JVM), což je sada počítačových programů a datových struktur, která využívá modul virtuálního stroje ke spuštění dalších počítačových programů a skriptů vytvořených v jazyce Java. JVM je dodáván spolu se sadou standardních knihoven, které jsou nazývány Java API (Application Programming Interface). Application Programing Interface je systém, který umožňuje programu pracovat s funkcemi a třídami knihoven. JVM a API společně tvoří celek, který je poskytován jako Java Runtime Environment (JRE) [9]. Balík je možné si zdarma stáhnout na stránkách společnosti ORACLE. Samotná instalace je velmi jednoduchá a rychlá. Odkaz na stažení: < 3.3 Možnosti aplikace Zevrubnější popis aplikace naleznete v textové části diplomové práce pana Mgr. Rychtáře [3], kde jsou vysvětleny všechny funkce a jejich možnosti. Následující podkapitoly jsou spíše souhrnného informativního charakteru pro případy, kdy není potřeba přesnějšího popisu a vyhledávání informací v jiných pracích by bylo zbytečně zdlouhavé. Pro přehlednost byla použita stejná struktura jako v původní práci Základní ovládání Aplikace se ovládá pomocí hlavní nabídky a následně nástroji jednotlivých editorů, transformátorů, analyzátorů či simulátorů. Hlavní nabídka obsahuje položky: File - New vytvoří nový editor. Finite-state Automaton otevře nový editor konečných automatů. Push-down Automaton otevře nový editor zásobníkových automatů. Grammar otevře nový editor gramatik. Regular Expression otevře nový editor regulárních výrazů. - Open vyvolává dialogové okno pro výběr a následné otevření souboru. Aplikací vytvořené soubory mají příponu.jgaf. - Open recent file obsahuje deset naposledy otevřených souborů. - Save slouží k uložení obsahu aktuálního editoru. - Save as vyvolává dialogové okno pro uložení aktuálního editoru do vybraného souboru. - Export převede obsah editoru do jedné z následujících podob: vektorová grafika (SVG), rastrová grafika (PNG, GIF, JPG), prostý text (angl. plain text, TXT). - Exit ukončí aplikaci. 15

23 3. APLIKACE JGAF Obrázek Nabídka File. Transformation Analysis Simulation - FA to Regular grammar převede konečný automat na regulární gramatiku. - Regular Grammar to FA převede regulární gramatiku na konečný automat. - Epsilon steps elimination odstranění ε-kroků. - Inaccessible states Elimination odstranění nedosažitelných stavů. - NFA to DFA převede nedeterministický konečný automat na deterministický konečný automat. - Parallel asynchronous composition Paralelní asynchronní spojení konečných automatů. - Minimalize FA minimalizuje konečný automat. - Eliminate unreachable symbols odstraní nedosažitelné symboly. - Is language not empty? odstraní nenormované symboly. - Eliminate useless symbols odstraní nepoužitelné symboly. - Eliminate epsilon productions odstraní ε-pravidla. - Eliminate unit productions odstraní jednoduchá pravidla. - Eliminate left recursion odstraní levou rekurzi. - Transform CFG to CNF převede bezkontextovou gramatiku do Chomského normální formy. - Transform CFG to GNF převede bezkontextovou gramatiku do Greibachové normální formy. - RE to FA převede regulární výraz na konečný automat. - FA to RE převede konečný automat na regulární výraz. - DFA Equality test rovnosti jazyků rozpoznávaných dvěma deterministickými konečnými automaty. - DFA Simulation simuluje výpočet deterministického konečného automatu. - PDA Simulation simuluje výpočet nedeterministického zásobníkového automatu. 16

24 Window - Seznam otevřených editorů - Seznam otevřených procedur 3. APLIKACE JGAF - Show přesune vybraná okna do popředí, pravidelně je rozmístí po pracovní ploše aplikace a zbytek minimalizuje. All přesune do popředí všechna okna. Editors přesune do popředí jen editory. Procedures přesune do popředí jen procedury. - Close zavře všechna vybraná okna. All zavře všechna okna. Editors zavře editory. Procedures zavře procedury. - Minimize all minimalizuje všechna okna. Help - About otevře okno s informacemi o programu Okenní systém Každá entita (editor nebo procedura) má k dispozici své vlastní okno. Je tedy umožněno pracovat současně ve více oknech. Nástroj zajišt uje klasickou správu oken běžnými obecně zavedenými způsoby. Máme možnost okna maximalizovat, minimalizovat, zavírat, přesouvat a upravovat jejich velikost. Pro usnadnění manipulace je v hlavní nabídce zavedena podnabídka window, jež je rozepsána výše (kap ). Seznam všech editorů je uveden v první části nabídky pojmenované výstižně Seznam otevřených editorů. Pod ním následuje výpis všech otevřených procedur. Aktuálně používanou proceduru či editor zvýrazňuje ve výpisu symbol zatržítka. Aktuálně používané okno může být maximálně jedno a jsou na něj vázány funkce z podnabídky file. Pokud je okno jakýmkoliv způsobem minimalizováno, objeví se jeho reprezentace na spodní liště aplikace. Ikona si zachovává funkčnosti vypnutí a zvětšení na okno v původní velikosti. Je-li ikon více než kolik by se vlezlo na jeden řádek, jsou poskládány do řad nad sebou Editory Na následujících řádcích zlehka osvětluji funkcionalitu původních nezměněných editorů, jež jsou zevrubně popsány v [3, p.16, chap. 4]. Editor konečných automatů Jak sám autor uvádí, je editor konečných automatů svým rozsahem a funkcionalitou nejpropracovanější komponentou aplikace. 17

25 3. APLIKACE JGAF V editoru je možné pracovat se všemi modely konečných automatů uvedených v podkapitole 2.2.1, tj. s deterministickými konečnými automaty (dle definice 2.5). nedeterministický konečnými automaty (dle definice 2.6). nedeterministickými konečnými automaty s ε-kroky (dle definice 2.7). Automat je v editoru reprezentován jako přechodový graf, jehož vrcholy reprezentují stavy automatu a hrany indukují přechodovou funkci. Hrany nereprezentují přímo jednotlivé složky přechodové funkce δ Q (Σ {ε}) 2 Q z definice 2.7, ale určují relaci R Q (2 Σ {ε}), která indukuje δ [3, p. 17]. Ovládání editoru je zajištěno pomocí panelu nástrojů (viz. obr. 3.3). Obrázek Panel nástrojů Editor se nachází vždy právě v jednom ze čtyř režimů, mezi nimiž lze přepínat pomocí tlačítek v levé části panelu nástrojů (viz. obr. 3.3). nový stav Režim slouží k vytváření stavů přechodového grafu. Máme-li tedy vybraný tento režim, tak můžeme jednoduše, pomocí kliknutí levým tlačítkem myši na pracovní plátno, přidat nový stav, který se automaticky pojmenuje p i, kde i N je nejmenší přirozené číslo, tž. automat neobsahuje stav p i. nový přechod Chceme-li vytvořit přechodové hrany je potřeba přepnout do tohoto režimu. Každá hrana s návěštím a Σ indikuje přechodovou funkci δ(q, a) = p, kde q a p jsou již přidané stavy automatu. Hranu přidáme tak, že klikneme na stav q, z něhož má hrana vycházet (objeví se pomocná naváděcí hrana) a následně na stav p, do něhož má automat přejít ze stavu q pod a. Jednotlivé symboly v návěští se oddělují čárkou a prázdný řetězec je automaticky interpretován jako ε. Nutno však podoknout, že je potřeba symboly vkládat jednotlivě editor nepodporuje hromadné vložení symbolů oddělených čárkou a interpretuje je jako jeden symbol. Budeme-li chtít přidat přechodovou funkci δ(q, a) = q stači jednoduše kliknou dvakrát po sobě na stav q. nový popisek Režim pro přidávání popisku je pouze kosmetického charakteru a nemá na samotný automat žádný vliv. Popisek přidáme snadno kliknutím na pracovní plátno. Objeví se dialogové okno, do něhož popisek zapíšeme. základní režim Slouží k modifikaci samotného automatu a k úpravě zobrazení přechodového grafu na plátně. V tomto režimu můžeme pohybovat s jednotlivými objekty vytvořenými na pracovní ploše, máme možnost hromadného výběru stavů (nebo-li vrcholů grafu), můžeme upravovat popisky, přepisovat návěští hran a měnit nastavení grafu. Každý objekt má své vlastní možnosti úprav. 18

26 3. APLIKACE JGAF Objekty editoru konečných automatů: Hrany Hrany jsou v editoru reprezentovány jako kvadratické Beziérovy křivky a lze s nimi proto v tomto režimu pohybovat a měnit tak jejich vzhled. Editace vzhledu hrany se provádí metodou drag and drop. Při vybrání hrany si můžeme za pomocí pravého kliknutí myší zobrazit kontextovou nabídku, jež obsahuje následujíci volby: Add label slouží k přidání symbolu do návěští hrany. Add ε přidání přechodu pod prázdným slovem ε. Change labels umožňuje upravit návěští. Delete transition smaže hranu 1. Make straight vytvoří z hrany přímou orientovanou úsečku. Properties zobrazí dialogové okno, kde je možné měnit návěští, přidávat ε-krok a měnit barvu zobrazení. Stavy Stavy opět podporují pohyb po plátně tažením (metodou drag and drop). Překreslování podoby grafu je prováděno v reálném čase. Stejně jako u hran je u vybraného stavu možnost, pomocí kliknutí na pravé tlačítko myši, zobrazit kontextovou nabídku: Initial nastaví vybraný nepočáteční stav na počáteční a naopak 2. Final nastaví vybraný nekoncový stav 3 na koncový a naopak. Rename dovolí přejmenovat vybraný stav. Delete smaže vybraný stav a všechny s ním incidující hrany 4. Properties umožňuje měnit nastavení vybraného stavu. Iniciální šipka Iniciální šipka je samostatným objektem a je tedy možné ji spravovat. Je vždy maximálně jedna a symbolizuje počáteční stav automatu. Pomocí metody drag and drop je možné měnit její orientaci. Jako i k jiným objektům v editoru je k ní vázána kontextová nabídka: Orientation nastaví orientaci šipky. Properties umožňuje nastavit zobrazování iniciální šipky. Popisky Popisky lze opět po plátně libovolně přesouvat tažením. Kontextová nabídka obsahuje: Change caption umožní změnu popisku. Delete smaže popisek 5. Rotation otačí popisek dle vybrané možnosti Hranu je možné smazat i za pomocí tlačítka [Delete]. 2. Podle definice 2.7 je v automatu povolen pouze jeden počáteční stav. Při nastavení jiného stavu na počáteční se původní stav změní na nepočáteční. 3. q Q/F. 4. Opět je možné použít klávesu [Delete]. 5. Mazat lze i klávesou [Delete]. 6. Za pomocí kláves [ ], [ ] je možno popiskem otáčet ve směru (resp. proti směru) hodinových ručiček o

27 3. APLIKACE JGAF Plátno Plátno slouží jako podkladová plocha pro vytváření přechodového grafu. Plátno podporuje několik výběrů stavů: Kliknutí na plátno odznačí všechny stavy. Kombinace kláves [Ctrl + A] označí všechny stavy. Při stisknutí klávesy [Ctrl] a jejím podržení je umožněno postupné přidávání (resp. odebírání) stavů z výběru 7. Tažením na plátně vytvoříme blok, který označí všechny stavy uvnitř něj. Kontextová nabídka pak obsahuje volby: Select All vybere všechny stavy. Zoom In zvětší graf o 20%. Zoom Out zmenší graf o 20%. Clear Zoom vrátí přiblížení do základní polohy. Undo vrátí zpět naposledy provedenou akci. Redo vrátí zpět naposledy provedenou akci Undo. Hide/Show Labels skryje (resp. zobrazí) všechny popisky. Kolekce stavů Kolekce stavů slouží k jednodušší manipulaci s více stavy najednou. Výběr kolekce stavů byl popsán výše v sekci Plátno. S kolekcí pracujeme jako s jedním objektem a můžeme s ní opět tažením pohybovat po plátně. Kontextová nabídka je tvořena z těchto voleb: All accepting nastaví všechny stavy v kolekci jako koncové 8. None accepting nastaví všechny stavy v kolekci jako nekoncové 9. Swap accepting nastaví nekoncové stavy v kolekci jako koncové a naopak. Line Up slouží k zarovnání stavů do jedné linie vertikálně (resp. horizontálně) dle vybrané možnosti. Delete all smaže všechny stavy v kolekci 10. Dalšími funkcemi editoru jsou: Zoom In Zvětší velikost grafu o 20%. Zoom Out Zmenší velikost grafu o 20%. Clear Zoom Navrátí velikost grafu do základní podoby. 7. Klávesa [Ctrl] má ještě funkci, kdy při jejím podržení můžeme stiskem levého tlačítka myši na plátno a tahem posouvat s celým grafem najednou. 8. Lze použít klávesu [F]. 9. Lze použít klávesu [G]. 10. Lze použít klávesu [Delete]. 20

28 3. APLIKACE JGAF Undo Vrátí zpět naposledy provedenou akci. Redo Vrátí zpět naposledy provedenou akci Undo. Adjust Graphics Umístí graf do středu pracovního plátna. Je-li graf příliš velký, tak jej vhodně zmenší. Layout Graph Aplikuje algoritmus GEM [5], jež vhodně upraví graf do přehlednější podoby. Configuration Vyvolá dialogovou nabídku, v níž je možné provádět různá nastavení editoru. Automaton details Zobrazí úplné informace o automatu včetně přechodové funkce. V editoru je také implementována možnost pro zobrazení konečného automatu přechodovou tabulkou. Stačí v rolovací nabídce, na pravé straně panelu nástrojů (viz. obr. 3.3) vybrat možnost State transition table. Tato vizualizace je však jen informativní a není možné v ní provádět žádné úpravy automatu. Editor regulárních výrazů Editor pracuje s regulárními výrazy dle definice Okno editoru je rozděleno na tři základní komponenty (viz. obr. 3.4): 1. Panel nástrojů, jež obsahuje pouze čtyři funkce. Undo vrátí zpět naposledy provedenou akci. Redo vrátí zpět naposledy provedenou akci Undo. Fill in all parentheses ozávorkuje vytvořený regulární výraz. Only necessary parentheses odstraní z výrazu všechny nedůležité závorky. 2. Informační pole zobrazuje informační a varovná hlášení. 3. Vstupní pole slouží k vytváření a úpravě samotného regulárního výrazu. Vytváření výrazu je skutečně jednoduché, stačí jen kliknout na plátno a vzorec napsat. Zástupné znaky pro operace jsou vybrány klasicky pro zřetězení, + pro sjednocení a * pro iteraci. Zástupný řetězec pro ε byl volen jako eps. Stačí řetězec jen vepsat a editor jej sám převede. V průběhu zadávání výrazu je prováděna automatická syntaktická kontrola, je-li regulární výraz správně utvořen dle definice V editoru jsou rozlišeny tři typy chyb: Parentheses imbalanced znamená, že výraz je nesprávně uzávorkován. V informačním poli je chyba vypsána jako RE is not well-formed: Parentheses imbalanced. Nonatomic symbol signalizuje výskyt neatomického základního regulárního výrazu skladajícího se z více než jednoho symbolu. Chybová hláška je pak RE is not well-formed: Nonatomic symbol. 21

29 3. APLIKACE JGAF Wrong number of operands označuje nerespektování arity operátorů. Editor zahlásí RE is not well-formed: Wrong number of operands. Obrázek Komponenty editoru regulárních výrazů. Editor zásobníkových automatů Editor zásobníkových automatů byl již v původní práci převzat z [6]. V tomto editoru se pracuje s nedeterministickými zásobníkovými automaty dle definice Automaty jsou zde reprezentovány za pomocí tabulky přechodové funkce. Panel nástrojů má zde pouze čtyři tlačítka. Modify Umožnuje vytvářet a upravovat automat. Undo Vrací zpět naposledy provedenou akci. Redo Vrací zpět naposledy provedenou akci Undo. Automat details Zobrazí úplný výpis pro daný automat Transformace, Simulace, Analýza Kapitola se zaměřuje na představení již dříve vzniklých transformací, simulací a analýz, které byly obecně shrnuty pod pojem procedury. Dále už je používán pouze tento pojem. Kapitola se opět zakládá na práci [3, kap. 5]. Jelikož procedury jsou základem mé práce, popíši jejich spouštění více, i přesto, že již jsou ve zmíněné diplomové práci popsány. Spuštění procedury Procedury se spouští z hlavní nabídky pomocí tří podnabídek Transformation, Simulation a Analyze, které byly vypsány výše v kapitole Přestože jsou procedury logicky členěny, je jejich spouštění totožné pro všechny typy. Chceme-li spustit určitou proceduru, stačí si ji vybrat ze seznamu. Než se vytvoří samotná procedura, tak se spustí tzv. zavaděč procedury (viz obr. 3.5). Zavaděč procedury je dialogové okno sloužící k výběru vstupní reprezentace (příp. více reprezentací, jako například v případě Parallel asynchronous composition, kde je potřeba zvolit dva konečné automaty) a zadání vstupních parametrů. Na obrázku je vybrán zavadeč pro Eliminate left recursion, který vstupní bezkontextovou gramatiku převede na gramatiku bez levé rekurze. 22

30 3. APLIKACE JGAF Jako vstupní parametr je možné uvést neterminál, pro něhož se mají pravidla vypsat, typ pravidel, pomocí nichž se bude rekurze odstraňovat a seřazení neterminálů pro provádění běhu algoritmu. Podrobněji je průběh popsán v kapitole Eliminace levé rekurze (viz. 5.6). Samotný zavaděč se skládá ze čtyř částí: 1. Popis procedury. 2. Panel pro výběr vstupních reprezentací. Počet výběrových polí je generován dle arity procedury. Pro každý vstup máme možnost volby mezi načtením ze souboru a načtením z otevřených editorů určených reprezentací. Rozbalovací seznam automaticky filtruje správné editory. 3. Panel pro zadávání vstupních parametrů. Počet polí závisí na nastavení procedury. 4. Panel pro popis výstupu procedury. V případě eliminace levé rekurze bude výstupem opět gramatika. Obrázek Zavaděč procedury. Během spuštění procedury jsou automaticky zkontrolovány vstupní reprezentace a parametry. Pokud něco není v pořádku, je vypsáno chybové hlášení a procedura se nespustí. Okno procedury Po spuštění procedury se otevře okno procedury, jež je rozděleno do několika částí podle nastavení samotné procedury. Každá procedura obsahuje ovládací panel, vizuální náhledy na 23

31 3. APLIKACE JGAF vstupní a výstupní reprezentace a informační panel s textovým výpisem. Běh procedury je možné krokovat a sledovat jednotlivé kroky. Ovládání procedury Obrázek Ovládací panel procedury. Běh každého algoritmu je ovládán za pomocí několika ovládacích prvků: Previous Navrací stav procedury o jeden krok zpět. Next Zajistí provedení následujícího kroku. Play Spustí automatické provádění celého algoritmu po krocích se zpožděním nastaveným v poli delay. Čas je uváděn v milisekundách. Pause Pozastaví spuštěný běh. End Restartuje proceduru do základní podoby. Open Otevře vytvořenou reprezentaci v příslušném editoru. Následující prvek se zpřístupní až ve chvíli, kdy je běh procedury dokončen: Continue Spouští dialogové okno s možností výběru procedury, jež vezme jako vstup vytvořenou výstupní reprezentaci a provede spuštění nově vybrané procedury Rozšiřitelnost Jak sám autor uvádí ve své práci, je nástroj JGAF velmi rozsáhlým projekt a jeho celkové pochopení zabere opravdu hodně času. K jednoduššímu pochopení nenapomáhá ani skutečnost chybějící dokumentace JavaDoc, která by jistě zdrojové kódy aplikace zpřehlednila. I přes počáteční zádrhely je však program díky svým předimplementovaným rozšiřovacím bodům relativně snadno rozšiřitelný bez větších zásahů do samotného jádra programu a bez nutnosti perfektně ovládat celý projekt. Kompletní popis způsobů rozšíření je opět součástí [3] a pro potřeby pochopení této práce není nezbytně nutný. 24

32 4 Editory reprezentací 4.1 Editor gramatik Obrázek Editor gramatik. V následujícím textu Vám představuji upravený editor gramatik. Editor je postaven na dříve vytvořeném základu [3, p. 32, kap. 4.2], ale jeho funkcionalita, co se týče zadávání a ukládání gramatik, byla pozměněna. V předchozí verzi nebylo možné zadávat ε-pravidla pomocí vepsání textového řetězce a editace nedovolovala přidávání zkrácených pravidel. Do celkového popisu editoru, který je postaven na [3, p. 32, kap. 4.2], jsou přidány popisy nových možností Ovládání editoru Okno editoru je rozděleno na dvě základní části: panel nástrojů (viz. obr. 4.2) a plátno. Po přidání pravidel je možné pro ovládání využít i kontextových nabídek, jež byly speciálně vytvořeny pro správu jednotlivých entit. Panel nástrojů Obrázek Panel nástrojů. Panel nástrojů je základním stavebním kamenem editoru a poskytuje následující funkce. O některých z nich se podrobněji zmiňuji později. 25

33 4. EDITORY REPREZENTACÍ Add empty rule Vloží prázdné pravidlo na plátno. Více v podkapitole Vytvoření gramatiky (viz. kap ). Remove empty rules Smaže všechna prázdná pravidla z plátna. Undo 1 Vrátí zpět naposledy provedenou akci. Zajišt uje posun v historii směrem zpět. Redo Vrátí zpět naposledy provedenou akci Undo. Zajišt uje posun v historii směrem vpřed. Sort ascending 2 Setřídí pravidla lexikograficky vzestupně (shora dolů). Sort descending Setřídí pravidla lexikograficky sestupně (shora dolů). Grammar details Zobrazí úplný výpis gramatiky. Type of grammar Zobrazí typ gramatiky podle Chomského hierarchie (viz. kap ). Typ 2 (CFG) nyní povoluje i pravidla s prázdným řetězcem na pravé straně pravidla (tzv. ε-pravidla). Více v kapitole Odstranění epsilon pravidel (viz. kap. 5.4). Výběr počátečního symbolu Výběr se provádí v rozbalovacím seznamu, kde jsou vypsány všechny neterminály použité v gramatice Vytvoření gramatiky Vytváření gramatiky je vskutku jednoduchá záležitost. Za pomocí tlačítka Add empty rule si na pracovní plátno přidáme tolik prázdných pravidel, kolik budeme potřebovat (viz. obr. 4.3). Prázdná pravidla lze samozřejmě přidávat kdykoliv během vytváření gramatiky a jejich počet není nijak omezen. Každé pravidlo je rozdělo na tři části: levou stranu pravidla, šipku a pravou stranu pravidla. Vytvořená pravidla jsou pak stejného tvaru jako pravidla v definici 2.4. Levá i pravá strana jsou editovatelné. Šipka pouze dotváří vizuální vzhled pravidel gramatiky. Chceme-li tedy nyní editovat pravidlo, Obrázek 4.3 Prázdná musíme dvojklikem na levou (resp. pravou) stranu od šipky otevřít pravidla. editační pole. V tuto chvíli můžeme do polí klasicky vepisovat symboly. Editor automaticky generuje množinu terminálů i neterminálů. Jako terminální symboly jsou rozpoznávána malá písmena latinské abecedy a nově, pro přehlednost, i ε, nebot se nyní může objevit na pravé straně pravidel, a jako neterminální symboly velká písmena latinské abecedy. Vnitřní reprezentace takto omezena není, což je vidět napří- 1. Editor si ukládá jednotlivé provedené kroky do vnitřní historie, v níž je možné se pohybovat pomocí Undo a Redo. 2. Nejdříve podle levé strany pravidla, a potom podle pravé strany pravidla. 26

34 4. EDITORY REPREZENTACÍ klad u Transformace do Greibachové normální formy, kdy jsou vytvářeny nové neterminály z terminálů za pomocí hranatých závorek a vzniká tak symbol tvořený třemi znaky [a], kde a je původní terminál. Zkrácená pravidla V původní práci byla pravidla vytvářena vnitřně tak, že levá i pravá strana byly stejnými objekty a měly i stejné chování a reprezentaci uvnitř gramatiky. Nově již tomu tak není. Každá strana má nyní svou vlastní reprezentaci, která dovoluje, aby jejich chování mohlo být obecně různé. Levá strana pravidla si zachovala svou původní funkcionalitu tzn. nelze vložit špatně utvořené pravidlo. Pokud by vkládaný řetězec obsahoval nepovolené nebo tzv. bílé znaky, nebude do pravidla vložen a editační pole zůstane po potvrzení vložení 3 prázdné. Samozřejmě i symbol ε je považován na levé straně za nepovolený znak. Pokud se ε pokusíme vložit vepsáním řetězce eps, který je používám u pravé strany pravidla, bude vytvořeno pravidlo se třemi terminály e, p, s. Pravá strana pravidla se však dočkala změn. Vnitřní reprezentace je tvořena polem a můžeme tedy jednoduše vkládat i zkrácená pravidla. Rozdělujícím znakem se stal klasicky používaný symbol. Jedno editační pole pravé strany zastupuje několik pravidel, jak je možné vidět na obrázku 4.1. Každá část zkráceného pravidla je kontrolována zvlášt a je k ní přistupováno jako k samostatné jednotce. Pokud se nám stane, že špatně zapíšeme některou část pravidla, například se pokusíme zavést pravidlo ve tvaru A+bc ε a AA abc, kde symbol + není podporován, smaže se nám pouze špatně utvořená jednotka a zbytek pravidel se uloží. V našem případě bude výpis vypadat následovně ε a AA abc. Ani zde nejsou podporovány bíle znaky, avšak na rozdíl od levé strany je umožněno vkládat ε-pravidla (viz. odstavec ε-pravidla). Jednotky jednoho pravidla jsou kontrolovány také na duplicity. ε-pravidla Do editoru byla přidána nově i možnost vložení ε-pravidla pomocí řetězce eps 4. Pravidlo je rovnou i vizualizováno symbolem ε. Editor nyní ovládá i práci s tímto symbolem. Kvůli nutnosti pozdější práce s ε-pravidly bylo potřeba také pozměnit export a import gramatik do (resp. ze) souborů.jgaf. Symbol ε získal svůj vlastní XML tag a je s ním pracováno jako s plnohodnotným symbolem pravidel. Díky změnám ve vnitřní reprezentaci bylo potřeba lehce pozměnit i celkové chování programu JGAF. Konkrétně se jednalo o obarvování pravidel a hlavně o dvě procedury, které s gramatikami pracují, FA to Regular grammar a Regular grammar to FA. Funkčně se nic nezměnilo, rozdíl je pouze v uchovávání reprezentace pravidel a v práci s nimi, pro což byly vytvořeny i nové metody, které toto vše umožňují. Veškerou funkcionalitu, kterou měl editor dříve, si samozřejmě zachoval. 3. Potvrzení se u levé i pravé strany vykonává za pomocí tlačítka [Enter] nebo překliknutím na jiné editační pole. 4. Bez uvozovek. 27

35 4. EDITORY REPREZENTACÍ Editace Editace obou části pravidel se provádí stejným způsobem jako jejich vyplňování. Dvojklikem levého tlačítka myši na požadovanou stranu pravidla aktivujeme opět editační pole, kde můžeme s textem pracovat stejným způsobem, jako bychom jej vytvářeli. Vytvořená pravidla však umožňují i editaci pomocí kontextových nabídek, které jsou různé pro každou jednotlivou část: Kontextová nabídka levé strany pravidla [ clear] vymaže levou stranu pravidla (tzn. nastaví ji na prázdný řetězec). Kontextová nabídka šipky [ delete] vymaže celé pravidlo. Kontextová nabídka pravé strany pravidla [ clear] vymaže pravou stranu pravidla (tzn. nastaví ji na prázdný řetězec). [ Set to ε] nastaví pravou stranu pravidla na ε Výpis Pro zobrazení úplného výpisu gramatiky slouží tlačítko z panelu nástrojů (viz. obr. 4.2). Zobrazí se dialogové okno, které umožňuje dva typy zobrazení pravidel gramatiky. Basic pravidla jsou zobrazena v základním tvaru (viz. obr. 4.4a). Shorten pravidla jsou zobrazena ve zkráceném tvaru a jednotlivé jednotky jsou odděleny klasicky používaným symbolem (viz. obr. 4.4). Obrázek 4.4a Klasická pravidla. Obrázek 4.4b Zkrácená pravidla. Zobrazení pravidel není nijak ovlivněno jejich formou z editačního plátna, přestože vnitřní reprezentace je určena právě tímto plátnem, a vizualizaci určuje pouze vybraný typ. Na obrázcích je vypsána gramatika z obrázku

36 4. EDITORY REPREZENTACÍ Analýza Poslední důležitou funkcí editoru je schopnost rozpoznávání typu gramatiky podle Chomského hierarchie (viz. kap ). Tlačítko vyvolá informační dialog s vypsaným typem gramatiky. Pokud není gramatika správně utvořena podle definice 2.4 objeví se G is not well formed (viz. obr. 4.5). Obrázek Výpis pro špatně utvořenou gramatiku. 29

37 5 Transformace Na začátku každé podkapitoly je vždy uveden pseudokód algoritmu použitého v dané transformaci. Pseudokódy byly opět převzaty ze skript pro předmět IB005 Formální jazyky a automaty [1]. Každou jednotlivou proceduru je možné krokovat dopředu i zpět a ovládat ji stejným způsobem, jak bylo popsáno v kapitole 3.3.4, bez omezení. Na základní funkčnosti nebylo nic změněno. Většina procedur přidaných při rozšiřování nástroje byla obohacena o různé parametrizace, které umožňují určitý, předem daný, uživatelský zásah do běhu algoritmu. Jelikož se algoritmy vždy před vizualizaci provedou celé, bylo by pamět ově i časově velice náročné zajistit podporu všech možností. U některých procedur by nároky narůstaly exponenciálně. Z tohoto důvodu je uživatelský vstup zajištěn parametrizaci před spuštěním samotného algoritmu. Způsoby ovlivnění každé procedury jsou popsány v kapitole, která se jí zabývá. Vždy je nutné vyplnit všechny vstupní parametry procedury, jinak nebude spuštěna. Poznámka: V kapitole budu volně zaměňovat algoritmus a pseudokód ve chvílích, kdy je jasně vidět, jestli je myšlena vnitřní programová struktura nebo v textu uvedený pseudokód. 5.1 Je jazyk L(G) neprázdný? Tato procedura figuruje v podnabídce Transformation pod názvem Is language not empty?. Základem pro programovou část procedury se stal algoritmus vytvořený v práci Webová Java aplikace pro zobrazení a simulaci LR(k) a LALR(k) analyzátorů [4, p.5, kap ], kde bylo potřeba pro analyzátory použít redukovanou gramatiku ve smyslu definice Původní program bylo zapotřebí pozměnit pro potřeby nástroje JGAF. Vstup Výstup CFG G = (N, Σ, P, S). ANO je-li L(G) ; NE v ostatních případech. Dle následujících kroků konstruuj induktivně množiny N 0, N 1,... takto: (1) i = 0; N 0 = ; (2) repeate (3) i = i + 1; (4) N i = N i 1 {A A α P, α (N i 1 Σ) } (5) until N i = N i 1 ; (6) N e = N i ; (7) if S N e then output( ANO ) else output( NE ); Algoritmus 5.1 [1, p. 62, alg. 3.1] Algoritmus pracuje ve smyslu definice 2.18 a postihuje druhou část derivace, kdy z počátečního neterminálu S je, či není možné vyderivovat terminální řetězec. Je-li počáteční neterminál 30

38 5. TRANSFORMACE gramatiky G redundantní, není možné z něj vytvořit větu ve smyslu definice relace odvození (viz. def. 2.4), je jazyk vytvořený touto gramatikou prázdný L(G) =. Pseudokód 5.1 provádí právě tuto kontrolu a jeho návratovou hodnotou je bud ANO, pokud je jazyk L(G) neprázdný, nebo NE, v opačném případě. Vstupem procedury je bezkontextová gramatika (CFG, typ 2 dle Chomského hierarchie), na níž nejsou kladeny žádné speciální požadavky krom toho, aby byla správně utvořená. Výstupem algoritmu je již zmíněné oznámení ANO/NE. Samotný transformátor však řeší i následné odstranění nenormovaných neterminálů a vytvoření gramatiky bez redundantních symbolů. Induktivně vytvářené množiny N i jsou definovány jako množiny neterminálů, které se přepíší na terminální řetězec v nejvýše i krocích 1. V prvním kroce vypadá N 1 pro gramatiku G z příkladu 2.1 takto: N 1 = {S, A, B}. Nutno podotknout, že v tomto případě bude i N 2 = {S, A, B}. Bude tedy rovnou splněna podmínka N i = N i 1 pro ukončení cyklu ř.(2) - (5). V informačním poli procedury se postupně vypisují všechny množiny N i. Po skončení běhu algoritmu popsaného pseudokódem 5.1 se spustí vytváření nové gramatiky G bez redundantních symbolů. Samozřejmě pouze za předpokladu, že jazyk vytvořený gramatikou G nebyl prázdný. V zobrazovací části pro výstupní reprezentaci se budou postupně přidávat pravidla nové gramatiky Parametrizace procedury Is language not empty má pouze jeden vstupní paramater, do něhož je nutné zapsat neterminální symbol spadající pod jednu z možností: Počáteční neterminál Bude-li zadán počáteční neterminál, bude proveden celý běh procedury dle pseudokódu 5.1 a bude vytvořena gramatika bez redundantních symbolů. Libovolný neterminál Neterminál však musí být obsažen na levé straně některého pravidla vstupní gramatiky. Procedura se spustí jakoby počáteční neterminál byl námi určený neterminál a zjistí, jestli je z uvedeného neterminálu možné vytvořit terminální řetězec. Následně jsou vypsána všechna pravidla, která lze pro vytvoření věty použít. Rozdílné běhy algoritmu si můžeme prohlédnout na obrázcích 5.1, kde v prvním případě byl za vstupní parametr volen neterminál S a v druhém případě neterminál B. Podrobněji je běh procedury popsán pro eliminaci levé rekurze v kapitole 5.6. Obrázek Odstranění redundatních symbolů. 1. Uvažme, že α na řádku (4) je definována jako α (N i 1 Σ), tedy jako platné pravidlo je bráno i prázdné slovo ε, na než se může neterminál A přepsat v jednom kroce. 31

39 5. TRANSFORMACE 5.2 Eliminace nedosažitelných symbolů Proceduru můžeme v seznamu nalézt pod označením Eliminate unreachable symbols. Jako základ při programování byl opět použit již napsaný kód v [4, p.6, kap ], upravený pro potřeby aplikace. Vstup CFG G = (N, Σ, P, S). Výstup CFG G = (N, Σ, P, S) bez nedosažitelných symbolů. L(G) = L(G ). Dle následujících kroků konstruuj induktivně množiny V 0, V 1,..., takto: (1) i = 0; V 0 = {S}; (2) repeate (3) i = i + 1; (4) V i = V i 1 {X A.(A αxβ P A V i 1 )} (5) until V i = V i 1 ; (6) N = N V i, Σ = Σ, P = P (V i V i ); (7) output(g ); Algoritmus 5.2 [1, p. 63, alg. 3.2] Algoritmus pro eliminaci nedosažitelných symbolů je dalším krokem pro vytvoření redukované gramatiky podle definice Eliminace postihuje první část derivace v definici, kdy se symbol X N Σ nevyskytuje v žádné větné formě a je tedy nedosažitelný z počátečního neterminálu. Postupně jsou induktivně napočítávány množiny symbolů V i tak, že množina V 0 = {S}, kde S je počáteční symbol a každá další množina obsahuje právě ty symboly X, pro které existuje větná forma, v níž jsou obsaženy, a pravidlo A αxβ P, kde A zastupuje symboly napočítané v předchozí množině V i 1. Množina V 1 bude tedy obsahovat všechny symboly X, jež se vyskytují na pravé straně pravidel, jejichž levá strana je tvořena právě počátečním symbolem. Procedura postupně napočítává množiny V i a skončí ve chvíli, kdy je splněna podmínka V i = V i 1. Následně je vypsána množina V i a množina všech levých stran 2. V dalším kroku procedura začne vytvářet novou gramatiku přidáváním pravidel do množiny P = P (V i V i ). Tvoření gramatiky je zároveň vizualizováno na výstupním plátně. Poznámka: Procedura, pro zjednodušení, uvažuje za X pouze neterminální symboly tzn. X N. Toto zjednodušení je prováděno bez újmy na obecnosti a nijak neovlivní výstup procedury Parametrizace procedury Parametrizování procedury pro eliminaci nedosažitelných symbolů je prováděno za stejných podmínek jako v případě algoritmu pro zjišt ování prázdnosti jazyka (viz. kap ). Vstupem mohou být pouze: 2. Vstupní gramatika je CFG, tzn. levé strany jsou tvořeny pouze neterminály. 32

40 5. TRANSFORMACE Počáteční neterminál Zadáním počátečního neterminálu se provede celý běh procedury podle pseudokódu 5.2 a výstupem bude gramatika bez nedosažitelných symbolů. Libovolný neterminál Je-li zadaný neterminál na levé straně některého pravidla gramatiky, spustí se běh algoritmu, který je lehce odlišný než v případě zadání počátečního neterminálu. Postupně se napočítávají množiny V i, jenž v tuto chvíli označují symboly, z nichž je neterminál dosažený v i-tém kroce. Nakonec je vypsáno, je-li neterminál dosažitelný z počátečního neterminálu, či nikoli a je vypsána gramatika bez nedosažitelných symbolů. 5.3 Eliminace nepoužitelných symbolů V seznamu nalezneme Eliminaci nepoužitelných symbolů pod položkou Eliminate useless symbols. Vstup CFG G = (N, Σ, P, S) taková, že L(G). Výstup CFG G = (N, Σ, P, S) bez nepoužitelných symbolů. L(G) = L(G ). (1) Použij algoritmus 5.1 se vstupem G a výstupem N e ; (2) Polož G 1 = (N N e, Σ, P 1, S), kde P 1 = P (N e (N e Σ) ); (3) Použij algoritmus 5.2 se vstupem G 1 ; výstupem je G = (N, Σ, P, S); Algoritmus 5.3 [1, p. 63, alg. 3.3] Naprogramovaný algoritmus koresponduje s pseudokódem 5.3, tzn. že ř.(1) a (3) jsou prováděny skrytě 3. Bude-li chtít uživatel ilustrovat samotný průběh jednotlivých dílčích algoritmů je nucen využít výše popsaných procedur, Je jazyk L(G) prazdný? resp. Eliminace nedosažitelných symbolů. Vytváření pomocné gramatiky G a výstupní gramatiky G již je doprovázeno textovým výpisem. Vstupem algoritmu je nyní bezkontextová gramatika, která generuje neprázdný jazyk L(G) výstupem gramatika bez nepoužitelných symbolů přesně podle definice Paramatrizace procedury V případě odstraňování nepoužitelných symbolů určuje vstupní parametr pořadí prováděných algoritmů. V předmětu IB005 Formální jazyky a automaty se formálně dokazovalo, že na pořadí provádění algoritmů záleží a výstupy jsou pak obecně různé. Provedeme-li nejdříve algoritmus 5.2, může se stát, že po provedení algoritmu 5.1 vzniknou nové nedosažitelné symboly a výstupní gramatika nebude splňovat podmínky definice Pokud však opět spustíme algoritmus 5.2, bude výstupní gramatika stejná jako v případě klasického postupu. 3. Tato skutečnost je způsobena snahou vyhnout se zbytečným duplicatam v kódu a hlavně z důvodu ilustrace průběhu algoritmu ve chvíli, kdy je zadán požadavek o neklasický průběh algoritmu (viz. kap. 5.3). 33

41 5. TRANSFORMACE Oba postupy si předvedeme na gramatice G = ({S, X, Y }, {a}, P, S) s pravidly: P = {S X a X Y X Y a} Classic Spusti klasický běh procedury přesně podle postupu 5.3. Klasický mód se spustí i v případě, že bude do vstupního pole zapsán nějaký špatný výraz. Změny pravidel v gramatice jsou následovné: 1. S X a X Y X Y a 2. S a Y a 3. S a 1. Vstupní pravidla. 2. Pravidla po provedení algoritmu 5.1 je odstraněn redundantní neterminál X. 3. Pravidla po provedení algoritmu 5.2 je odstraněn nedosažitelný neterminál Y. Unusual Procedura bude spuštěna v opačném pořadí provádění algoritmů. Nejdříve 5.2, a poté 5.1. Na závěr je spuštěno ještě jednou odstranění nedosažitelných symbolů, abychom zajistili, že výstupní gramatika bude redukovaná. Postup jde krásně vidět na uvedeném příkladu. 1. S X a X Y X Y a 2. S X a X Y X Y a 3. S a Y a 4. S a 1. Vstupní pravidla. 2. Pravidla po provedení algoritmu 5.2 žádný neterminál nebyl nedosažitelný a nebylo potřeba nic odstraňovat. 3. Pravidla po provedení algoritmu 5.1 neterminál X je redundantní, a proto byl odstraněn. Pokud bychom v tuto chvíli ukončili běh procedury, bude výstupní gramatika jiná než v klasické verzi a symbol Y je nedosažitelný. Z toho důvodu se opět spustí algoritmus Pravidla po opětovném provedení algoritmu 5.2 byl odstraněn nedosažitelný neterminál Y a výstupní gramatika je shodná s gramatikou z klasického běhu. 34

42 5. TRANSFORMACE 5.4 Eliminace ε-pravidel V seznamu ji najdeme pod označením Eliminate epsilon productions. Chomského hierarchie nedovoluje, aby gramatika obsahovala prázdné slovo jinde než v pravidle S ε, a to jen v případě, že S není na levé straně žádného pravidla. Pro potřeby rozšíření jsme v CFG gramatikách tedy povolili i ε-pravidla na pravé straně. V této kapitole ukazuji konstrukci, která převede takovouto gramatiku na gramatiku bez ε-pravidel. Podle věty 2.9 je jasné, že jazyk L(G ) tvořený výstupní gramatikou je stejný jako jazyk L(G) tvořený vstupní gramatikou. Vstup CFG G = (N, Σ, P, S). Výstup CFG G = (N, Σ, P, S ) bez ε-pravidel: L(G) = L(G ). (1) Zkonstruuj N ε = {A N A ε} (* analogicky jako N e z algoritmu 5.1 *); Množinu pravidel P zkonstruuj takto: (2) for all A X 1... X n P do (3) přidej do P všechna pravidla tvaru A α 1... α n z P splňující tyto podmínky: (4) (a) pokud X i / N ε (* tj.x i / ε *), pak α i = X i ; (5) (b) pokud X i N ε (* tj.x i ε *), pak α i je bud X i nebo ε; (6) (c) ne všechna α i jsou ε; (* tj. nepřidávej pravidlo tvaru A ε *) (7) end for (8) if S N ε (9) then přidej do P pravidla S S ε(s / N Σ); N = N {S }; (10) else N = N; S = S; Algoritmus 5.4 [1, p. 64, alg. 3.4] Celý algoritmus se skládá ze dvou částí. V první části se postupně napočítávají množiny N ε obdobně jako v algoritmu 5.1 množiny N e. Nyní však množina N εi obsahuje všechny neterminály, které se dokáží přepsat v i-tém kroce na prázdné slovo. Druhá část algoritmu pak zadává předpis pro tvorbu nových pravidel. Na závěr se přidá nový počáteční neterminál spolu s dvěma novými pravidly, právě když existuje derivace z počátečního neterminálu na prázdné slovo. Celý běh procedury si, pro snadnější pochopení, ilustrujeme na příkladu: G = ({A, B, C}, {a, b, c, ε}, P, S), kde P = {S ABC A AbA BC B bb b ε C cd c ε D SSS b} 35

43 5. TRANSFORMACE 1. Napočítáme si induktivně množiny N εi. N ε0 = {B, C} N ε1 = {A, B, C} N ε2 = {A, B, C, S} N ε3 = {A, B, C, D, S} N ε = N ε4 = N ε3 2. Bereme pravidlo po pravidle a postupně vytváříme nová pravidla. V každém pravidle se kontroluje symbol po symbolu a zjišt uje se, jestli je obsažen v množině N ε. Pokud symbol v N ε není, nic se neděje, v opačnem případě je nutné přidat jak pravidlo s tímto symbolem, tak i pravidlo bez něj, nebot se v konečně mnoha krocích může přepsat na ε. S ABC AC. Neterminál B N ε. Přidáme tedy do nové gramatiky jak pravidlo S ABC, tak i S AC. Stejným postupem přidáváme do gramatiky i všechna ostatní. 3. Nakonec zkontrolujeme, jestli leží počáteční symbol S N ε, což v našem případě platí, a případně přidáme nový počáteční symbol a nová pravidla S ε S. Výsledná pravidla pak vypadají následovně: P = {S ε S S ABC BC AC AB A B C A AbA ba Ab b BC B C B bb b C cd c D SSS SS S b} Procedura se přesně řídí tímto postupem a jednoduše tak vizualizuje eliminaci ε-pravidel Parametrizace procedury Výpis algoritmu může být opět ovlivněn zadáním vstupního parametru. Můžeme si tak snadno prohlédnout pravidla jen určitého neterminálu, což se stává velmi prospěšným u větších gramatik, kde se zobrazení celé gramatiky stává lehce nepřehledné. Řetězec def 4 Řetězec def byl vybrán jako zkrácení slova default. Zadáme-li do vstupního pole tento řetězec, proběhne celý algoritmus beze změn a na výstupu se zobrazí gramatika bez ε-pravidel podle definice Libovolný neterminál Samozřejmě je opět nutné, aby byl neterminál na levé straně některého pravidla. Na výpisu se následně zobrazí pouze pravidla určeného neterminálu. Možnost zobrazení jen určitých pravidel by mělo usnadnit pochopení vytváření pravidel po napočítání množiny N ε. 4. Bez uvozovek. 36

44 5. TRANSFORMACE 5.5 Eliminace jednoduchých pravidel V seznamu označená jako Eliminate unit rules. Vstup CFG G = (N, Σ, P, S) bez ε-pravidel. Výstup CFG G = (N, Σ, P, S ) bez jednoduchýh a ε-pravidel. L(G) = L(G ). (1) for all A N do (2) zkonstruuj N A = {B N A B} takto (* opět srv. s V 0, V 1,... z alg. 5.2 *) (3) i = 0; N i = {A}; (* inicializace: reflexivita *) (4) repeat (5) i = i + 1; (* iterace: tranzitivita *) (6) N i = N i 1 {C B C P, B N i 1 }; (7) until N i = N i 1 ; (* test ukončení *) (8) N A = N i ; (9) end for (10) Množinu pravidel konstruuj takto: (11) for all B α P, které není jednoduché do (12) přidej do P pravidla A α pro všechna A taková, že B N A ; (13) end for Algoritmus 5.5 [1, p. 65, alg. 3.5] Eliminace jednoduchých pravidel je velmi jednoduchá procedura, která slouží k eliminaci pravidel tvaru A B, kde A, B N. Pro každý neterminál A N se opět induktivně napočítávají množiny N Ai, jež obsahují neterminály, na něž se A přepíše právě v i krocích. Pro každý neterminál je vytvářena samostatná množina N A. Nasledně jsou vytvářena nová pravidla s vynecháním jednoduchých pravidel. Vstupní gramatikou je nyní CFG bez ε-pravidel podle definice Parametrizace procedury Proceduru je opět možné ovlivnit zadáním vstupního parametru. Můžeme si tak zase snadno prohlédnout pravidla jen určitého neterminálu. Řetězec def Zadáme-li do vstupního pole řetězec def, zůstane průběh procedury nezměněn a na výstupu se zobrazí gramatika bez jednoduchých pravidel podle definice Libovolný neterminál Neterminál musí figurovat na levé straně některého pravidla. Na výpisu se následně zobrazí pouze pravidla určeného neterminálu. 37

45 5. TRANSFORMACE 5.6 Eliminace přímé levé rekurze Lemma 5.1. (O eliminaci bezprostřední levé rekurze) Necht G = (N, Σ, P, S) je CFG, v níž všechna A-pravidla jsou tvaru A Aα 1... Aα m β 1... β n, kde 1 β i A pro všechna 1 i n. (*) Necht G = (N {A }, Σ, P, S), kde P obdržíme z P tak, že všechna pravidla označená (*) nahradíme pravidly: Pak L(G) = L(G ) [1, p. 72]. A β 1... β n β 1 A... β n A, A α 1... α m α 1 A... α m A. (**) Poznámka: Jestliže G je bez ε-pravidel, pak i ekvivalentní G má tuto vlastnost. Pravidla (*) lze též nahradit namísto pravidel (**) pravidly: A β 1 A... β n A, A α 1 A... α m A ε. (***) Pro přehlednější studium byly v nástroji JGAF implementovány dvě procedury pro eliminaci levé rekurze. První procedurou je eliminace přímé levé rekurze, v nástroji označená jako Eliminate direct left recursion. Algoritmus odstraňuje pouze přímou levou rekurzi podle lemmatu 5.1. Jelikož lemma umožňuje dvě možnosti nahrazování pravidel, procedura taktéž nabízí výběr typu nahrazení. Pravidla jsou procházena postupně. Je-li v něm nalezena levá rekurze, tak se pravidlo z gramatiky vyřadí a nahradí se podle zvoleného typu pravidel (viz. kap ) Parametrizace procedury Procedura má nyní dva vstupní parametry. První ovlivňuje výpis stejně jako u dříve popsaných algoritmů. Druhý určuje typ pravidel, kterými se bude přímá levá rekurze nahrazovat. První parametr určuje, jak bude vypadat výsledný výpis. Řetězec def Spustí běžný průběh algoritmu. Výstupem je gramatika bez přímé levé rekurze. Libovolný neterminál Budou vypsána jen pravidla zvoleného neterminálu bez přímé levé rekurze. Druhý parametr určuje, jakým způsobem budou vytvářena pravidla při odstraňování přímé levé rekurze. Parametr se rozlišuje vepsáním číslice 1 nebo 2 do vstupního pole. Není-li do pole zapsáno číslo, je vypsáno chybové hlášení. Typ 1 Je určen číslicí 1 zapsanou do vstupního pole. Pravidla jsou vytvářena podle vzoru (**). Typ 2 Typ 2 je zvolen pokaždé, když není zvolen typ 1, aniž by záleželo na zadaném číslu. Pravidla jsou vytvářena podle vzoru (***). 38

46 5. TRANSFORMACE 5.7 Eliminace levé rekurze Procedura byla pojmenována jako Eliminate left recursion. Vstup Výstup Vlastní CFG G = (N, Σ, P, S). CFG G = (N, Σ, P, S ): L(G) = L(G ); G je nelevorekurzivní. (1) Uspořádej libovolně N, N = {A 1,..., A n }. (2) for i = 1 to n do (2) for j = 1 to i 1 do (3) for all pravidlo tvaru A i A j α (* tj. zde platí j < i *) do (4) přidej A i β 1 α... β k α, kde A j β 1... β k jsou všechna A j -pravidla; (5) vypust pravidlo A i A j α; (* = aplikace lemmatu 2.4*) (6) end for (7) end for (8) (* následuje eliminace bezprostřední levé rekurze pro A i -pravidla dle lemmatu 5.1 *) (10) for all pravidlo tvaru A i A i α do (11) přidej A i αa i ε; (* tj. použití pravidel (***); variantu (**) lze též použít *) (12) vypust pravidlo A i A i α; (13) end for (14) přidej A i β 1 A... β k A, kde A j β 1... β k jsou všechna A i -pravidla, pro něž platí, že 1 β k A i ; (15) end for Algoritmus 5.6 [1, p. 73, alg. 3.7] Algoritmus používá pro výpočet nějaké libovolné setřídění neterminálů. Procedura pak uživateli dovoluje toto setřídění nadefinovat. Následně jsou postupně vybírány neterminály A i ze setříděné množiny od nejmenšího po největší a je pro ně prováděno hlavní tělo programu, které si rozdělíme na dvě části. V první části se kontroluje, zda se vybraný neterminál přímo levorekurzivně přepisuje na některý vyšší neterminál 5. Pokud ano, je původní pravidlo nahrazeno novými pravidly podle určeného předpisu. V druhé části se znovu kontrolují všechna, i v první části nově vzniklá, pravidla tentokrát na přímou levou rekurzi podle lemmatu 5.1. Průběh je stejný jako v případě Eliminace přímé levé rekurze. Na závěr jsou pak upravena všechna pravidla, která nemají žádnou rekurzi a jsou přidána do výstupních pravidel. 5. Myšleno v uvedeném setřídění. 39

47 5. TRANSFORMACE Eliminace levé rekurze dovoluje opět pracovat s oběma typy pravidel definovanými v lemmatu 5.1 a přilehlé poznámce. Pokud bychom však chtěli gramatiku následně použít pro transformaci do Greibachové normální formy (viz. kap. 5.9), je vhodné použít nahrazení prvním typem pravidel s označením (**), která nevnesou do gramatiky ε-pravidla. V opačném případě bude potřeba nejdříve provést jejich odstranění procedurou Eliminate epsilon productions, a potom teprve transformovat do GNF Parametrizace procedury Eliminace levé rekurze má tři vstupní parametry, pomocí nichž může uživatel ovlivnit průběh algoritmu. První parametr klasicky ovlivňuje výsledný výpis. Řetězec def Spustí běžný průběh algoritmu. Výstupem je gramatika bez levé rekurze podle definice Libovolný neterminál Budou vypsána jen pravidla zvoleného neterminálu bez levé rekurze. Druhý parametr určuje, jakým způsobem budou vytvářena pravidla při odstraňování přímé levé rekurze. Parametr se rozlišuje vepsáním číslice 1 nebo 2 do vstupního pole. Není-li do pole zapsáno číslo, je vypsáno chybové hlášení. Typ 1 Je určen číslicí 1 zapsanou do vstupního pole. Pravidla jsou vytvářena podle vzoru (**). Typ 2 Typ 2 je zvolen pokaždé, když není zvolen typ 1, aniž by záleželo na zadaném čísle. Pravidla jsou vytvářena podle vzoru (***). Třetí parametr určuje setřídění množiny neterminálů na začátku algoritmu 5.6 ř.(1). Řetězec def Algoritmus použije defaultní (přednastavené) setřídění, které je určeno pořadím levých stran a může se chovat obecně náhodně. Vypsání seřazeného seznamu neterminálů Jednotlivé neterminály je potřeba oddělovat čárkou (symbolem,). Seznam musí být úplný, tedy musí obsahovat všechny neterminály z levých stran pravidel a všechny symboly musí nějaké pravidlo určovat. Není možné použít symbol, který není na levé straně žádného pravidla. Je-li seřazení zadáno korektně, je použito na začátku algoritmu a průběh je určen právě ním. Nutno podotknout, že obecně různá setřídění mohou poskytnout různé výsledné gramatiky. 40

48 5. TRANSFORMACE Průběh procedury Příklad 5.1. Uvažme vlastní gramatiku G = ({X, Y, S}, {a, b, c, d}, P, S), která obsahuje levou rekurzi podle definice 2.21, kde P = {S Xc Y d Y b, X Xb a, Y SaS}. Na eliminaci levé rekurze si podrobněji vysvětlíme vytvoření a průběh procedury. V kapitole v části Spuštění procedury jsme si popsali zavaděč procedury (viz. obr. 3.5), který nyní využijeme. V podnabídce Transformation vybereme položku Eliminate left recursion. Spustí se nám již výše uvedený zavaděč. Jako vstupní gramatiku použijeme gramatiku G z příkladu 5.1. První parametr nastavíme na hodnotu def, druhý na hodnotu 1 a třetí na S, X, Y. Nyní zmáčkneme tlačítko Run a spustíme samotnou proceduru. Na začátku procedura zkontroluje, zda-li je gramatika správného tvaru a zda-li jsou všechny vstupní parametry dobře nastaveny. Kdyby nebylo něco v pořádku, vypíše chybové hlášení, které oznámí, kde nastala chyba. Dokud by nebyla chyba opravena, nebude možné spustit proceduru. Jelikož je vše v pořádku, otevře se nyní okno procedury (viz. obr. 5.2a). První vstupní parametr byl nastaven na hodnotu def, algoritmus tedy vypíše všechna pravidla výsledné gramatiky. Druhý vstupní parametr určuje, že typ pravidel použitý pro eliminaci přímé levé rekurze podle definice 5.1, bude tvaru (**), tedy A β 1... β n β 1 A... β n A, A α 1... α m α 1 A... α m A. Třetí vstupní parametr nastavil setřídění neterminálů takto S, X, Y. Nyní již nic nebrání si proceduru spustit nebo případně krokovat. 1. Prvním neterminálem A 1 bude počáteční symbol. Pro něj se provede pouze druhá část těla algoritmu, nebot prvek je v seřazení nejmenší. V informačním poli se tato skutečnost vypíše a začne se provádět odstraňování přímé levé rekurze. S-pravidla žádnou přímou levou rekurzi nemají, ve výstupní části okna procedury se vypíší původní pravidla P = {S Xc Y d Y b}. 2. V pořádí druhým testovaným neterminálem je X. Pro něj se již provede i první část těla algoritmu. Žádné z jeho pravidel však není tvaru A i A j α, kde j < i. Následuje odstranění přímé levé rekurze s využitím pravidel typu (**). Nejdříve jsou upravována pravidla, v nichž je přímá levá rekurze, v našem případě X Xb. Vytvoří se nový neterminál X a k němu inklinující pravidla. Poté se upraví pravidla bez levé rekurze. Výpis má pak následující tvar: P = {S Xc Y d Y b, X b bx, X a ax } 41

49 5. TRANSFORMACE Kvůli konzistenci algoritmu se upraví ve vstupním zobrazovacím poli X-pravidla, jelikož je s nimi v další iteraci cyklu ř.(2)-(15) počítáno. Nově vzniklá X -pravidla není nutné přidávat, nejsou pro další výpočet duležitá. Tyto úpravy by měly v algoritmu zpřehlednit jeho průběh, kdy je názorně vidět, se kterými pravidly se počítá. 3. Posledním testovaným neterminálem je Y, u něhož se provede nejvíce úprav. V první iteraci cyklu se přidají pravidla P = {Y XcaS Y das Y bas} a odstraní původní pravidlo Y SaS. V druhé iteraci se již počítá s nově vzniklými pravidly a jsou vytvořena další nová pravidla Y acas ax cas, za pomocí X-pravidel. Pravidlo Y XcaS je odstraněno. Všechna nově vzniklá Y -pravidla jsou přesunuta na levý zobrazovací panel a je spuštěno odstranění příme levé rekurze. Po provedení tohoto odstranění je již výstupní gramatika kompletní a průběh procedury je ukončen. Výsledná pravidla je možné si prohlédnou na obrázku 5.2b. Pro názornost vedle sebe uvádím výstupní pravidla, kde setřídění bylo S, X, Y a pravidla, kde setřídění nebylo definováno a procedura prvky setřídila v pořadí X, Y, S. 1. P = { S Xc Y d Y b, X b bx, X a ax, Y bas basy das dasy, Y acas acasy, Y ax cas ax casy } 2. P = { S ac acs ax c ax cs, S asb asbs asd asds, X b bx, X a ax, Y SaS} Obrázek 5.2a Po spuštení. Obrázek 5.2b Po dokončení procedury. Obrázky 5.2 Eliminace levé rekurze. 42

50 5. TRANSFORMACE 5.8 Transformace do Chomského normální formy V seznamu procedur ji najdeme pod názvem Transform to CNF. Vstup Vlastní CFG G = (N, Σ, P, S) bez jednoduchých pravidel. Výstup CFG G = (N, Σ, P, S) v CNF: L(G) = L(G ). (1) P je tvořena takto: P = ; (2) for all p P do (3) if pravidlo je tvaru A a nebo A BC nebo S ε (4) then přidej p do P ; (5) if p = A X 1 X 2, kde alespoň jedno z X i (i = 1, 2) je terminál (6) then polož X i = { X i, je-li X i N nový neterminál, je-li X i Σ (7) do P přidej pravidlo A X 1 X 2 ; (8) if p = A X 1... X k, k > 2 (9) then polož X i = { X i, je-li X i N nový neterminál, je-li X i Σ (1 i k) (10) do P přidej pravidla A X 1 X 2... X k X 2... X k X 2 X 3... X k X k 2... X k X k 2 X k 1... X k X k 1 X k X k 1 X k (11) end for kde každé X i... X k je nový neterminál (12) for all neterminál tvaru a nově zavedený v ř. (6) nebo (9) do (13) do P přidej pravidla a a (14) end for (15) N = N { všechny nově zavedené neterminály tvaru a nebo tvaru X i... X k } Algoritmus 5.7 [1, p. 67, alg. 3.6] Algoritmus 5.7 nám poskytuje náhled do tvorby Chomského normální formy (viz. def. 2.23). Celkový algoritmus je velmi prostý. Postupně se kontrolují všechna pravidla z P a zároveň se vytvářejí nová pravidla do P. Kontrola je rozdělena na tři části: 1. Pravidlo p P je správného tvaru a je přidáno do P. 43

51 5. TRANSFORMACE 2. Pravidlo má délku dva a alespoň jeden symbol je terminál. Nahradíme všechny terminální symboly novými neterminály a vytvořené pravidlo vložíme do P. 3. Pravidlo má větší délku než dva symboly. Postupně vytváříme nová pravidla podle předpisu, dokud se nedostaneme na pravidlo délky dva. Všechna vytvořená pravidla přidáváme rovnou do P. Nakonec vytvoříme pravidla pro nově vzniklé neterminály a přidáme je do P. Vstupem algoritmu musí být vlastní gramatika podle definice 2.22, bez jednoduchých pravidel (viz. def a kap. 5.5) Parametrizace procedury Tentokráte jsou veškeré vstupní parametrizace spíše kosmetického rázu a určují vzhled výsledného výpisu. První parametr klasicky ovlivňuje výstupní výpis Řetězec def Spustí běžný průběh algoritmu. Výstupem je gramatika v Chomského normální formě podle definice Libovolný neterminál Běh algoritmu se spustí pouze pro pravidla určeného neterminálu a je možné tak sledovat postup algoritmu jen pro daný neterminál. Nakonec jsou zobrazena na výpisu všechna pravidla, která vznikla z původních pravidel vstupního neterminálu. Druhý parametr určuje symboly, kterými jsou ohraničeny nově vznikajíci neterminály na ř.(10). Je potřeba zadat bud to def, nebo oba dva znaky. Řetězec def Jako levý hraniční symbol je použit <, jako pravý hraniční symbol >. Libovolné dva symboly 6 Jako levý hraniční symbol se použije první uvedený symbol, jako pravý hraniční symbol se použije druhý. Je nutné, aby byly zadány oba dva symboly. Třetí parametr zavádí symbol případně dva, které se použijí pro vytváření nových neterminálních symbolů z terminálů. Řetězec def Pro vytváření nových neterminálů se použije levý < i pravý > symbol. Libovolně jeden či dva symboly Je-li uveden pouze jeden symbol, použije se automaticky na pravé straně nového neterminálu. Pokud uvede uživatel symboly dva, je původní terminál ohraničen z obou stran. 6. Výjma bílých znaků. 44

52 Výsledná pravidla v gramatice tvaru CNF pak mohou vypadat například takto: 5. TRANSFORMACE 1. S Aa ε A aa BbB B b 2. S Aa ε A a a B < bb} < bb} b B B b a a b b 5.9 Transformace do Greibachové normální formy Poslední, ale neméně důležitou, úpravou bezkontextových gramatik je Transformace do Greibachové normální formy, která vytvoří normální formu gramatiky podle definice V seznamu transformací ji nalezneme pod označením Transform to GNF. Vstup Nelevorekurzivní, vlastní CFG G = (N, Σ, P, S). Výstup CFG G = (N, Σ, P, S) v GNF: L(G) = L(G ). (1) Zkonstruuj na N lineární uspořádání takové, že je-li A Bα P, pak A B. Označme N = {A 1,..., A n A i 1 A i, 0 < i n}. (2) for i = n 1 downto 1 do (3) for all pravidlo je tvaru A i A j α, j > i do (4) přidej A i β 1 α... β k α, kde A j β 1... β k jsou všechna A j -pravidla; (5) vypust pravidlo A i A j α; (* = aplikace lemmatu 2.4 *) (6) end for (7) end for (8) for all A i ax 1... X k, X j.1 j k X j Σ do (9) v pravidle A i ax 1... X k nahrad všechna ta X j, která jsou terminály, novými neterminály X j (přidej je do množiny neterminálů) a přidej pravidlo X j X j; (10) end for Algoritmus 5.8 [1, p. 74, alg. 3.8] Greibachové normální forma je další z normálních forem, které určitým způsobem standardizují bezkontextové gramatiky. Vstupem algoritmu je ted vlastní, nelevorekurzivní bezkontextová gramatika. Při vytváření GNF je nejdříve potřeba vytvořit si uspořádání neterminálů, které bude následně použito při napočítávání pravidel. Konstrukce uspořádání je ukázána v ř.(1) algoritmu 5.8 a procedura dovoluje uživateli definovat uspořádání, se kterým bude následně 45

53 5. TRANSFORMACE počítáno (viz. kap ). Nutno podotknout, že uspořádání nyní nemůže být libovolné, jak tomu bylo v případě eliminace levé rekurze. Samotný průběh hlavní části algoritmu je velice podobný jako v případě algoritmu pro eliminaci levé rekurze, který byl podrobně popsán v kapitole 5.7, s tím rozdílem, že jsou prvky A i v setřídění brány od největšího 7 neterminálu k nejmenšímu a prvky A j jsou brány tak, že j > i. V druhé části se již průběh liší. Na ř.(8) - (10) jsou již rovnou vytvářena nová pravidla tak, že pravidlo je procházeno znak po znaku. Je-li na některé pozici (jiné než první pozici) terminální symbol, je nahrazen nově vytvořeným neterminálem a a přidáno pravidlo a a, kde a Σ Parametrizace procedury Parametrizace procedury opět umožňuje uživateli ovlivnit zobrazovaný výstup i běh samotného programu. První parametr je stejný jako v případě CNF (viz. kap ). Řetězec def Spustí běžný průběh algoritmu. Výstupem je gramatika v GNF podle definice Libovolný neterminál Běh algoritmu se spustí pouze pro pravidla určeného neterminálu a je možné tak sledovat postup algoritmu jen pro zadaný neterminál. Nakonec jsou zobrazena na výpisu všechna pravidla, která vznikla z původních pravidel vstupního neterminálu. Druhý parametr zavádí symbol (případně dva), který se použije pro vytváření nových neterminálních symbolů z terminálů. Řetězec def Pro vytváření nových neterminálů se použije levý < i pravý > symbol. Libovolně jeden, či dva symboly Je-li uveden pouze jeden symbol, použije se automaticky na pravé straně nového neterminálu. Pokud uvede uživatel symboly dva, je původní terminál ohraničen z obou stran. Třetí parametr udává uspořádání podle ř.(1) Řetězec def Algoritmus napočítá uspořádání sám a použije jej v dalších výpočtech. Setříděné neterminály Při parametrizaci uspořádání je potřeba zadat všechny neterminály z levých stran pravidel. Než se procedura spustí, provede kontrolu zadaného vstupu, a pokud nebudou neterminály správně utříděny podle definice v algoritmu 5.8 ř.(1), tak nahlásí chybu a bude požadovat nové setřídění. 7. Nejpravější neterminál v setřídění A B C..., kde A, B, C N, nebo-li neterminál na n-té pozici. 46

54 5. TRANSFORMACE 5.10 Minimalizace konečného automatu V seznamu transformací ji lze najít pod Minimalize FA. Na začátku musím přiznat, že se mi bohužel nepodařilo zjistit, jak v okně procedury vizualizovat namísto přechodového grafu, tabulku přechodové funkce. Samotná vnitřní struktura vytváření okna procedury byla, naneštěští, nad moje chápání a i přes různé pokusy se mi nepodařilo změnit, aby se konkrétně v této proceduře zobrazoval automat za pomocí zmiňováné tabulky přechodové funkce. Samotný průběh procedury je totožný jako je postup v algoritmu 5.9. Vizualizace jednotlivých relací identit je zajištěna pomocí barevného členění grafu přechodové funkce a určité textové pseudo-tabulky v informačním výpisu. Barevné rozdělení stavů je vizuálně velmi názorné. Kompletní průběh jednoho takového výpočtu je ukázán v příloze C. Vstup Výstup Konečný automat M = (Q, Σ, δ, q 0, F ) bez nedosažitelných stavů s totální přechodovou funkcí. Redukt M/ (1) i = 0; (2) 0 = {(p, q) p F q F }; (3) repeat (4) i = {(p, q) p i q a Σ.δ(p, a) i δ(q, a)}; (5) i = i + 1; (6) until i = i 1 ; (7) = i ; (8) M/ = (Q/, Σ, η, [q 0 ], F / ); Algoritmus 5.9 [1, p. 74, alg. 3.8] Pseudokód algoritmu je velmi snadno pochopitelný. Základem jsou definice uvedené v kapitole v části Minimalizace konečného automatu. Vyzdvihnout je určitě třeba definici 2.7, která definuje redukt M/, jenž je výsledným výstupem algoritmu, definici 2.8 zavádějící binární relaci i společně s lemmatem 2.3 a nakonec větu 2.2, jež říká, že redukt M/ je minimální konečný automat rozpoznávající jazyk L. Nyní lehce osvětlím průběh algoritmu pro jeho snazší pochopení. Nejdříve se provede inicializace, která vytvoří relaci 0, rozdělením stavu na koncové a ostatní. Následuje cyklus ř.(3) - (6), jenž se provádí tak dlouho, dokud dvě po sobě jdoucí relace určující rozdělení stavů do určitých bloků nejsou stejné. Vždy se vezme jeden blok a rozdělí se podle přechodových funkcí v něm ležících stavů. Stavy se tedy dělí vždy v rámci daného bloku a nemůže se stát, že by se mezi nimi v jedné iteraci cyklu přesouvali. Každý běh cyklu vytváři vlastní blokové rozdělení vycházející z původního. 47

55 5. TRANSFORMACE Na závěr se vytvoří nová množina stavů, nová přechodová funkce, přechodový stav a koncové stavy, čímž je získán výsledný minimální konečný automat Transformace regulárního výrazu na konečný automat V seznamu zkrácena pod výraz RE to FA. Při transformaci regulárního výrazu na konečný automat využíváme skutečnosti, že regulární výraz je možné přepsat na regulární přechodový graf o dvou stavech, kdy přechodem mezi stavy je právě daný regulární výraz. Příklad 5.1. Necht (a+(b (c) )) je RE nad abecedou Σ = {a, b, c}. Pak Regulární přechodový graf M = ({q, p}, {a, b, c}, δ, {p}, {q}), kde δ(p, q) = (a + (b (c) )). Pro správné pochopení transformace regulárního výrazu na konečný automat je potřeba popsat si jednotlivé kroky vytváření, nebot není přidán žádný pseudokód podle něhož bychom se mohli řídit. 1. Na začátku si přidáme nový počáteční stav p, koncový stav q a přechod s návěštím RE, kde RE je vstupní regulární výraz. 2. Odstraníme znaménko, které má největší prioritu v daném výrazu, a vytvoříme nové přechody (případně i nový stav) podle pravidel vyobrazených na obrázku 5.3. Pokud je znaménko + (F+G), odstraníme starý přechod a vytvoříme dva nové přechody pod návěštím F a G. V případě zřetězení., přidáme nový stav s i 8 a přechody s návěštím F a G. Při iteraci * je opět třeba přidat nový stav s i a tentokrát tři přechody, kde dva jsou tvořeny ε-kroky a jeden s návěštím F. Je-li možné odstranit několik operací, jež mají stejnou prioritu, tak se odstraní nejlevější možná. V případě parametrizace lze tuto skutečnost změnit uživatel si sám určí, jak bude vypadat stav při dalším kroku. 3. Postup odstraňování operací opakujeme tak dlouho, dokud nejsou návěští tvořeny pouze atomickými výrazy. V takovém případě je již výstupní automat hotov. Zobrazení automatu probíhá průběžně a vždy je vypsáno, která hrana je odstraňována a jaké jsou nové přidávané hrany. Zároveň je postup zobrazován i barevně přímo na automatu. 8. i je nejmenší index takový, že stav s i ještě není v automatu obsažen. 48

56 5. TRANSFORMACE Obrázek 5.3 Pravidla pro transformaci regulárního přechodového grafu na NFA s ε-kroky Parametrizace procedury Parametrizace procedury se od ostatních poněkud liší a budou také lehce obtížnější na vytvoření. Pokud však vytvoříme vstupní parametr správně, vytvoříme si vlastní postup odstraňování operací a získáme hlubší náhled na průběh transformace. Vstupem je nyní jen jeden výraz, který může nabývat dvou hodnot: Řetězec def již klasicky používaný vstup. Zapíná předem daný způsob odstraňování, kdy je odstraněna vždy nejlevější operace s nejvyšší prioritou příslušnou danému regulárnímu výrazu. Určený postup odstraňování Při vytváření parametru určujícího postup vytváření konečného automatu je potřeba dávat si obvzlášt pozor, aby byly regulární výrazy a jednotlivé bloky správně utvořeny. Ze začátku se postup pro vytvoření vstupního parametru může zdát náročnější, ale časem se snadno získá praxe a uživatel bude moct sám určovat, jak bude vypadat každý krok. Pokud procedura některý krok nerozpozná nebo nebude možné takto pokračovat, vypíše se hláška This move is not possible a program pokračuje dál standardně 9. Pro tvorbu parametrů jsou používány dva dělící řetězce/znaky. Prvním je řetězec šipka skládající se ze dvou znaků ->. Šipka dělí vstup na jednotlivé kroky, jež určují jak má vypadat automat při dalším odstraňování. Druhým rozdělovníkem je znak pomlčka -, který mezi sebou odděluje jednotlivé regulární výrazy 10. Regulární výrazy musí být správně utvořené podle podmínek jmenovaných v podkapitole Editor regulárních výrazů (viz. kap ). V jednom kroce je povoleno odstranění právě jedné operace. Je nutné si pamatovat, že pokud by dva po sobě jdoucí kroky byl nějaký regulární výraz atomický, tak krok nebude rozpoznán a procedura pokračuje dál standardním způsobem odstraňování operací (viz. ukázka 5.2). Stejně tak je důležité podotknout, že na pořadí záleží. Vstupní krok (a + b) c není stejný kroku c (a + b). Do vstupního pole se již nezapisuje původní celý regulární výraz, ale až první krok transformace. Nejlépe je možné vidět tvorbu vstupního parametru na ukázce Algoritmus sice kontroluje každý krok zvlášt, ale byla by spíše náhoda, kdyby se další kroky shodovaly s postupem procedury. 10. Původně použitá čárka velmi splývala s operací zřetězení a výraz se stával nepřehledným. 49

57 5. TRANSFORMACE Ukázka 5.1. Mějme regulární výraz (a + b).c.(a + b). Jeho postup transformace může vypadat takto: (a + b) c (a + b) > (a + b) c (a + b) > > (a + b) c (a + b) > (a + b) (a + b) > a b (a + b) > a b Jednotlivé kroky jsou tedy následovné: (a + b).c.(a + b) : odstraní se první operace zřetězení. (a + b) c (a + b) : odstraní se operace zřetězení mezi výrazy c a (a + b). (a + b) c (a + b) : odstraní se iterace nad c. (a + b) (a + b): v tomto kroce už se c nepíše a odstraní se iterace nad (a + b). a b (a + b): odstraní se spojení v prvním výrazu (a + b). a b: a, b jsou atomické a tady už se nepíší. Odstranění poslední operace +. Výsledný automat vidíme na obrázku 5.4. Obrázek 5.4 Automat vytvořený z regulárního výrazu (a + b).c.(a + b). Ukázka 5.2. Špatně vytvořený krok s atomickým výrazem. V předchozím kroku se odstranila operace + a vznikl výraz > a b regulární výraz a je atomický. Správně utvořený další krok bude odstranění iterace. Výsledek je > b. Ve výrazu již není symbol a. Špatně utvořený výraz s odstraněním operace * vypadá > a b. Procedura krok nerozpozná a bude pokračovat standardně dál. Celý správně výtvořený vstupní parametr pak vypadá následovně: (a + b ) > a b > b Transformace konečného automatu na regulární výraz Transformace je v nástroji uvedena pod názvem FA to RE. Vstupem může být libovolný konečný automat s ε-kroky ve smyslu definice Výstupem je pak správně utvořený regulární výraz. 50

58 5. TRANSFORMACE Průběh výpočtu Postup výpočtu byl převzat z [1, p. 47]. Algoritmus provádí postupně následující kroky: 1. Přidej nový počáteční stav <x> a koncový stav <y>. 2. Přidej přechod < x > ε q, kde q = q 0 byl původní počáteční stav. 3. Přidej přechody r ε < y >, kde r F byly původní koncové stavy. 4. Odstraň stav 11 p Q s případnou hranou p E p, kde E = {E 1,..., E n }, E 1,..., E n jsou regulární výrazy. Pro každou dvojici r F p, p r a p G q, p q, kde F = {F 1,..., F n } a G = {G 1,..., G n } přidáme novou hranu r H q, kde H = (F F n ) (E E n ) (G G n ). Rozpoznávaný jazyk se s touto operací nijak nezměnil. Jeden krok výpočtu si můžeme prohlédnout na obrázku V odstraňování pokračujeme tak dlouho, dokud nezůstanou jen stavy <x> a <y>. 6. Návěští hrany mezi <x> a <y> může obsahovat několik přechodů, které je nutné spojit pomocí operace Výsledné návěští je i výsledným regulárním výrazem. Obrázek 5.5 Odstranění stavu p. Bohužel, přestože algoritmus vytvoří regulární výraz i jeho vnitřní reprezentaci v programu, tak se regulární výraz nepřekreslí na výstupním plátně. Původní program vytvoří výstupní plátno a zapíše do něj prázdný výraz. Programu chybí možnost překreslení nově vzniklého regulárního výrazu. Všechny editory jsou dělány tak, že je potřeba vytvářet výstupní reprezentaci postupnou změnou struktury reprezentace v paměti a nedovolují klonování reprezentací, či vytváření nových deklarací, jelikož tímto způsobem se nemění původní reprezentace, ale vzniká pouze odkaz na novou strukturu, která je jinde v paměti. Jelikož se však třída regulárních výrazů vytváří právě rekurzivně tvorbou nové deklarace, tak se výraz na plátno nepřekreslí, nebot se vytvoří nový odkaz jinam do paměti. Na tuto skutečnost jsem bohužel přišel příliš pozdě a nepodařilo se mi ve zdrojových kódek nástroje přijít na způsob, jak překreslování upravit i pro možnost vytvoření nové deklarace, či klonování reprezentací, tedy překreslování i odkazované hodnoty. Regulární výraz je na konci výpočtu správně utvořený a vypíše se ve zkrácené podobě na textový informační výpis. 11. Odstraňují se i s ním inklinující hrany. 51

59 5. TRANSFORMACE Parametrizace procedury V tomto případě je parametrizace velmi snadná a má opět jen dvě možné hodnoty: Řetězec def Stavy jsou vybírany postupně tak, jak byly do automatu vkládány. Setříděný seznam stavů Pokud uživatel zapíše seznam stavů do vstupního pole, bude se jím algoritmus řídit a bude odstraňovat stavy v určeném pořadí. Jednotlivé stavy se ve vstupním poli oddělují čárkou (symbolem,). Není nutné, aby byly zadány všechny stavy 12, ale je nutné, aby všechny zadané symboly označovaly ve vstupním automatu některý stav, jinak se vypíše chybové hlášení a algoritmus se nespustí. Příklad zápisu vstupního parametru p0, p1, N, p Pokud již nebude zadán stav, algoritmus bude pokračovat standardně. 52

60 6 Obecné Kapitola byla vytvořena hlavně z důvodu sepsání použitých materiálů, které není možné jinde v práci citovat a určitě si zaslouží být alespoň zmíněny na konci práce. Je rozdělena na Textovou (teoretickou) část práce a Programovou (praktickou) část. 6.1 Text práce Práce je vysázena v programu MikTEX[10] za použití balíku L A TEX2. Jako základní šablonu práce jsem použil fithesis2, jež byla vytvořena v rámci bakalářské práce z názvem LaTeX Thesis Style [11]. Základními materiály pro vyhledávání struktur se staly dvě práce: 1. Drsný úvod do LATEXu [12] a 2. LATEXv kostce [13]. Symboly pak byly získávány z práce The comprehensive LATEX symbol list [14]. V textu byly používány definice, příklady a ukázky převzaté ze skript k předmětu IB005 Formální jazyky a automaty [1] a ze zápisku ze cvičení či přímo z přednášky. Ikonky použité v textu práce namísto odrážek (v kapitole 3) byly převzaty, kvůli kompaktnosti, z původního balíčku ikon z práce [3]. Ostatní obrázky jsem si však nachystal a připravil sám a nebyly přebírány z původní práce. 6.2 Programová část Při programování byla použita open-source aplikace NetBeans IDE [15]. Jako programovací jazyk byl použit jazyk Java, jak již bylo uvedeno v úvodu, a dokumentace JavaDoc [16]. 53

61 7 Závěr V rámci této práce vzniklo několik rozšíření, které jistě najdou své uplatnění při studiu teorie formálních jazyků. Zároveň byla vytvořena textová část, která slouží k lepšímu pochopení jednotlivých postupů a algoritmů. Díky přidaným rozšířením je snadné vytvářet gramatiky se zkrácenou formou pravidel a přidávat do nich prázdná ε slova. Můžeme si vizualizovat jednotlivé úpravy bezkontextových gramatik či převádět gramatiky do normálních forem. Zobrazíme si nyní postup při minimalizaci automatu či převodu regulárního výrazu na konečný automat. Uživatelsky můžeme ovlivňovat jednotlivé transformace a snadněji tak pochopit náročnější algoritmy. Nástroj zůstává i nadále plně rozšiřitelný v rámci předchozí práce a je připraven pro další vývoj. 54

62 Literatura [1] ČERNÁ, Ivana - KŘETÍNSKÝ, Mojmír - KUČERA, Antonín. Formální jazyky a automaty I. Elportál, Brno, Masarykova univerzita. ISSN X, [2] Přispěvatelé Wikipedie, Noam Chomsky [online], Wikipedie: Otevřená encyklopedie, c2013. Datum poslední revize , 15:22 UTC, [cit ] Dostupný z WWW: < [3] RYCHTÁŘ, Jan. Rozšiřitelný nástroj pro práci s formálními jazyky (Diplomová práce). Brno, Masarykova univerzita Dostupné z WWW: < [4] GOMOLA, Radek. Webová Java aplikace pro zobrazení a simulaci LR(k) a LALR(k) analyzátorů (Bakalářská práce). Brno, Masarykova univerzita Dostupné z WWW: <is.muni.cz/th/256769/> [5] FRICK, Arne; LUDWIG, Andreas; MEHLDAU, Heiko. A Fast Adaptive Layout Algorithm for Undirected Graphs. Graph Drawing. 1994, 894, s ISSN [6] RYCHTÁŘ, Jan. Inteligentní simulátor zásobníkového automatu (Bakalářská práce). Brno, Masarykova univerzita Dostupné z WWW: < [7] Přispěvatelé Wikipedie, Java (programovací jazyk) [online], Wikipedie: Otevřená encyklopedie, c2013, Datum poslední revize , 08:49 UTC, [citováno ] < oldid= > [8] Přispěvatelé Wikipedie, Swing (Java) [online], Wikipedie: Otevřená encyklopedie, c2013, Datum poslední revize , 15:32 UTC, [citováno ] < [9] Přispěvatelé Wikipedie, Java Virtual Machine [online], Wikipedie: Otevřená encyklopedie, c2013, Datum poslední revize , 20:53 UTC, [citováno ] < [10] MiKTEX. Dostupné z WWW < [11] FILIPČÍK, Stanislav. LaTeX Thesis Style (Bakalářská práce). Brno, Masarykova univerzita Dostupné z WWW: < [12] Drsný úvod do L A TEXu. Olomouc, Univerzita Palackého Dostupné z WWW: < [13] L A TEXv kostce. Dostupný z WWW: < [14] PAKIN, Scott. The comprehensive latex symbol list Dostupné z WWW: < [15] NetBeans IDE. Dostupné z WWW: < 55

63 7. ZÁVĚR [16] Java Platform, Standard Edition 6 API Specification. Dostupné z WWW: < 56

64 Příloha A Obsah přiloženého CD Plný text práce ve formátu PDF. Adresář s projektem pro TEXa návodem pro fithesis2. Archív s projektem pro TEX. Adresář s projektem pro NetBeans. Archív s projektem pro NetBeans. Složka jgaf s distribucí programu. Archív s ditribucí programu jgaf. 57

65 Příloha B Přiložené příklady reprezentací Ve složce examples jsou vloženy všechny ukázky použité jako příklady v textu práce. fa_2.2.jgaf Automat použitý v příkladu 2.2. fa_prilohac.jgaf Automat použítý pro demonstraci minimalizace automatu. grammar_2.1.jgaf Gramatika uvedené v příkladu 2.1. grammar_kap_5.3.jgaf Gramatika použitá pro demonstraci odstranění nepoužitelných symbolů. grammar_kap_5.4.jgaf Gramatika použitá pro demonstraci odstranění ε-pravidel. grammar_kap_5.7.jgaf Gramatika pro ukázku výpočtu procedury pro odtranění levé rekurze. grammar_kap_5.8.jgaf Gramatika použitá pro demonstraci úprav pro převod na Chomského normální formu. grammar_obr_4.1.jgaf Gramatika uvedené v obrázku 4.2. pda_2.4.jgaf Zásobníkový automat demonstrující reprezentaci pomocí tabulky přechodové funkce re_2.3.jgaf Regulární výraz z příkladu 2.3 re_kap_5.11.jgaf Regulární výraz použitý pro demonstraci převodu na konečný automat. 58

66 Příloha C Minimalizace konečného automatu Na následujících obrázcích je názorně ukázáno postupné zpracovávání konečného automatu a vytvoření minimálního konečného automatu. Pro ukázku byl použit příklad 2.4 ze skript [1, p.30]. Tabulky byly taktéž převzaty ze zmíněných skript [1, p.30, p.31], aby bylo vytváření reduktu procedurou názornější. 59

67 7. ZÁVĚR Obrázek FA 1 spuštění procedury Obrázek FA 2 vytvoření relace 0 60

68 7. ZÁVĚR Obrázek FA 3 vytvoření relace 1 Obrázek FA 4 vytvoření relace 2 61

69 7. ZÁVĚR Obrázek FA 5 vytvoření relace 3 = 2 Obrázek FA 6 vytvoření relace M/ 62

doplněk, zřetězení, Kleeneho operaci a reverzi. Ukážeme ještě další operace s jazyky, na které je

doplněk, zřetězení, Kleeneho operaci a reverzi. Ukážeme ještě další operace s jazyky, na které je 28 [181105-1236 ] 2.7 Další uzávěrové vlastnosti třídy regulárních jazyků Z předchozích přednášek víme, že třída regulárních jazyků je uzavřena na sjednocení, průnik, doplněk, zřetězení, Kleeneho operaci

Více

Regulární výrazy. Definice Množina regulárních výrazů nad abecedou Σ, označovaná RE(Σ), je definována induktivně takto:

Regulární výrazy. Definice Množina regulárních výrazů nad abecedou Σ, označovaná RE(Σ), je definována induktivně takto: IB102 Automaty, gramatiky a složitost, 6. 10. 2014 1/29 Regulární výrazy Definice 2.58. Množina regulárních výrazů nad abecedou Σ, označovaná RE(Σ), je definována induktivně takto: 1 ε, a a pro každé a

Více

Turingovy stroje. Teoretická informatika Tomáš Foltýnek

Turingovy stroje. Teoretická informatika Tomáš Foltýnek Turingovy stroje Teoretická informatika Tomáš Foltýnek foltynek@pef.mendelu.cz Teoretická informatika strana 2 Opakování z minulé přednášky Jaké znáte algebraické struktury s jednou operací? Co je to okruh,

Více

Konstrukce relace. Postupně konstruujeme na množině všech stavů Q relace i,

Konstrukce relace. Postupně konstruujeme na množině všech stavů Q relace i, [161014-1204 ] 11 2.1.35 Konstrukce relace. Postupně konstruujeme na množině všech stavů Q relace i, kde i = 0, 1,..., takto: p 0 q právě tehdy, když bud p, q F nebo p, q F. Dokud i+1 i konstruujeme p

Více

Automaty a gramatiky(bi-aag) Motivace. 1. Základní pojmy. 2 domácí úkoly po 6 bodech 3 testy za bodů celkem 40 bodů

Automaty a gramatiky(bi-aag) Motivace. 1. Základní pojmy. 2 domácí úkoly po 6 bodech 3 testy za bodů celkem 40 bodů BI-AAG (2011/2012) J. Holub: 1. Základní pojmy p. 2/29 Hodnocení předmětu BI-AAG (2011/2012) J. Holub: 1. Základní pojmy p. 4/29 Automaty a gramatiky(bi-aag) 1. Základní pojmy Jan Holub Katedra teoretické

Více

Množinu všech slov nad abecedou Σ značíme Σ * Množinu všech neprázdných slov Σ + Jazyk nad abecedou Σ je libovolná množina slov nad Σ

Množinu všech slov nad abecedou Σ značíme Σ * Množinu všech neprázdných slov Σ + Jazyk nad abecedou Σ je libovolná množina slov nad Σ Abecedou se rozumí libovolná konečná množina Σ. Prvky abecedy nazýváme znaky (symboly) Slovo (řetězec) v nad abecedou Σ je libovolná konečná posloupnost znaků této abecedy. Prázdné posloupnosti znaků odpovídá

Více

OSTRAVSKÁ UNIVERZITA V OSTRAVĚ PŘÍRODOVĚDECKÁ FAKULTA

OSTRAVSKÁ UNIVERZITA V OSTRAVĚ PŘÍRODOVĚDECKÁ FAKULTA 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

Více

Formální jazyky a gramatiky Teorie programovacích jazyků

Formální jazyky a gramatiky Teorie programovacích jazyků Formální jazyky a gramatiky Teorie programovacích jazyků doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Připomenutí základních pojmů ABECEDA jazyk je libovolná podmnožina

Více

Kapitola 6. LL gramatiky. 6.1 Definice LL(k) gramatik. Definice 6.3. Necht G = (N, Σ, P, S) je CFG, k 1 je celé číslo.

Kapitola 6. LL gramatiky. 6.1 Definice LL(k) gramatik. Definice 6.3. Necht G = (N, Σ, P, S) je CFG, k 1 je celé číslo. Kapitola 6 LL gramatiky 6.1 Definice LL(k) gramatik Definice 6.1. Necht G = (N, Σ, P, S) je CFG, k 1 je celé číslo. Definujme funkci FIRST G k : (N Σ) + P({w Σ w k}) předpisem FIRST G k (α) = {w Σ (α w

Více

Naproti tomu gramatika je vlastně soupis pravidel, jak

Naproti tomu gramatika je vlastně soupis pravidel, jak 1 Kapitola 1 Úvod V přednášce se zaměříme hlavně na konečný popis obecně nekonečných množin řetězců symbolů dané množiny A. Prvkům množiny A budeme říkat písmena, řetězcům (konečným posloupnostem) písmen

Více

Minimalizace KA - Úvod

Minimalizace KA - Úvod Minimalizace KA - Úvod Tyto dva KA A,A2 jsou jazykově ekvivalentní, tzn. že rozpoznávají tentýž jazyk. L(A) = L(A2) Názorně lze vidět, že automat A2 má menší počet stavů než A, tudíž našim cílem bude ukázat

Více

Formální jazyky a automaty Petr Šimeček

Formální jazyky a automaty Petr Šimeček Formální jazyky a automaty Petr Šimeček Úvod Formální jazyky a automaty jsou základním kamenem teoretické informatiky. Na počátku se zmíníme o Chomského klasifikaci gramatik, nástroje, který lze aplikovat

Více

Bezkontextové jazyky. Bezkontextové jazyky 1 p.1/39

Bezkontextové jazyky. Bezkontextové jazyky 1 p.1/39 Bezkontextové jazyky Bezkontextové jazyky 1 p.1/39 Jazyky typu 2 Definice 4.1 Gramatika G = (N, Σ, P, S) si nazývá bezkontextovou gramatikou, jestliže všechna pravidla z P mají tvar A α, A N, α (N Σ) Lemma

Více

Vztah jazyků Chomskeho hierarchie a jazyků TS

Vztah jazyků Chomskeho hierarchie a jazyků TS Vztah jazyků Chomskeho hierarchie a jazyků TS Jan Konečný; (přednáší Lukáš Havrlant) 15. října 2013 Jan Konečný; (přednáší Lukáš Havrlant) Chomskeho hierarchie a jazyky TS 15. října 2013 1 / 23 Rychlé

Více

Z. Sawa (VŠB-TUO) Teoretická informatika 5. listopadu / 43

Z. Sawa (VŠB-TUO) Teoretická informatika 5. listopadu / 43 Zásobníkové automaty Z. Sawa (VŠB-TUO) Teoretická informatika 5. listopadu 2018 1/ 43 Zásobníkový automat Chtěli bychom rozpoznávat jazyk L = {a i b i i 1} Snažíme se navrhnout zařízení (podobné konečným

Více

2 Formální jazyky a gramatiky

2 Formální jazyky a gramatiky 2 Formální jazyky a gramatiky 2.1 Úvod Teorie formálních gramatik a jazyků je důležitou součástí informatiky. Její využití je hlavně v oblasti tvorby překladačů, kompilátorů. Vznik teorie se datuje přibližně

Více

1 Uživatelská dokumentace

1 Uživatelská dokumentace 1 Uživatelská dokumentace Systém pro závodění aut řízených umělou inteligencí je zaměřen na závodění aut v prostředí internetu. Kromě toho umožňuje testovat jednotlivé řidiče bez nutnosti vytvářet závod

Více

AUTOMATY A GRAMATIKY. Pavel Surynek. Kontextové uzávěrové vlastnosti Turingův stroj Rekurzivně spočetné jazyky Kódování, enumerace

AUTOMATY A GRAMATIKY. Pavel Surynek. Kontextové uzávěrové vlastnosti Turingův stroj Rekurzivně spočetné jazyky Kódování, enumerace AUTOMATY A 11 GRAMATIKY Pavel Surynek Univerzita Karlova v Praze Matematicko-fyzikální fakulta Katedra teoretické informatiky a matematické logiky Kontextové uzávěrové vlastnosti Turingův stroj Rekurzivně

Více

Jednoznačné a nejednoznačné gramatiky

Jednoznačné a nejednoznačné gramatiky BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 2/36 Jednoznačné a nejednoznačné gramatiky BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 4/36 Automaty a gramatiky(bi-aag) 11.

Více

Automaty a gramatiky(bi-aag) Formální překlady. 5. Překladové konečné automaty. h(ε) = ε, h(xa) = h(x)h(a), x, x T, a T.

Automaty a gramatiky(bi-aag) Formální překlady. 5. Překladové konečné automaty. h(ε) = ε, h(xa) = h(x)h(a), x, x T, a T. BI-AAG (2011/2012) J. Holub: 5. Překladové konečné automaty p. 2/41 Formální překlady BI-AAG (2011/2012) J. Holub: 5. Překladové konečné automaty p. 4/41 Automaty a gramatiky(bi-aag) 5. Překladové konečné

Více

Bezkontextové jazyky 2/3. Bezkontextové jazyky 2 p.1/27

Bezkontextové jazyky 2/3. Bezkontextové jazyky 2 p.1/27 Bezkontextové jazyky 2/3 Bezkontextové jazyky 2 p.1/27 Transformace bezkontextových gramatik Bezkontextové jazyky 2 p.2/27 Ekvivalentní gramatiky Definice 6.1 Necht G 1 a G 2 jsou gramatiky libovolného

Více

Reliance 3 design OBSAH

Reliance 3 design OBSAH Reliance 3 design Obsah OBSAH 1. První kroky... 3 1.1 Úvod... 3 1.2 Založení nového projektu... 4 1.3 Tvorba projektu... 6 1.3.1 Správce stanic definice stanic, proměnných, stavových hlášení a komunikačních

Více

Úvod do informatiky. Miroslav Kolařík

Úvod do informatiky. Miroslav Kolařík Úvod do informatiky přednáška desátá Miroslav Kolařík Zpracováno dle R. Bělohlávek, V. Vychodil: Diskrétní matematika 2, http://phoenix.inf.upol.cz/esf/ucebni/dm2.pdf P. Martinek: Základy teoretické informatiky,

Více

Regulární výrazy. M. Kot, Z. Sawa (VŠB-TU Ostrava) Úvod do teoretické informatiky 14. března / 20

Regulární výrazy. M. Kot, Z. Sawa (VŠB-TU Ostrava) Úvod do teoretické informatiky 14. března / 20 Regulární výrazy M. Kot, Z. Sawa (VŠB-TU Ostrava) Úvod do teoretické informatiky 14. března 2007 1/ 20 Regulární výrazy Jako například v aritmetice můžeme pomocí operátorů + a vytvářet výrazy jako (5+3)

Více

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13. Grafy doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB TUO) Grafy 104 / 309 Osnova přednášky Grafy

Více

Syntaxí řízený překlad

Syntaxí řízený překlad Syntaxí řízený překlad Překladový automat Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 27. listopadu 2008 Zobecněný překladový automat Překladový automat

Více

Čísla značí použité pravidlo, šipka směr postupu Analýza shora. Analýza zdola A 2 B 3 B * C 2 C ( A ) 1 a A + B. A Derivace zleva:

Čísla značí použité pravidlo, šipka směr postupu Analýza shora. Analýza zdola A 2 B 3 B * C 2 C ( A ) 1 a A + B. A Derivace zleva: 1) Syntaktická analýza shora a zdola, derivační strom, kanonická derivace ezkontextová gramatika gramatika typu 2 Nechť G = je gramatika typu 1. Řekneme, že je gramatikou typu 2, platí-li: y

Více

Simulátor programované gramatiky

Simulátor programované gramatiky Příloha 1. Uživatelská příručka k programu Simulátor programované gramatiky Program slouží k simulaci derivace podle programované gramatiky s bezkontextovými pravidly. Umožňuje automatický průběh derivace,

Více

Pumping lemma - podstata problému. Automaty a gramatiky(bi-aag) Pumping lemma - problem resolution. Pumping lemma - podstata problému

Pumping lemma - podstata problému. Automaty a gramatiky(bi-aag) Pumping lemma - problem resolution. Pumping lemma - podstata problému BI-AAG (2011/2012) J. Holub: 10. Vlastnosti regulárních jazyků p. 2/22 Pumping lemma - podstata problému BI-AAG (2011/2012) J. Holub: 10. Vlastnosti regulárních jazyků p. 4/22 Automaty a gramatiky(bi-aag)

Více

SignEditor 1 - návod k použití

SignEditor 1 - návod k použití SignEditor 1 - návod k použití Tomáš Ryba tryba@kky.zcu.cz Zdeněk Krňoul zdkrnoul@kky.zcu.cz Jakub Kanis jkanis@kky.zcu.cz 27. března 2012 1 Vznik za podpory projektu Pojabr - Potlačení jazykové bariéry

Více

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina 5a. Makra Visual Basic pro Microsoft Escel Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina Cyklické odkazy a iterativní výpočty Zde bude stránka o cyklických odkazech a iteracích.

Více

Projektová dokumentace GED 2006

Projektová dokumentace GED 2006 Projektová dokumentace GED 2006 20.4.2006 Řešitelé týmu a podíl práce na projektu: Kamil Dudka xdudka00 objektový návrh uživatelské rozhraní podpora plug-in programů kreslící plocha vkládání textu programová

Více

Konečný automat. Jan Kybic.

Konečný automat. Jan Kybic. Konečný automat Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2017 1 / 33 Konečný automat finite state machine Konečný automat = výpočetní model, primitivní počítač Řídící jednotka s

Více

Přehledy pro Tabulky Hlavním smyslem této nové agendy je jednoduché řazení, filtrování a seskupování dle libovolných sloupců.

Přehledy pro Tabulky Hlavním smyslem této nové agendy je jednoduché řazení, filtrování a seskupování dle libovolných sloupců. Přehledy pro Tabulky V programu CONTACT Professional 5 naleznete u firem, osob a obchodních případů záložku Tabulka. Tuto záložku lze rozmnožit, přejmenovat a sloupce je možné definovat dle vlastních požadavků

Více

Výpočetní modely pro rozpoznávání bezkontextových jazyků zásobníkové automaty LL(k) a LR(k) analyzátory

Výpočetní modely pro rozpoznávání bezkontextových jazyků zásobníkové automaty LL(k) a LR(k) analyzátory Plán přednášky Výpočetní modely pro rozpoznávání bezkontextových jazyků zásobníkové automaty LL(k) a LR(k) analyzátory Obecný algoritmus pro parsování bezkontextových jazyků dynamické programování 1 Zásobníkový

Více

Pro označení disku se používají písmena velké abecedy, za nimiž následuje dvojtečka.

Pro označení disku se používají písmena velké abecedy, za nimiž následuje dvojtečka. 1 Disky, adresáře (složky) a soubory Disky Pro označení disku se používají písmena velké abecedy, za nimiž následuje dvojtečka. A:, B: C:, D:, E:, F: až Z: - označení disketových mechanik - ostatní disky

Více

AUTOMATY A GRAMATIKY

AUTOMATY A GRAMATIKY AUTOMATY A 1 GRAMATIKY Pavel Surynek Univerzita Karlova v Praze Matematicko-fyzikální fakulta Katedra teoretické informatiky a matematické logiky Stručný přehled přednášky Automaty Formální jazyky, operace

Více

Nový způsob práce s průběžnou klasifikací lze nastavit pouze tehdy, je-li průběžná klasifikace v evidenčním pololetí a školním roce prázdná.

Nový způsob práce s průběžnou klasifikací lze nastavit pouze tehdy, je-li průběžná klasifikace v evidenčním pololetí a školním roce prázdná. Průběžná klasifikace Nová verze modulu Klasifikace žáků přináší novinky především v práci s průběžnou klasifikací. Pro zadání průběžné klasifikace ve třídě doposud existovaly 3 funkce Průběžná klasifikace,

Více

Tvorba kurzu v LMS Moodle

Tvorba kurzu v LMS Moodle Tvorba kurzu v LMS Moodle Před počátkem práce na tvorbě základního kurzu znovu připomínám, že pro vytvoření kurzu musí být profil uživatele nastaven administrátorem systému minimálně na hodnotu tvůrce

Více

Základy teoretické informatiky Formální jazyky a automaty

Základy teoretické informatiky Formální jazyky a automaty Základy teoretické informatiky Formální jazyky a automaty Petr Osička KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI Outline Literatura Obsah J.E. Hopcroft, R. Motwani, J.D. Ullman Introduction to

Více

Manuál k programu KaraokeEditor

Manuál k programu KaraokeEditor Manuál k programu KaraokeEditor Co je KaraokeEditor? Program slouží pro editaci tagů v hudebních souborech formátu mp3. Tagy jsou doprovodné informace o písni, uložené přímo v mp3. Aplikace umí pracovat

Více

MANUÁL VÝPOČTOVÉHO SYSTÉMU W2E (WASTE-TO-ENERGY)

MANUÁL VÝPOČTOVÉHO SYSTÉMU W2E (WASTE-TO-ENERGY) MANUÁL VÝPOČTOVÉHO SYSTÉMU W2E (WASTE-TO-ENERGY) 0 1. PRACOVNÍ PLOCHA Uspořádání a vzhled pracovní plochy, se kterým se uživatel během práce může setkat, zobrazuje obr. 1. Obr. 1: Uspořádání pracovní plochy

Více

Budovy a místnosti. 1. Spuštění modulu Budovy a místnosti

Budovy a místnosti. 1. Spuštění modulu Budovy a místnosti Budovy a místnosti Tento modul představuje jednoduchou prohlížečku pasportizace budov a místností VUT. Obsahuje detailní přehled všech budov a místností včetně fotografií, výkresů objektů, leteckých snímků

Více

Ignijet_2007 Externí monitor

Ignijet_2007 Externí monitor Ignijet_2007 Externí monitor ver 2010-06-17 Úvod Externí monitor dokáže monitorovat vybrané parametry zapalování a zobrazovat je dle modifikovatelného nastavení a to jak hodnoty parametrů, tak jednoduché

Více

FORTANNS. havlicekv@fzp.czu.cz 22. února 2010

FORTANNS. havlicekv@fzp.czu.cz 22. února 2010 FORTANNS manuál Vojtěch Havlíček havlicekv@fzp.czu.cz 22. února 2010 1 Úvod Program FORTANNS je software určený k modelování časových řad. Kód programu má 1800 řádek a je napsán v programovacím jazyku

Více

Pracovní prostředí Excel 2010

Pracovní prostředí Excel 2010 Zdokonalování ICT gramotnosti v rámci projektu IMPACT Pracovní prostředí Excel 2010 Inovace a modernizace studijních oborů FSpS Obsah Co je to Excel a k čemu slouží... 3 Co nabízí nová verze Excel 2010:...

Více

IBRIDGE 1.0 UŽIVATELSKÝ MANUÁL

IBRIDGE 1.0 UŽIVATELSKÝ MANUÁL IBRIDGE 1.0 UŽIVATELSKÝ MANUÁL Jaromír Křížek OBSAH 1 ÚVOD... 3 2 INSTALACE... 4 2.1 SYSTÉMOVÉ POŽADAVKY... 5 2.2 SPUŠTĚNÍ IBRIDGE 1.0... 5 3 HLAVNÍ MENU... 6 3.1 MENU FILE... 6 3.2 MENU SETTINGS... 6

Více

Konečný automat Teorie programovacích jazyků

Konečný automat Teorie programovacích jazyků Konečný automat Teorie programovacích jazyků oc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@menelu.cz Automaty v běžném životě Konečný automat Metoy konstrukce konečného automatu

Více

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání Čtvrtek 3. listopadu Makra v Excelu Obecná definice makra: Podle definice je makro strukturovanou definicí jedné nebo několika akcí, které chceme, aby MS Excel vykonal jako odezvu na nějakou námi definovanou

Více

8. OKNA 73. obr. 1 Roletové menu "Okna"

8. OKNA 73. obr. 1 Roletové menu Okna 8. OKNA Obsah 8. OKNA 73 OBSAH 73 8.1 UKLÁDÁNÍ UŽIVATELSKÝCH OKEN 76 8.2 NAČÍTÁNÍ UŽIVATELSKÝCH OKEN 77 8.3 VLASTNOSTI OKEN 77 8.3.1 VLASTNOSTI ZÁLOŽKOVÉHO OKNA 78 8.4 VOLBA OKNA 78 8.5 ZRUŠENÍ OKNA 79

Více

Postupy práce se šablonami IS MPP

Postupy práce se šablonami IS MPP Postupy práce se šablonami IS MPP Modul plánování a přezkoumávání, verze 1.20 vypracovala společnost ASD Software, s.r.o. dokument ze dne 27. 3. 2013, verze 1.01 Postupy práce se šablonami IS MPP Modul

Více

MS SQL Server 2008 Management Studio Tutoriál

MS SQL Server 2008 Management Studio Tutoriál MS SQL Server 2008 Management Studio Tutoriál Vytvoření databáze Při otevření management studia a připojením se ke konkrétnímu sql serveru mám v levé části panel s názvem Object Explorer. V tomto panelu

Více

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody 4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina Cyklické odkazy a iterativní výpočty

Více

Pro každé formule α, β, γ, δ platí: Pro každé formule α, β, γ platí: Poznámka: Platí právě tehdy, když je tautologie.

Pro každé formule α, β, γ, δ platí: Pro každé formule α, β, γ platí: Poznámka: Platí právě tehdy, když je tautologie. Zpracoval: hypspave@fel.cvut.cz 5. Výroková logika, formule výrokové logiky a jejich pravdivostní ohodnocení, splnitelné formule, tautologie, kontradikce, sémantický důsledek, tautologicky ekvivalentní

Více

GEOGRAFICKÉ INFORMAČNÍ SYSTÉMY CVIČENÍ 4

GEOGRAFICKÉ INFORMAČNÍ SYSTÉMY CVIČENÍ 4 UNIVERZITA TOMÁŠE BATI VE ZLÍNĚ FAKULTA APLIKOVANÉ INFORMATIKY GEOGRAFICKÉ INFORMAČNÍ SYSTÉMY CVIČENÍ 4 Praktické zvládnutí software Geomedia Pavel Vařacha a kol. Zlín 2013 Tento studijní materiál vznikl

Více

Vlastnosti regulárních jazyků

Vlastnosti regulárních jazyků Vlastnosti regulárních jazyků Podobně jako u dalších tříd jazyků budeme nyní zkoumat následující vlastnosti regulárních jazyků: vlastnosti strukturální, vlastnosti uzávěrové a rozhodnutelné problémy pro

Více

Nápověda k aplikaci EA Script Engine

Nápověda k aplikaci EA Script Engine Nápověda k aplikaci EA Script Engine Object Consulting s.r.o. 2006 Obsah Nápověda k aplikaci EA Script Engine...1 1. Co je EA Script Engine...2 2. Důležité upozornění pro uživatele aplikace EA Script Engine...3

Více

Ovládání programu DAE a zápis překladu do znakované češtiny 1. Instalace programu 2. První spuštění 3. Ovládání programu 4. Překlad dialog Translation Instalace programu Pro instalaci programu stačí spustit

Více

Ovládání Open Office.org Calc Ukládání dokumentu : Levým tlačítkem myši kliknete v menu na Soubor a pak na Uložit jako.

Ovládání Open Office.org Calc Ukládání dokumentu : Levým tlačítkem myši kliknete v menu na Soubor a pak na Uložit jako. Ukládání dokumentu : Levým tlačítkem myši kliknete v menu na Soubor a pak na Uložit jako. Otevře se tabulka, v které si najdete místo adresář, pomocí malé šedočerné šipky (jako na obrázku), do kterého

Více

2017 CARAT "New design"

2017 CARAT New design 2017 CARAT "New design" Stručný průvodce verzí CARAT New Design Tato příručka poskytuje informace o základech programu CARAT New Design. Další podrobné informace jsou k dispozici na úvodní stránce online

Více

Automaty a gramatiky. Uzávěrové vlastnosti v kostce R J BKJ DBKJ. Roman Barták, KTIML. Kvocienty s regulárním jazykem

Automaty a gramatiky. Uzávěrové vlastnosti v kostce R J BKJ DBKJ. Roman Barták, KTIML. Kvocienty s regulárním jazykem 11 Automaty a gramatiky Roman Barták, KTIML bartak@ktiml.mff.cuni.cz http://ktiml.mff.cuni.cz/~bartak Uzávěrové vlastnosti v kostce Sjednocení Průnik Průnik s RJ Doplněk Substituce/ homomorfismus Inverzní

Více

Návod k ovládání aplikace

Návod k ovládání aplikace Návod k ovládání aplikace Tento návod se zabývá ovládáním aplikace PDF Annotation 1, která je založena na aplikaci AVP PDF Viewer a umožňuje nejen PDF dokumenty prohlížet, ale také do těchto dokumentů

Více

DUM 06 téma: Tvorba makra pomocí VBA

DUM 06 téma: Tvorba makra pomocí VBA DUM 06 téma: Tvorba makra pomocí VBA ze sady: 03 tematický okruh sady: Tvorba skript a maker ze šablony: 10 Algoritmizace a programování určeno pro: 4. ročník vzdělávací obor: 18-20-M/01 Informační technologie

Více

Formuláře. Téma 3.2. Řešený příklad č Zadání: V databázi formulare_a_sestavy.accdb vytvořte formulář pro tabulku student.

Formuláře. Téma 3.2. Řešený příklad č Zadání: V databázi formulare_a_sestavy.accdb vytvořte formulář pro tabulku student. Téma 3.2 Formuláře Formuláře usnadňují zadávání, zobrazování, upravování nebo odstraňování dat z tabulky nebo z výsledku dotazu. Do formuláře lze vybrat jen určitá pole z tabulky, která obsahuje mnoho

Více

Recognoil RRW Manager rychlý návod k obsluze

Recognoil RRW Manager rychlý návod k obsluze Recognoil RRW Manager rychlý návod k obsluze Obsah: 1) Úvod charakteristika funkcí 2) Instalace 3) První spuštění - menu 4) Selektivní vyhodnocení plochy + uložení 5) Práce s projektem a exporty 6) Poznámky

Více

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox 02. HODINA Obsah: 1. Typy souborů a objektů 2. Ovládací prvky Label a TextBox 3. Základní příkazy a vlastnosti ovládacích prvků 4. Práce s objekty (ovládací prvky a jejich vlastnosti) 2.1 Typy souborů

Více

Rizikové procesy. 1. Spuštění modulu Rizikové procesy. 2. Popis prostředí a ovládacích prvků modulu Rizikové procesy

Rizikové procesy. 1. Spuštění modulu Rizikové procesy. 2. Popis prostředí a ovládacích prvků modulu Rizikové procesy Rizikové procesy Modul slouží k evidenci rizik a zpracovávání mapy rizik za jednotlivé součásti a VUT. Přístupová práva k tomuto modulu mohou získat manažeři rizik a výbor pro řízení rizik. 1. Spuštění

Více

Stručný návod na program COMSOL, řešení příkladu 6 z Tepelných procesů.

Stručný návod na program COMSOL, řešení příkladu 6 z Tepelných procesů. Stručný návod na program COMSOL, řešení příkladu 6 z Tepelných procesů. Zadání: Implementujte problém neustáleného vedení tepla v prostorově 1D systému v programu COMSOL. Ujistěte se, že v ustáleném stavu

Více

Příručka pro aplikaci KSnapshot

Příručka pro aplikaci KSnapshot Richard J. Moore Robert L. McCormick Brad Hards Kontrolor: Lauri Watts Vývojář: Richard J Moore Vývojář: Matthias Ettrich Překlad: Lukáš Vlček 2 Obsah 1 Úvod 5 2 Použití KSnapshot 6 2.1 Spuštění KSnapshot.....................................

Více

Formální systém výrokové logiky

Formální systém výrokové logiky Formální systém výrokové logiky 1.Jazyk výrokové logiky Nechť P = {p,q,r, } je neprázdná množina symbolů, které nazýváme prvotní formule. Symboly jazyka L P výrokové logiky jsou : a) prvky množiny P, b)

Více

1 Tabulky Příklad 7 Access 2010

1 Tabulky Příklad 7 Access 2010 TÉMA: Řazení a filtrace dat Sekretářka společnosti Naše zahrada pracuje s rozsáhlými tabulkami. Pro přehlednější práci s daty používá řazení a filtraci dat na základě různých kritérií. Zadání: Otevřete

Více

Výroková a predikátová logika - II

Výroková a predikátová logika - II Výroková a predikátová logika - II Petr Gregor KTIML MFF UK ZS 2017/2018 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - II ZS 2017/2018 1 / 17 Předběžnosti Základní pojmy n-ární relace a funkce

Více

Strategie ochrany před negativními dopady povodní a erozními jevy přírodě blízkými opatřeními v České republice

Strategie ochrany před negativními dopady povodní a erozními jevy přírodě blízkými opatřeními v České republice Strategie ochrany před negativními dopady povodní a erozními jevy přírodě blízkými opatřeními v České republice Návod k prezentačnímu mapovému portálu Obsah: 1. Úvod... 3 2. Obecná část mapového portálu...

Více

Vizualizace a evidence výroby a prostojů

Vizualizace a evidence výroby a prostojů Vizualizace a evidence výroby a prostojů v1.00 Aplikace informuje o aktuálním počtu a historii vyrobených kusů jednotlivých výrobků jednotlivých linek, eviduje prostoje a pracovníky kteří linku obsluhovali

Více

Pojem binární relace patří mezi nejzákladnější matematické pojmy. Binární relace

Pojem binární relace patří mezi nejzákladnější matematické pojmy. Binární relace RELACE Pojem binární relace patří mezi nejzákladnější matematické pojmy. Binární relace slouží k vyjádření vztahů mezi prvky nějakých množin. Vztahy mohou být různé povahy. Patří sem vztah býti potomkem,

Více

Úprava naměřených stavů

Úprava naměřených stavů Návod na používání autorizovaného software Úprava naměřených stavů V Ústí nad Labem 8. 10. 2010 Vytvořil: doc. Ing., Ph.D. Návod pro úpravu stavů_v1 1 z 9 8.10.2010 Obsah 1Úvod...3 2Instalace...4 3Spuštění

Více

Stručný postup k použití programu PL7 Junior (programování TSX Micro)

Stručný postup k použití programu PL7 Junior (programování TSX Micro) Stručný postup k použití programu PL7 Junior (programování TSX Micro) 1. Připojení PLC TSX Micro k počítači Kabel, trvale zapojený ke konektoru TER PLC, je nutné zapojit na sériový port PC. 2. Spuštění

Více

Základní popis Toolboxu MPSV nástroje

Základní popis Toolboxu MPSV nástroje Základní popis Toolboxu MPSV nástroje Nástroj XLS2DBF ze sady MPSV nástroje slouží pro zkonvertování souboru ve formátu XLS do formátu DBF. Nástroj umožňuje konvertovat buď vybraný list nebo listy ze sešitu

Více

Vlastnosti Derivační strom Metody Metoda shora dolů Metoda zdola nahoru Pomocné množiny. Syntaktická analýza. Metody a nástroje syntaktické analýzy

Vlastnosti Derivační strom Metody Metoda shora dolů Metoda zdola nahoru Pomocné množiny. Syntaktická analýza. Metody a nástroje syntaktické analýzy Metody a nástroje syntaktické analýzy Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 14. října 2011 Vlastnosti syntaktické analýzy Úkoly syntaktické

Více

Automaty a gramatiky

Automaty a gramatiky Automaty a gramatiky Roman Barták, KTIML bartak@ktiml.mff.cuni.cz http://ktiml.mff.cuni.cz/~bartak Co bylo minule Úvod do formálních gramatik produkční systémy generativní gramatika G=(V N,V T,,P) G =

Více

Kontextové dokumenty

Kontextové dokumenty Příručka uživatele systému Museion Kontextové dokumenty Autorská práva Copyright 2012-2015 MUSOFT.CZ, s.r.o.. Všechna práva vyhrazena. Tato příručka je chráněna autorskými právy a distribuována na základě

Více

3 Formuláře a sestavy Příklad 1 Access 2007

3 Formuláře a sestavy Příklad 1 Access 2007 TÉMA: Vytváření formulářů Správce databáze Naše zahrada předpokládá, že bude s vytvořenou databází pracovat více uživatelů. Je třeba proto navrhnout a vytvořit formuláře pro přístup k datům. Zadání: Otevřete

Více

BALISTICKÝ MĚŘICÍ SYSTÉM

BALISTICKÝ MĚŘICÍ SYSTÉM BALISTICKÝ MĚŘICÍ SYSTÉM UŽIVATELSKÁ PŘÍRUČKA Verze 2.3 2007 OBSAH 1. ÚVOD... 5 2. HLAVNÍ OKNO... 6 3. MENU... 7 3.1 Soubor... 7 3.2 Měření...11 3.3 Zařízení...16 3.4 Graf...17 3.5 Pohled...17 1. ÚVOD

Více

Nastavení a ovládání aplikace ifoxtrot

Nastavení a ovládání aplikace ifoxtrot Nastavení a ovládání aplikace ifoxtrot A - obrazovka po spuštění a/nebo při neaktivním připojení Úvodní obrazovka s nakonfigurovaným a vybraným připojením s názvem Chata. Při prvním spuštění je v seznamu

Více

Windows 10 (5. třída)

Windows 10 (5. třída) Windows 10 (5. třída) Pracovní plocha: takto vypadá Pracovní plocha u nás ve škole - pozadí Pracovní plochy - ikony na Pracovní ploše ikona Student 17 (se jménem přihlášeného uživatele) ikona Tento počítač

Více

APS Administrator.GS

APS Administrator.GS APS Administrator.GS Grafická nadstavba pro vizualizaci systémů APS (rozšiřující programový modul pro APS Administrator) Instalační a uživatelská příručka 2004 2015,TECH FASS s.r.o., www.techfass.cz, techfass@techfass.cz

Více

Access. Tabulky. Vytvoření tabulky

Access. Tabulky. Vytvoření tabulky Access správa databáze (tabulky, relace, omezující podmínky, data...) uživatelské prostředí pro práci s databází (formuláře, sestavy, datové stránky, makra...) ukázková aplikace Northwind hlavní okno databáze

Více

Uživatelský manuál aplikace. Dental MAXweb

Uživatelský manuál aplikace. Dental MAXweb Uživatelský manuál aplikace Dental MAXweb Obsah Obsah... 2 1. Základní operace... 3 1.1. Přihlášení do aplikace... 3 1.2. Odhlášení z aplikace... 3 1.3. Náhled aplikace v jiné úrovni... 3 1.4. Změna barevné

Více

Výroková a predikátová logika - II

Výroková a predikátová logika - II Výroková a predikátová logika - II Petr Gregor KTIML MFF UK ZS 2015/2016 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - II ZS 2015/2016 1 / 18 Základní syntax Jazyk Výroková logika je logikou

Více

Internetový přístup do databáze FADN CZ - uživatelská příručka Modul FADN BASIC

Internetový přístup do databáze FADN CZ - uživatelská příručka Modul FADN BASIC Internetový přístup do databáze FADN CZ - uživatelská příručka Modul FADN BASIC Modul FADN BASIC je určen pro odbornou zemědělskou veřejnost bez větších zkušeností s internetovými aplikacemi a bez hlubších

Více

PALSTAT s.r.o. systémy řízení jakosti PALSTAT CAQ verze. 3.00.01.09 Kontakty 08/2010. 1 Obsah

PALSTAT s.r.o. systémy řízení jakosti PALSTAT CAQ verze. 3.00.01.09 Kontakty 08/2010. 1 Obsah 1 Obsah 1 Obsah... 1 2 Úvod a spouštění SW Palstat CAQ... 2 2.1.1 Návaznost na další SW moduly Palstat CAQ... 2 2.2 Přihlášení do programu... 2 2.2.1 Stanovení přístupu a práv uživatele... 2 2.2.2 Spuštění

Více

SCHÉMA aplikace ObčanServer 2 MENU aplikace Mapové kompozice

SCHÉMA aplikace ObčanServer 2 MENU aplikace Mapové kompozice ObčanServer Nápověda SCHÉMA aplikace ObčanServer 2 MENU aplikace Mapové kompozice Příklady mapových kompozic Katastrální mapa Územní plán Funkční plochy Letecký snímek Pasport hřbitova Císařské otisky

Více

Příprava projektů v programu Databox CONTACT Professional 5

Příprava projektů v programu Databox CONTACT Professional 5 Příprava projektů v programu Databox CONTACT Professional 5 Systém Databox obsahuje rozsáhlou agendu pro evidenci a řízení projektů, zakázek či obchodních případů. Záleží pouze na správci databáze, jak

Více

Formátování pomocí stylů

Formátování pomocí stylů Styly a šablony Styly, šablony a témata Formátování dokumentu pomocí standardních nástrojů (přímé formátování) (Podokno úloh Zobrazit formátování): textu jsou přiřazeny parametry (font, velikost, barva,

Více

PowerPoint 2010. Kurz 1. Inovace a modernizace studijních oborů FSpS (IMPACT) CZ.1.07/2.2.00/28.0221

PowerPoint 2010. Kurz 1. Inovace a modernizace studijních oborů FSpS (IMPACT) CZ.1.07/2.2.00/28.0221 PowerPoint 2010 Kurz 1 Představení Program PowerPoint 2010 je nástroj pro tvorbu prezentací. Tyto prezentace jsou pak určeny především k promítání na plátno pomocí dataprojektoru. Prezentace je formát

Více

Základní popis Toolboxu MPSV nástroje

Základní popis Toolboxu MPSV nástroje Základní popis Toolboxu MPSV nástroje Nástroj XLS2DBF ze sady MPSV nástroje slouží pro zkonvertování souboru ve formátu XLS do formátu DBF. Nástroj umožňuje konvertovat buď vybraný list nebo listy ze sešitu

Více

Prostředí Microstationu a jeho nastavení. Nastavení výkresu

Prostředí Microstationu a jeho nastavení. Nastavení výkresu Prostředí Microstationu a jeho nastavení Nastavení výkresu 1 Pracovní plocha, panely nástrojů Seznámení s pracovním prostředím ovlivní pohodlí, rychlost, efektivitu a možná i kvalitu práce v programu Microstation.

Více

Příručka progecad Professional 2013

Příručka progecad Professional 2013 6.2 Upravit Obrázek 58: Nabídka Upravit 27. Zpět Upravit Zpět _u z vrátí zpět poslední operaci Tato funkce je jistě známá z mnoha počítačových aplikací, která vrací zpět poslední operaci. Někde je však

Více

GEOM LITE - MANUÁL hlavní obrazovka

GEOM LITE - MANUÁL hlavní obrazovka GEOM LITE - MANUÁL hlavní obrazovka Levý panel Pomoci levého panelu je možné vybírat aktivní vrstvy, měnit jejich průhlednost a pořadí. V dolní části je zobrazena legenda. Horní panel V horním panelu se

Více

Uživatelská příručka. 06/2018 Technické změny vyhrazeny.

Uživatelská příručka. 06/2018 Technické změny vyhrazeny. Uživatelská příručka 1 OBSAH 1 ÚVOD... 3 1.1 Merbon SCADA... 3 1.1.1 K čemu program slouží...3 2 Přihlášení a odhlášení z programu... 4 3 Projekty... 5 3.1 Výběr zobrazení... 5 3.2 Schémata... 6 3.3 Grafy...

Více