Návrh algoritmů pro sémantické akce při výstavbě interpretu metodou rekurzivního sestupu

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

Download "Návrh algoritmů pro sémantické akce při výstavbě interpretu metodou rekurzivního sestupu"

Transkript

1 Mendelova zemědělská a lesnická univerzita v Brně Provozně ekonomická fakulta Návrh algoritmů pro sémantické akce při výstavbě interpretu metodou rekurzivního sestupu Diplomová práce Vedoucí práce: RNDr. Ing. Milan Šorm, Ph.D. Bc. Michal Růžička Brno 2006

2 Na tomto místě bych rád poděkoval RNDr. Ing. Milanovi Šormovi, Ph.D. za odbornou přípravu a podporu při tvorbě mé diplomové práce.

3 Prohlašuji, že jsem tuto diplomovou práci vyřešil samostatně s použitím literatury, kterou uvádím v seznamu. Brno 2. května

4 4 Abstract Růžička, M. Algorithm design for semantic actions in interpreter building using the method of recursive descent. Diploma thesis, Brno, The thesis is dealing with construction of own language interpreter. It describes successive development of the solution of lexical analysis, syntactic analysis and semantic actions implementation. In the thesis is solved developing of Chomsky grammar, generation of regular grammar and finite state machine construction. Syntactic analysis is design using the method of recursive descent witch improve the syntax graph and pushdown automaton. The thesis describe the semantic actions implementation. Abstrakt Růžička, M. Návrh algoritmů pro sémantické akce při výstavbě interpretu metodou rekurzivního sestupu. Diplomová práce. Brno, Práce se zabývá konstrukcí interpreta vlastního programovacího jazyka. Popisuje postupný vývoj řešení lexikální analýzy, syntaktické analýzy a implementaci sémantických akcí. V práci je postupně řešen návrh gramatik typu 3 Chomského klasifikace, regularizace gramatiky a konstrukce deterministického konečného automatu. Syntaktická analýza je prováděna metodou rekurzivního sestupu za využití grafů syntaxe a zásobníkového automatu. Práce popisuje implementaci sémantických akcí.

5 OBSAH 5 Obsah 1 Úvod a cíl práce Úvod do problematiky Cíl práce Použitá literatura 10 3 Teoretická analýza problému Základní pojmy Pojem gramatika Jazyky typu 3 Chomského klasifikace Lineární a regulární gramatika Konečný automat Ekvivalence konečných automatů a gramatik typu Převod nedeterministického automatu na deterministický Bezkontextové gramatiky a jazyky Syntaktická analýza Grafy syntaxe Zásobníkový automat Deterministické bezkontextové jazyky Deterministický zásobníkový automat LL jayzky a gramatiky Levá rekurze Množiny FIRST a FOLLOW Gramatika typu LL(1) Algoritmus syntaktické analýzy pro gramatiku typu LL(1) Sémantické akce Programovací jazyk C Textový editor VIM Implementace lexikálního analyzátoru Návrh Abeceda Lineární gramatiky Významové a nevýznamové jazyky Lineární gramatika lexikálního analyzátoru Regularizace lineární gramatiky Nedeterministický konečný automat Deterministický konečný automat Programování lexikálního analyzátoru

6 OBSAH 6 5 Implementace syntaktického analyzátoru Rozklad věty pomocí grafů syntaxe Návrh deterministické bezkontextové gramatiky Ověření LL(1) gramatiky Konstrukce deterministického zásobníkového automatu Syntaktický analyzátor Implementace sémantických akcí Výrazy Příkaz přiřazení Inicializace proměnné typu konstanta nebo řetězec Inicializace proměnné typu pole Inicializace proměnné typu pointer Příkaz větvení Příkaz cyklu Podprogramy Dokumentace Základní struktura Výrazy Přiřazení Větvení Cykly Podprogramy Závěr 71 9 Literatura 73 Přílohy 74 A Přechodová funkce 75 B Deterministický konečný automat 77 C Syntaktické diagramy 79 D Bezkontextová deterministická gramatika LL(1) 84 E Ověření gramatiky typu LL(1) 85 F Vypočítané množiny FIRST a FOLLOW 91 G Deterministický zásobníkový automat 93

7 OBSAH 7 H Dynamické struktury 97 I Sémantické akce 99 J Ukázkový program jazyka Ruzin 101

8 1 ÚVOD A CíL PRÁCE 8 1 Úvod a cíl práce 1.1 Úvod do problematiky Současná doba již delší dobu vykazuje podstatný růst významu technických a technologických prostředků. Pojmy hardware a software začínají být naprosto běžnými slovy, kterým rozumí i laická veřejnost. Osobní počítač začíná vlastnit stále více lidí a stále více lidí chce proniknout do tajů strojových kódů ve snaze pochopit způsob, jakým počítače pracují. Aby mohl člověk pracovat s počítačem, musí být schopný s ním nějakým způsobem komunikovat. Veškeré aplikace nebo programy používané člověkem pro dorozumění se s počítačem, musel nejprve nějaký jiný člověk programátor zkonstruovat. Tak, jako lidé mezi sebou komunikují prostřednictvým jazyka, tak i jádrem dorozumění s počítačovým programem je nějaký jazyk. Počítač však s lidmi nehovoří jejich mateřským jazykem, nebo nějakým jiným, světově uznávaným lidským jazykem. Počítač dokáže zpracovávat dvě různě velké hodnoty elektrického napětí. Podle stavu napětí, pak dokáže rozpoznat nuly a jedničky, respektive binární kód. Počítač tedy rozumí pouze jazyku v binární podobě, tzv. strojovému kódu. Jazyk složený z nul a jedniček je však z pochopitelných důvodů obtížně čitelný pro člověka. Také zapisování sekvence nul a jedniček může přerůst v marné hledání případné chyby v záznamu. I když v počátcích programování byli programátoři nuceni opravdu zapisovat své programy ve strojovém kódu, rychle přišli na to, jak si ulehčit práci. Mnohem jednodušší formou práce s binárními instrukcemi je použití překladače. Jak již název napovídá, jedná se o tlumočení konkrétního zápisu instrukce do strojového kódu. Překladač používá přesně definovanou sadu výrazů, které reprezentují strojové instrukce. Pomocí překladačů lze tedy počítači nařídit, aby provedl právě to, co programátor chce. Zvyšující se nároky programátorů a zvyšování složitosti zpracovávaných úkolů mají za následek růst nároků na samotné programovací jazyky. Postupný vývoj v této oblasti přináší počítačové jazyky vyšší úrovně. 1.2 Cíl práce Cílem této diplomové práce je navrhnout funkční interpret jazyka Ruzin, zasazený do mého kraje Jižní Moravy. Klíčová slova představující příkazy pro vykonání potřebných instrukcí nejsou standardně používané anglické synonyma, jako jsou například if nebo while, ale slova vyskytující se v hovorovém nářečí. Interpret je provozován na platformě jazyka C, ve kterém je samotný interpret naprogramován. Přímý překlad do binárního kódu neprovádí samotný překladač, ale děje se tak prostřednictvím použitého programovacího jazyka C. Konstrukce jayzka se skládá ze tří základních částí, které na sebe navazují. Nejdříve je nutné vytvořit lexikální analyzátor potřebný pro identifikaci slov užíva-

9 1.2 Cíl práce 9 ných jazykem. Návaznost na něj má konstrukce syntaktyckého analyzátoru, který určuje správnou syntaxi jazyka. Posledním krokem je vytvoření sémantických akcí, na jejichž základě bude jazyk provádět operace definované ve zdrojovém kódu. Programovací jazyk má podporovat dávkové programy. Programy tohoto typu se typicky spouštějí z příkazového řádku. Zpracovávaná data se zadávají přímo na obrazovku pomocí klávesnice, nebo jsou umístěna v datovém souboru.

10 2 POUŽITÁ LITERATURA 10 2 Použitá literatura Celá diplomová práce, na které pracuji, vychází z obsahu předmětu Teorie programovacích jazyků vyučovaného na Ústavu informatiky Mendelovy zemědělské a lesnické univerity v Brně. Cílem předmětu je naučit studenta teoretickou část problematiky formálních jazyků, na základě které je schopen zkonstruovat vlastní překladač. Podklady pro výuku jsou studentovy předkládány formou poznámek a komentářů k vysvětlované látce. Podle těchto poznámek se v mé diplomové práci řídím a jsou páteří mé práce. Učební pomůckou při studiu i při tvorbě mé diplomové práce je podpůrný text Úvod do teorie formálních jazyků (Rybička, 1999), který velmi stručně a věcně charakterizuje problematiku formálních jazyků a kde jsou uvedeny příklady základních implementačních technik. Z této brožury velmi často cituji v části teoretická analýza problému, protože je zde velice přehledně a výstižně popsaná problematika, o kterou se zajímám. Velice dobrý popis formálních jazyků a gramatik, regulárních jazyků, bezkontextových gramatik a jazyků, zásobníkových automatů a popisu syntaktické analýzy obsahuje učebnice Gramatiky a Jazyky (Molnár, Češka, Melichar, 1987). Původ této učebnice sahá sice až do minulého století, ale zákonitosti formálních jazyků popsané v knize stále zůstávají neměnnými a pro mou diplomovou práci jsou dostačující. Učebnice je velice kvalitním zdrojem informací nejen pro mou práci, ale obecně velmi dobře analyzuje problematiku formálních jazyků a jejich gramatik. V některých případech citací čerpám z internetových zdrojů, uvedených v kapitole literatura. Jazyk Ruzin je programovaný v jazyce C. Jednotlivé použité příkazy a popisy struktur jsem čerpal z Učebnice jazyka C (Herout, 2001). Tyto knihy jsou dostatečným materiálem pro popis programovacích technik použitých v diplomové práci. Zdrojový kód jazyka jsem zapisoval v textovém editoru VIM. Podrobné instrukce a návody, jak pracovat s tímto nástrojem, lze nalézt na www stránkách zabývajících se podrobným popisem tohoto textového editoru (Satrapa, 2001). Veškerá, zde zmíněná literatura, je použita jako zdroj informací při práci vynaložené na tvorbě jazyka Ruzin a psaní mé diplomové práce.

11 3 TEORETICKÁ ANALÝZA PROBLÉMU 11 3 Teoretická analýza problému Popsaná literatura je dostatečným podkladem pro teoretické vypracování interpreta. Důležitým aspektem pro správné pochopení řešeného problému je vyjasnění používaných pojmů. Přesný předpis pro výkon nějaké činnosti, prováděné procesorem počítače, se nazývá program. Program je procesoru předkládán ve tvaru kódu, tj. jako posloupnost instrukcí procesoru elementárních příkazů, které je daný procesor schopen přímo provádět. Autor formuluje program pomocí vhodného (a jemu známého) programovacího jazyka, ve tvaru zdrojového textu programu, jehož konverzi na proveditelný kód příslušného procesoru zajišťuje překladač. Podle celkové strategie překladu lze překladače klasifikovat kompilační a interpretační kompilátory a interprety. Kompilátor je konverzní program, který přeloží hotový zdrojový text programu na cílový kód. Podmínkou získání spustitelného programu je bezchybné ukončení překladu v celém jeho rozsahu. Cílový kód je pak provozován nezávisle na kompilátoru, pokud však je třeba jeho činnost modifikovat, je nutné znovu přeložit celý zdrojový text. Interpret má pro spouštěný program funkci operačního prostředí postupně čte, překládá a ihned vykonává jednotlivé příkazy (nebo větší jednotky) zdrojového textu. Výskyt jakékoliv chyby v textu je zjištěn až v okamžiku překladu chybného příkazu za běhu programu. Pokud se tentýž (bezchybný) příkaz provádí vícekrát, je před každým provedením znovu přeložen. Výhody a nevýhody obou koncepcí překladu jsou zřejmé. Interpretovaný program umožňuje interaktivní modifikaci rozsahu dat nebo dokonce zdrojového textu přímo za běhu, je však relativně pomalý a spustitelný pouze prostřednictvím překladače. Kompilátor připraví efektivní nezávislý program, který udržuje v operační paměti počítače pouze svůj kód a svá data, jehož prostředky pro interaktivní změny jsou však značně omezené (Polách, 2006). Programovací jazyk Ruzin je na základě předchozího vysvětlení interpretem. Zdrojový kód programu, psaného pro můj jazyk, je postupně zpracováván a případná chyba v kódu je zjištěna až v průběhu zpracování. Fakt, že se jedná o interpret deklaruje informace, že program lze spustit pouze prostřednictvím překladače. Samotný jazyk Ruzin se skládá z několika částí. Prvním krokem tvorby jazyka je konstrukce lexikálního analyzátoru, načítajícího jednotlivé tokeny. Syntaktickou správnost kódu ověřuje syntaktický analyzátor doplněný sémantickými akcemi. Teoretická východiska těchto jednotek jsou popsána v následujících kapitolách. 3.1 Základní pojmy Tím, jak se člověk začíná učit mateřskou řeč, využívá písmena a hlásky, ze kterých vytváří slova a z nich věty. V problematice formálních jazyků je také vycházeno z prvotních znaků, tvořících abecedu jazyka. Ze symbolů jsou tvořena slova a celé věty.

12 3.1 Základní pojmy 12 Definice Abeceda je konečná množina prvků, které nazýváme symboly. Libovolnou konečnou posloupnost skládající se ze symbolů dané abecedy nazýváme řetězec nebo slovo. Délkou slova w rozumíme počet symbolů ve slově, značíme ji w. Slovo s nulovou délkou nazýváme prázdné slovo a budeme ho označovat ε. Definice Mějme abecedu Σ, pak libovolnou podmnožinu množiny Σ nazýváme formální jazyk nad abecedou Σ. Uvedená definice jazyka je příliš všeobecná. Vniká přirozená otázka, jak jazyk popsat a jak ho specifikovat. Ze specifikace množin víme, že je lze specifikovat buď vyjmenováním všech prvků, nebo pomocí definice vlastnosti, kterou každý prvek musí mít. Jestliže jazyk je množinou prvků slov, je možné ho specifikovat jedním z uvedených způsobů. Je-li množina slov daného jazyka konečná, nazýváme ho konečný jazyk, pokud je tato množina prázdná, nazýváme ho prázdný jazyk, je-li tato množina nekonečná, nazýváme jazyk nekonečný. Definice Nechť L 1 a L 2 jsou jazyky, jejich zřetězením dostaneme jazyk L, přičemž L = {xy/x L 1 y L 2 } Definice Nechť L je jazyk, tak jeho n-tou mocninu definujeme takto: L 0 = {ε}l n = LL n 1 pro n 1 iterací jazyka L nazýváme množinu L, kde L = n 0 L n pozitivní iterací jazyka L nazýváme množinu L +, kde L + = n 1 L n Lehce zjistíme, že L + = LL = L L L = L + {ε} Kromě uvedených operací nás budou zajímat i zobrazení, definované nad jazyky. Definice Nechť Σ 1 a Σ 2 jsou abecedy. Potom libovolné zobrazení h : Σ 1 Σ 2 budeme nazývat homomorfizmus. Je možné ho rozšířit z množiny symbolů na množinu slov Σ 1, a to takto: h(ε) = ε, h(ua) = h(u)h(a) pro všechna u Σ 1, a Σ 1. Aplikací homomorfismu h na jazyk L dostaneme nový jazyk h(l), kde h(l) = {h(w)/w L}. Definice Pokud h : Σ 1 Σ 2 je homomorfizmus, tak h 1 : Σ 2 2 Σ 1 je inverzní homomorfizmus, který je definovaný takto: Pokud v Σ 2, tak h 1 (v) je množina slov nad Σ 1, které se homomorfizmem h zobrazují na v, tedy h 1 (v) =

13 3.2 Pojem gramatika 13 {u/h(u) = v}. Pokud L je jazyk nad Σ 2, tak h 1 (L) je jazyk nad Σ 1 skládající se ze slov, které h zobrazuje na slova z L. h 1 (L) = v L h 1 (v) = {u/h(u) L} Aby specifikace jazyka měla praktický význam, musí být konečná. Požadavek konečnosti splňují minimálně dva systémy, které se často používají. První systém, automaty, je založený na principu procedury, která po předložení slova, po konečném počtu kroků rozpozná, zda toto slovo patří nebo nepatří do daného jazyka. Druhý systém, gramatiky, je schopný generovat pouze ta slova, která patří do daného jazyka a je schopný generovat všechna slova daného jazyka (Molnár, Češka, Melichar, 1987, s ). 3.2 Pojem gramatika Gramatika jazyka je tvořena množinou všech gramatických pravidel. Gramatika jazyka umožňuje generovat věty jazyka, které jsou gramaticky správně. Gramatickými pravidly gramatikou je určena pouze syntaxe jazyka, to znamená, že je určena přípustná struktura vět jazyka a prvotní jednotky, které je možné na daném místě použít. Pokud libovolná věta splňuje podmínky definované gramatikou, patří do daného jazyka. Význam vět určuje sémantika. Syntaxe a sémantika navzájem souvisí. Syntaxe definuje strukturu věty, která je zase základem pro určení jejího významu. Syntaktická správnost věty však ještě nezaručuje její sémantickou správnost. Analýza formálního jazyka a gramatiky vyžaduje specifikaci objektů, se kterými budeme pracovat. Jedná se o prvotní symboly nazývané terminální symboly nebo terminály, jednotky specifikované pomocí jiných jednotek neterminální symboly nebo neterminály gramatická pravidla nazývané přepisovací pravidla. Kromě uvedených objektů je třeba zmínit ještě jeden specifický neterminální symbol, pomocí kterého generování vět začíná. Jedná se o startovací symbol. Nyní je možné definovat gramatiku. Gramatika G jazyka L je čtveřice G L = (N, Σ, P, S), kde 1. N je konečná množina neterminálních symbolů, 2. Σ je konečná množina terminálních symbolů, 3. P je množina přepisovacích pravidel, je to konečná podmnožina kartézského součinu (N Σ) N(N Σ) (N Σ), 4. S N je startovací (počáteční, výchozí) symbol gramatiky. Prvek (α, β) množiny P budeme zapisovat ve tvaru α β. Řetězec α je levá strana, řetězec β je pravá strana přepisovacího pravidla. Gramatika je produkční systém, v němž lze aplikací přepisovacích pravidel ze startovacího symbolu generovat věty patřící do jazyka L. V průběhu generování postupně vynikají řetězce složené ze slovníku gramatiky větné formy, tj. prvky (N

14 3.2 Pojem gramatika 14 Σ). Cílem generování je vytvoření řetězce w Σ, který neobsahuje neterminální symboly. Gramatika sama ještě neposkytuje způsob, jak z ní získat slova specifikovaného jazyka. Základem pro generování vět jsou přepisovací pravidla, na základě kterých nad množinou řetězců vytvořených z množiny neterminálních a terminálních symbolů definujeme relaci derivace. Přímá derivace relace mezi větnými formami daná pravidly gramatiky. Jsou-li γλδ, γµδ větné formy, mezi nimiž je přímá derivace, pak musí existovat λ µ P dané gramatiky. Značíme. Nepřímá derivace libovolná mocnina přímé derivace n. Tranzitivní uzávěr přímé derivace se nazývá jen derivace, označíme +. Je-li věta w L, pak platí S n w. Příklad generování věty: Je dána abeceda Σ = {a, b, c} a gramatika G nad touto abecedou, jejíž množina neterminálních symbolů je N = {S, A}, množina pravidel je P = {(S, b), (S, aac), (A, ba), (A, ε)} a startovací symbol je S. Pravidla přepíšeme do přehlednější podoby a pro usnadnění orientace očíslujeme: (1) S b (2) S aac (3) A ba (4) A ε Generování věty se sestává z posloupnosti větných forem a začíná startovacím neterminálem. U každé derivace je použití příslušného pravidla gramatiky naznačeno číslem. S (2) aac (3) abac (3) abbac (4) abbc. Výsledná věta abbc patří do jazyka generovaného uvedenou gramatikou G (Rybička, 1999, s. 8 9). Podle tvaru přepisovacích pravidel gramatiky lze usoudit i na obecnost jazyka generovaného touto gramatikou. Klasifikace gramatik pocházející od Chomského je založena na tvaru přepisovacích pravidel a provádíme ji takto (Rybička, 1999, s. 9): Typ 0 neomezené gramatiky, na přepisovací pravidla není kladeno žádné omezení. Pravidla mají tvar α β; α (N Σ) N(N Σ), β (N Σ) Typ 1 kontextové gramatiky, pravidla ve tvaru αaβ αγβ; A N, α, β (N Σ), γ (N Σ) + nebo S ε Typ 2 bezkontextové gramatiky, pravidla ve tvaru A α; A N, α (N Σ)

15 3.3 Jazyky typu 3 Chomského klasifikace 15 Typ 3 lineární gramatiky, pravá lineární gramatika má pravidla ve tvaru A wb nebo A w; A, B N, w Σ levá lineární gramatika má pravidla ve tvaru A Bw nebo A w; A, B N, w Σ Při navrhování jazyka Ruzin je nutné popsat pravidla gramatiky, aby bylo možné nějakým způsobem určit, zda zkoumané slovo patří nebo nepatří do daného jazyka. V mé práci je základním kamenem navržení linární gramatiky jazyka typu 3, konkrétně pak pravé lineární gramatiky, díky níž je možné exaktně a jednoduše popsat gramatiku jazyka. 3.3 Jazyky typu 3 Chomského klasifikace Gramatika jazyka typu 3 je použita při návrhu jazyka, který popisuji v této diplomové práci. Konstrukce gramatiky začíná návrhem gramatik pro jednotlivé implementované struktury, použité v jazyce Ruzin. Jedná například o implementaci gramatiky čísel, proměnných pole apod. Podrobný popis navrhovaných struktur následuje v kapitole implementace lexikálního analyzátoru. Konstrukce lexikálního analyzátoru vyžaduje zápis gramatiky v konkrétní podobě. Pro vyjádření jazyků této kategorie lze využít: lineární gramatiku (pravou, levou), regulární gramatiku (pravou, levou), regulární výraz (regulární množinu), konečný automat (nedeterministický, deterministický). Všechny uvedené prostředky jsou navzájem ekvivalentní a algoritmicky navzájem převoditelné. V mé práci je postupně navržena lineární gramatika, kterou regularizuji do podoby regulární gramatiky. Na základě regulární gramatiky je vytvořena přechodová funkce nedeterministického konečného automatu, ze kterého postupnou úpravou vznikne konečný automat deterministický. Z výkladu je zřejmé, že regulární výrazy nejsou podstatné pro mou práci, nebudu je tedy podrobně popisovat Lineární a regulární gramatika Návrh gramatik představuje proces, kdy je postupnou úpravou získána z lineární gramatiky gramatika regulární. Definici gramatik a proces regularizace je vhodné uvést. G 3 = (N, Σ, P, S) je pravá lineární gramatika, mají-li pravidla tvar A wb nebo A w kde A, B N, w Σ. G 3 = (N, Σ, P, S) je regulární gramatika, mají-li pravidla tvar A ab nebo A a kde A, B N, a Σ. Navíc může existovat pravidlo S ε, je-li ε L G. 1 Bližší informace v (Rybička, 1999) nebo (Molnár, Češka, Melichar, 1987)

16 3.3 Jazyky typu 3 Chomského klasifikace 16 I když je tvar pravidel regulární gramatiky zúžením tvaru pravidel lineární gramatiky, existuje ke každé lineární gramatice odpovídající regulární gramatika. Převod je algoritmický a probíhá v několika krocích. V následujících kapitolách se budu na tento postup odvolávat, proto se mi zdá vhodné označit algoritmus názvem a pojmenuji ho algoritmus 1 : 1. převedení A wb na řetězec pravidel A a 1 A 1, A 1 a 2 A 2,..., A n 1 a n B, kde w = a 1 a 2... a n, 2. odstranění ε-pravidel (ε-pravidel, pravidel typu A ε, 3. odstranění jednoduchých pravidel (pravidel typu A B). Aplikací uvedených pravidel je získána regulární gramatika, která je podkladem pro sestavení přechodové funkce a vytvoření konečného automatu Konečný automat Konečný automat (KA) je virtuální stroj skládající se z řídící jednotky, která se může nacházet v konečném počtu vnitřních stavů, a ze čtecího zařízení, schopného snímat jednotlivé symboly vstupní věty ze vstupní pásky. Vstupní páska je čtena zleva doprava. Zatímco gramatiku lze chápat jako generativní systém, který postupnými derivacemi ze startovacího neterminálu vygeneruje výslednou větu, automat je systém akceptační, jehož vstupem je věta a výstupem informace, zda tato věta patří nebo nepatří do jazyka L. Nedeterministický KA je definován jako pětice M = (Q, Σ, δ, q 0, F ), kde 1. Q je konečná množina stavů automatu, 2. Σ je konečná vstupní abeceda, 3. δ je zobrazení 4. Q Σ 2 Q, 5. q S Σ je počáteční stav, 6. F Q je množina koncových stavů. Činnost automatu lze znázornit posloupností konfigurací. Konfigurace definuje situaci, v níž se automat nachází, pomocí aktuálního vnitřního stavu q i a dosud nepřečtené části vstupní věty. Přechod automatu od jedné konfigurace k následující definuje přechodová funkce δ, a to na základě přečteného terminálního symbolu ze vstupní pásky. Počáteční konfigurace automatu je definována dvojicí (q S, w), kde q S je počáteční stav automatu a w je celá vstupní věta. Koncová konfigurace je definována jako (q F, ε), kde q F F. Dostane-li se automat během své činnosti do této konfigurace, je vstupní věta přijata (akceptována), tedy patří do daného jazyka. V opačném případě věta není akceptována. Přechodová funkce δ určuje na základě současného vnitřního stavu a čteného symbolu následující vnitřní stav. Je-li těchto následujících stavů více, jedná se o nedeterministický konečný automat. Je-li následující stav nejvýše jeden, jde o deter-

17 3.3 Jazyky typu 3 Chomského klasifikace 17 ministický konečný automat. Nedeterministický konečný automat lze algoritmicky převést na deterministický. Obvyklým způsobem znázornění přechodové funkce je tabulka, jejíž řádky jsou označeny všemi stavy Q a sloupce všemi symboly Σ. Pole tabulky obsahují výsledky přechodové funkce, tj. podmnožiny množiny stavů. Pro člověka je přehlednější grafický způsob vyjádření přechodové funkce. Jednotlivé stavy jsou znázorněny jako uzly grafu, mezi nimiž jsou orientované spojnice ohodnocené příslušným terminálním symbolem. Koncové stavy jsou vyznačeny dvojitým kroužkem (Rybička, 1999, s ) Ekvivalence konečných automatů a gramatik typu 3 Třída jazyků generovaných gramatikami typu 3 je ekvivalentní třídě jazyků akceptovatelných konečnými automaty. Z této věty vyplývá, že ke každé gramatice typu 3 lze algoritmicky zkonstruovat konečný přijímající stejný jazyk. Tato konstrukce je použita v mé práci, proto ji uvedu. Je dána pravá regulární gramatika G = (N, Σ, P, S). Úkolem je vytvořit automat M = (Q, Σ, δ, q S, F ) takový, aby L G = L M. Převod regulární gramatiky na konečný automat pracovně nazvu algoritmus 2. Jednotlivé prvky automatu se získají takto: 1. Q = N {q F } stavy automatu odpovídají neterminálům gramatiky, k nim je dodán nový stav q F, který je zároveň koncovým stavem. Stavy automatu se pracovně označí písmenem q s indexem v podobě odpovídajícího neterminálu gramatiky, 2. Abeceda gramatiky i automatu je identická, 3. Konstrukce přechodové funkce na základě pravidel gramatiky: Je-li A ab P, pak δ(q A, a) obsahuje q B. Je-li A a P, pak δ(q A, a) obsahuje q F. 4. Počátečním stavem automatu je stav q S odpovídající startovacímu neterminálu gramatiky S. 5. Množina koncových stavů F obsahuje vždy prvek q F. je-li však S ε P,pak počáteční stav automatu je také koncový (aby bylo možno přijímat i prázdný řetězec), pak tedy F = {q S, q F } (Rybička, 1999, s. 16). Aplikací jednotlivých částí algoritmu 2 vzniká nedeterministický konečný automat. Další postup zpracování je převod nedeterministického konečného automatu na deterministický Převod nedeterministického automatu na deterministický Deterministický konečný automat má definovanou přechodovou funkci jako zobrazení δ : Q Σ Q. Principem převodu nedeterministického automatu na deterministický je takové rozšíření množiny Q, aby několik původních stavů tvořilo jeden nový stav. Tento nový kompozitní stav přebírá vazby a vlastnosti stavů, z nichž vznikl. Kompozitní stav je použit právě tam, kde výsledek přechodové funkce není

18 3.4 Bezkontextové gramatiky a jazyky 18 jediný stav, ale množina. V tabulce přechodové funkce není pak nutné psát množinové závorky (Rybička, 1999, s. 15). Cílem je najít neterminální stavy, pro které platí δ(q i, a) > 1, a z nich se vytváří kompozitní stavy. Poté je možné odstranit složené závorky z tabulky nedeterministického konečného automatu. n δ(q i, a) = {(q 0,..., q n ) q 0...n Pro α Σ : δ(q i...n, α) = Posledním krokem tohoto procesu je nalezení a odstranění nepoužitých stavů, do kterých není možné přejít. Nemožnost použití některých stavů vzniká právě zavedením kompozitních stavů. Činnost deterministického konečného automatu lze implementovat programovým modulem. V mé práci konstruuji programový modul lex.h, který je popsán dále. Deterministický konečný automat rozpoznává lexikální jednotky patřící do daného jazyka. Nedokáže však rozpoznat, zda jsou jednotky syntakticky správně uspořádány. Syntaktickou analýzu vstupního souboru je možné provádět až podle pravidel bezkonextové gramatiky, podle jazyků typu Bezkontextové gramatiky a jazyky Regulární gramatiky a jazyky mají celou řadu dobrých vlastností, ale jejich praktické použití v oblasti programovacích jazyků a překladačů je velmi omezené. Na specifikaci vyšších konstrukcí programovacích jazyků se používají bezkontextové gramatiky, které postačují pro specifikaci většiny konstrukcí programovacích jazyků. Při specifikaci programových jazyků je třeba mít na paměti i skutečnost, že programy bude potřebné přeložit, že pro daný jazyk je potřeba vytvořit překladač. Zde už vystupuje do popředí i význam slov jazyka. Existují slova jazyka, jejichž význam nemusí být jednoznačný. Z hlediska překladu to má dalekosáhlý význam, protože se může uskutečnit jiným způsobem, než zamýšlel programátor. Kromě toho je při specifikaci programovacích jazyků požadována taková specifikace, která umožňuje jednoduchý a rychlý překlad. Samozřejmě, ne všechny bezkontextové gramatiky tuto vlastnost mají. Většina vlastností bezkontextových gramatik závisí na derivaci, kterou se generuje dané slovo. Proto je vhodné použít na popis derivace takový formální zápis, který poskytuje o derivaci co nejvíce informací. Takovým zápisem může být znázornění konstrukce věty pomocí bezkontextové gramatiky derivační strom. Strom je konečná množina vrcholů nebo uzlů, spojených orientovanými hranami, které splňují následující podmínky: 1. existuje právě jeden vrchol, do kterého nevstupuje žádná hrana. Tento vrchol je nazýván kořen stromu, 2. ke každému vrcholu existuje posloupnost orientovaných hran z kořene stromu. Strom je tedy souvislý, i=0 q i

19 3.4 Bezkontextové gramatiky a jazyky do každého vrcholu, s výjimkou kořene stromu, vstupuje právě jedna hrana. Ve stromu neexistují cykly (Molnár, Češka, Melichar, 1987, s 47 48) Syntaktická analýza Proces vytváření derivace nebo derivačního stromu věty daného jazyka se nazývá rozklad (rozbor) a nebo syntaktická analýza věty. Účelem tohoto procesu je nejen zjištění, že řetězec nad danou abecedou jazyka je větou jazyka, tj. že neobsahuje syntaktické chyby, ale neméně důležité je i nalezení syntaktické struktury věty, podle které lze potom udělat překlad do jiného jazyka. Ta část překladače, která realizuje syntaktickou analýzu, se nazývá syntaktický analyzátor. Jeden z největších praktických přínosů teorie bezkontextových jazyků je právě v oblasti konstrukce syntaktických analyzátorů, protože dodává nejen efektivní algoritmy syntaktické analýzy, ale umožňuje i automatizaci výstavby syntaktických analyzátorů. Algoritmy syntaktické analýzy lze rozdělit podle způsobu, jakým je vytvářený derivační strom věty, na dvě skupiny: shora dolů, zdola nahoru. V této práci použiji způsob vytváření derivačního stromu metodou shora dolů. Při syntaktické analýze shora dolů se začíná vytvářet derivační strom od kořene začátečního symbolu gramatiky a postupnou aplikací přepisovacích pravidel na nejlevější neterminální symbol získávaných větných forem se dojde na ke koncovým vrcholům derivačního stromu symbolům analyzované věty. Při syntaktické analýze shora dolů je tedy vytvářena levá derivace analyzované věty. Výběr levé derivace je náhodný. Systematická náhrada nejlevějšího neterminálního symbolu větné formy umožňuje v procesu syntaktické analýzy porovnávat generované terminální symboly větné formy se symboly analyzované věty co nejdříve, jak to vyplývá z vlastností levé derivace (Molnár, Češka, Melichar, 1987, s. 75). Derivačního strom tedy analyzuje věty daného jazyka a pomáhá tak pochopit fungování syntaktického analyzátoru. Samotnou syntaxy jazyka je však potřeba nejprve specifikovat konkrétními pravidly. Přehledným způsobem navržení pravidel bezkontextové gramatiky je návrh syntaktických diagramů Grafy syntaxe Grafy syntaxe představují grafické vyjádření pravidel bezkontextové gramatiky. Uzly tohoto grafu jsou buď obdélníky (představují odkazy na jiný graf, tj. neterminální symbol), nebo ovály terminální symboly (obr. 1). Spojnice představují možné posloupnosti symbolů ve větné formě. Grafy syntaxe se často používají k popisu programovacích jazyků a jsou pro člověka přehlednější, než pravidla gramatiky. Grafy syntaxe lze rozložit na elementy, které lze vyjádřit pomocí pravidel gramatiky, a to zřetězení symbolů, varianta a ite-

20 3.4 Bezkontextové gramatiky a jazyky 20 Obr. 1: Zřetězení symbolů. race. Vyjádření jednotlivých prvků pomocí pravidel bezkontextové gramatiky definují následující případy (Rybička, 1999, s ): Zřetězení symbolů (obr. 2) Obr. 2: Zřetězení symbolů. Odpovídající pravidlo gramatiky: A α 1 α 2. Varianta (obr. 3) Obr. 3: Varianta. Odpovídající pravidlo gramatiky: A α 1 α 2 Iterace (obr. 4) Odpovídající pravidlo gramatiky musí vyjadřovat skutečnost, že prvek α 1 se musí vyskytovat alespoň jedenkrát, a musí odrážet iteraci, musí tedy být rekurzivní. Výhodné je, aby pravidla obsahovala pravou rekurzi. A α 1 A A α 1 A ε Seznam oddělovačů (obr. 5) Často se vyskytujícím prvkem syntaktických grafů je iterace prvků s oddělovači v podobě terminálního symbolu a. Odpovídající pravidla gramatiky jsou odvozena od tvaru v předcházejím případě: A α 1 A A aα 1 A ε Ze syntaktických diagramů je možné jednoduchým způsobem odvodit bezkontextovou gramatiku, potřebnou pro sestavení zásobníkového automatu Zásobníkový automat Zásobníkové automaty představují třídu abstraktních matematických strojů, které jsou z hlediska reprezentace jazyků rovnocené bezkontextovým gramatikám. Podobně jako konečné automaty v třídě regulárních jazyků zásobníkové automaty umožňují modelovat syntaktickou analýzu bezkontextových gramatik.

21 3.4 Bezkontextové gramatiky a jazyky 21 Obr. 4: Iterace. Obr. 5: Seznam oddělovačů. Zásobníkový automat je jednosměrný nedeterministický automat, který má pomocnou, potenciálně nekonečnou paměť organizovanou jako zásobník. Vstupní páska je rozdělená na elementární záznamy, ze kterých každý obsahuje právě jeden vstupní symbol. Obsah každého záznamu je postupně načítán čtecí hlavou, ale není možné ho změnit. V každém kroku, taktu, se čtecí hlava posune o jeden záznam vpravo, nebo zůstává na stejné pozici (jednosměrný automat). Konečné stavové řízení, předepsané přechodovou funkcí automatu, realizuje v závislosti na vnitřním stavu čteného vstupního symbolu a řetězce na vrcholu zásobníku akci změny vnitřního stavu, posuvu čtecí hlavy a změny obsahu zásobníku. Zásobníkový automat je všeobecně nedeterministický stroj. Přechodová funkce může předepisovat několik alternativních akcí, a to vzhledem na následující stav a obsah zásobníku, nebo také na to, zda se čtecí hlava posune na další symbol nebo ne. Zásobníkový automat je definován jako sedmice P = (Q, Σ, Γ, δ, q 0, Z 0, F ) kde 1. Q je konečná množina vnitřních stavů, 2. Σ je vstupní abeceda, 3. Γ je konečná množina zásobníkových symbolů zásobníková abeceda, 4. δ je přechodová funkce daná zobrazením z množiny Q (T {ε}) Γ do množiny podmnožin množiny Q Γ přičemž δ(q, a, α) 0 pouze pro konečný počet trojic δ(q, a, α), 5. q 0 Q je počáteční stav, 6. Z 0 Γ je počáteční symbol, určující počáteční obsah zásobníku, 7. F Q je množina koncových stavů. Činnost zásobníkového automatu spočívá v přechodu mezi jednotlivými konfiguracemi tohoto automatu. Konfigurace zásobníkového automatu P představuje trojice (q, w, γ) z množiny Q T Γ, kde q je momentální stav stavového řízení, w je doposud nepřečtená část vstupního řetězce ze vstupní pásky; první symbol řetězce w se nachází pod čtecí hlavou. Pokud w = ε, tak byly přečtené všechny symboly ze vstupní pásky. γ je obsah zásobníku; pokud γ = ε, tak je zásobník prázdný.

22 3.5 Deterministické bezkontextové jazyky 22 Počáteční konfigurace zásobníkového automatu má tvar (q 0, w, Z 0 ), w T, což znamená, že automat je v počátečním stavu q 0, čtecí hlava je nastavená na první symbol řetězce w a v zásobníku je počáteční symbol Z 0. Koncová konfigurace má tvar (q, ε, γ), q F,γ Γ, tedy obsah celé vstupní pásky byl přečtený a automat je v koncovém stavu. Obsah zásobníku může být libovolný. Přechod zásobníkového automatu P z jedné konfigurace do druhé je reprezentován binární relací na množině všech konfigurací automatu takto: (q, aw, αγ) (q, wβγ) df (q, β) δ(q, a, α) q, q Q, a (Σ {ε}), w Σ, α, β, γ Γ Definovanou relaci lze interpretovat takto: pokud se zásobníkový automat P nachází ve stavu q, pod čtecí hlavou je symbol a a na vrcholu zásobníku je uložený řetězec α, tak po přečtení vstupního symbolu a, a ε, může automat přejít do stavu q, čtecí hlava se posune o jeden symbol vpravo a na vrchol zásobníku se uloží, po odstranění řetězce α, řetězec β. Pokud α = ε, tak se ze zásobníku neodstraňuje žádný symbol, pokud β = ε, tak se do zásobníku žádný symbol nevkládá. Pokud α = ε, tak se přechod do nové konfigurace neurčuje vstupním symbolem a čtecí hlava se proto neposouvá (Molnár, Češka, Melichar, 1987, s ). Definovaný zásobníkový automat je nedeterministický stroj, tzn. že v každé situaci nemusí být možné jednoznačně přejít do následující konfigurace. Při výběru konfigurace, která se ve výsledku ukáže být jako chybná, je nutné vrátit proces rozkladu do místa volby, zvolit jinou konfiguraci a pokračovat v analýze. Nedeterminismus znamená použití syntaktické analýzy s návraty. Bohužel neexistuje algoritmus převádějící nedeterministickou bezkontextovou gramatiku na ekvivalentní gramatiku deterministickou. Sestrojení syntaktického analyzátoru bez návratů vyžaduje vlastní návrh deterministické bezkontextové gramatiky. 3.5 Deterministické bezkontextové jazyky Deterministické bezkontextové jazyky tvoří vlastní podmnožinu bezkontextových jazyků. Množina detreministických bezkontextových jazyků zahrnuje všechny regulární jazyky a tvoří velmi důležitou třídu formálních jazyků. K nejvýznamějším vlastnostem deterministických bezkontextových jazyků z hlediska jejich aplikace v překladačích a programovacích jazycích patří: efektivita syntaktické analýzy, automatizovatelnost konstrukce syntaktického analyzátoru, jednoduchá lokalizace syntaktických chyb. Pro deterministické bezkontextové gramatiky je možné sestrojit syntaktický analyzátor bez návratů. To je možné pouze na základě třídy zásobníkových automatů, které mohou v každém kroku přecházet pouze do jediné konfigurace deterministických zásobníkových automatů.

23 3.5 Deterministické bezkontextové jazyky 23 Zavedení pojmu deterministický zásobníkový automat umožňuje tvrzení, že jazyk L se nazývá deterministický bezkontextový jazyk, pokud existuje deterministický zásobníkový automat P takový, že L(P ) = L (Molnár, Češka, Melichar, 1987, s. 103) Deterministický zásobníkový automat Pojem deterministický zásobníkový automat vyžaduje přesnou definici. Zásobníkový automat P = (Q, Σ, Γ, δ, q 0, Z 0, F ) je nazván deterministický zásobníkový automat pokud splňuje následující podmínky: 1. δ(q, a, α) 1 pro všechna q Q, a Σ {ε}, α Γ. 2. Pro libovolný stav q, symbol a Σ {ε}, a řetězec α, β zásobníkových symbolů platí: a) jestliže δ(q, a, α) 0 a zároveň δ(q, ε, β) 0, pak α není předponou řetězce β, ani β není předponou řetězce α, b) jestliže δ(q, a, α) 0 a zároveň δ(q, a, β) 0, pak α není předponou řetězce β, ani β není předponou řetězce α (prázdný řetězec je předponou každého řetězce)(molnár, Češka, Melichar, 1987, s. 102). Rozdíly mezi bezkontextovými gramatikami se projevují i ve specifikaci zásobníkových automatů. Libovolný bezkontextový jazyk nemůže být přijímán deterministickým zásobníkovým automatem a ani není možné každý zásobníkový automat upravit na ekvivalentní deterministický zásobníkový automat podobně, jako je to v třídě konečných automatů LL jayzky a gramatiky Skupina algoritmů syntaktické analýzy, které vytvářejí derivační strom analyzovaného řetězce směrem shora dolů se nazývají algoritmy LL(k) analýzy. Je to proto, protože čtou vstupní řetězec zleva doprava, vytváří levý rozklad a přitom používají informaci o nejbližších k symbolech z doposud nepřečtené části vstupního řetězce. Gramatiky, pro které je tyto algoritmy možné vytvořit, se nazývají LL(k) gramatiky. Základní princip syntaktické analýzy pro LL gramatiky je možné definovat takto: Daná je bezkontextová gramatika G = (N, Σ, P, S) a řetězec w = a 1, a 2,... a n, který je větou jazyka L(G). Potom existuje levá derivace S = γ 1, γ 2... γ m = w. Vzhledem k tomu, že derivace je levá, má každá větná forma γ i tvar γ i = a 1 a 2... a j A i β i, kde a 1, a 2,..., a j jsou terminální symboly, A je neterminální symbol, β je řetězec terminálních a neterminálních symbolů. Přitom řetězec a 1 a 2... a j je předponou věty w. Předpokladem je, že A α 1 α 2... α p jsou všechna pravidla z množiny pravidel P s neterminálním symbolem A na levé straně. Potom základní problém syntaktické analýzy metodou shora dolů spočívá v nalezení toho pravidla A α k, kterého aplikací dostaneme z větné formy γ i větnou formu γ i+1.

24 3.5 Deterministické bezkontextové jazyky 24 Modelem syntaktického analyzátoru je nedeterministický zásobníkový automat, ale pro syntaktický analyzátor bez vracení je potřeba sestavit deterministický automat, který řeší problém výběru. Pro bezkontextovou gramatiku vytvoříme zásobníkový automat, který má definované zobrazení δ takto: 1. δ(q, ε, A) = {(q, α)/a α P }, 2. δ(q, a, a) = {(q, ε)}. Operace podle bodu 1 se nazývá expanze, operace podle bodu 2 porovnání. Zobrazení podle bodu 2 vyhovuje definici deterministického zásobníkového automatu. Problémem je zobrazení podle bodu 1. Zobrazení δ(q, ε, A) dává množinu, která má tolik prvků, kolik pravidel pro neterminální symbol A v gramatice existuje. Je potřeba si všimnout, že problém výběru pravidla tato konstrukce neřeší. Deterministický zásobníkový automat vznikne touto konstrukcí pouze tehdy, když pro každý neterminální symbol je v gramatice pouze jedno pravidlo. Tyto gramatiky (LL(0) gramatiky) nemají praktický význam z toho důvodu, že generují pouze jednu větu a nebo prázdný jazyk. Pro většinu bezkontextových gramatik vznikne tedy uvedenou konstrukcí nedeterministický zásobníkový automat. Přitom je třeba si všimnout, že pro výběr pravidla na expanzi tento automat nevyužívá žádnou informaci. Při syntaktické analýze existují dva zdroje informací, které je možné použít při rozhodování o dalším postupu: informace o doposud nepřečtené části vstupního řetězce, informace o průběhu analýzy. Při syntaktické analýze metodou shora dolů se využívá především informace o k nejbližších symbolech v doposud nepřečtené části vstupního řetězce. To znamená, že podle tohoto dopředu prohlédnutého řetězce se vykonává rozhodnutí o tom, jaké pravidlo má být použito při expanzi (Molnár, Češka, Melichar, 1987, s ). Informace o k následujících symbolech vstupní věty se uplatňuje v LL(k) gramatikách, generujících jazyk typu LL(k). Speciálním případem je gramatika typu LL(1), kdy k rozlišení pravých stran A-pravidel postačuje jediný následující terminální symbol analyzované věty Levá rekurze Někdy se mohou v bezkontextových gramatikách vyskytnout případy, kdy se na začátku pravé strany A-pravidla vyskytne neterminální symbol z levé strany pravidla. Tomuto jevu se říká levá rekurze, která je pro některé metody syntaktické analýzy nežádoucí a je potřeba ji odstranit. Levá rekurze má dvě podoby, přímá levá rekurze a nepřímá levá rekurze. Jsou-li všechna pravidla pro neterminální symbol A zapsána jako A Aα 1 Aα 2... Aα n β 1 β 2... β m

25 3.5 Deterministické bezkontextové jazyky 25 kde A N; α i, β j (Σ {N {A}}), jedná se o přímou levou rekurzi, kterou lze odstranit následovně (Lobaz, 2006): nebo pomocí ε-pravidel: A β 1 β 2... β m β 1 A β 2 A... β m A A α 1 α 2... α n α 1 A α 2 A... α n A A β 1 A β 2 A... β m A A α 1 A α 2 A... α n A ε V regulární gramatice jsou sice ε-pravidla odstraňována kvůli dosažení regularity. Je nutné si uvědomit, že regulární jazyky tvoří podmnožinu jazyků bezkontextových, na které nejsou kladeny tak vysoké nároky. Jak je v předešlém tvrzení ukázáno, zavedení ε-pravidla do bezkontextové gramatiky může být dokonce přínosem pro zjednodušení pravidel gramatiky. Další rekurentní zacyklení mohou nastat gramatikou, ve které se vyskytuje nepřímá levá rekurze. Nepřímá rekurze vzniká z definovaných pravidel například způsobem A B..., B A.... Její odstranění funguje podobně jako u přímé rekurze, kdy za neterminální symbol na pravé straně prvního pravidla nahradíme celým pravým pravidlem tohoto neterminálního symbolu Množiny FIRST a FOLLOW Problémem při rozhodování o variantě na pravé straně A-pravidel je tedy zjistit, kterým terminálním symbolem jednotlivé varianty začínají. K tomuto zjištění slouží výpočet množiny FIRST(α) dané gramatiky G = (N, Σ, P, S) podle následujícího algoritmu: 1. Předpokládáme, že α = X 1 X 2... X m, kde X i (N Σ). 2. Je-li X 1 Σ, pak FIRST(α) = {X 1 }. 3. Je-li X 1 N a X 1 αβ, pak k množině FIRST(α) přidej terminál a. 4. Je-li X 1 N a X 1 ε, pak k množině FIRST(α) přidej symboly množiny FIRST(γ), kde γ = X 2... X m. Množinu FIRST je nutné vypočítat pro všechny varianty pravých stran A- pravidla. Je-li však některé α i = ε, je potřeba ještě vypočítat množinu FOLLOW(A) takto: 1. FOLLOW(S) obsahuje ε. 2. Je-li A αbβ P a β ε, pak FOLLOW(B) obsahuje všechny prvky FIRST(β). 3. Je-li A αbβ P a β ε, pak všechny prvky FOLLOW(A) jsou v množině FOLLOW(B).

26 3.5 Deterministické bezkontextové jazyky Gramatika typu LL(1) Při syntaktické analýze je někdy potřeba pracovat s bezkontextovou gramatikou která obsahuje pravidla libovolného tvaru. Znamená to, že na pravé straně výrazu A α se mohou vyskytovat výrazy, které nezačínají terminálním symbolem. Zpracování takových bezkontextových gramatik je možné zavedením již zmíněných funkcí FIRST a FOLLOW. Díky nim je možné definovat LL(1) gramatiky následujícím způsobem (Molnár, Češka, Melichar, 1987, s. 115). Bezkontextová gramatika G = (N, Σ, P, S) se nazývá LL(1)gramatika, pokud platí následující podmínka pro každé A N: pokud A α a A β jsou různé pravidla v P, tak 1. pro řetězce α, β musí platit FIRST(α) FIRST(β) = 0 2. pokud je možné z řetězce α derivovat prázdný řetězec a z řetězce β není možné derivovat prázdný řetězec, tak musí platit FOLLOW(A) FIRST(β) = 0 Předcházející definici je možné zkráceně formulovat takto (Rybička, 1999, s. 28): Je dána bezkontextová gramatika G = (N, Σ, P, S). Obsahuje-li množina P nějaká A-pravidla tvaru A α 1 α 2... α n, pak FF(α i ) FF(α j ) = 0 i, j {1... n}, i j, přičemž symbol FF(α i ) značí množinu FIRST(α i ), je-li α i ε a množinu FOLLOW(A) v případě α i = ε Algoritmus syntaktické analýzy pro gramatiku typu LL(1) Analýzu věty jazyka popsaného gramatikou typu LL(1) provádí zásobníkový automat, řízený rozkladovou tabulkou. Tento automat provádí rozklad věty v zásobníku na základě symbolů čtených ze vstupní pásky. Rozkladová tabulka reprezentuje zobrazení M : (Γ {#}) (Σ {ε}) R, kde R nabývá pro každou dvojici (X, Y ) následující hodnoty: 1. řetězec β Γ, je-li X N a zároveň A βinp a zároveň Y FF(β), 2. prvek pop, je-li X = Y, X, Y Σ, 3. prvek accept, je-li X = # a zároveň Y = ε, 4. prvek error v ostatních případech. Počáteční konfigurace automatu je definována tak, že v zásobníku se nachází startovací symbol gramatiky a speciální symbol # a na vstupní pásce je celá analyzovaná věta. Koncová konfigurace předpokládá v zásobníku jediný symbol # a na vstupní pásce prázdný řetězec.

27 3.6 Sémantické akce 27 Činnost automatu určují prvky rozkladové tabulky takto: Je-li vrcholem zásobníku neterminál, vybere se z rozkladové tabulky podle aktuálního symbolu na vstupní pásce příslušný řetězec β, kterým se nahradí neterminál v zásobníku. Je-li vrcholem zásobníku terminál a na vstupu je tentýž terminál, provede se operace pop, která znamená odstranění vrcholu zásobníku a přečtení (odstranění) téhož terminálu ze vstupní pásky. Je-li vrcholem zásobníku # a věta je přečtena, je provedena akce accept, tj. přijetí věty. V ostatních případech je provedena akce error, tj. ohlášení syntaktické chyby (Rybička, 1999, s. 28). Vytvoření rozkladové tabulky deterministického zásobníkového automatu je předpokladem pro implementaci syntaktického analyzátoru. Syntaktický analyzátor dokáže poskytnout informaci, zda syntaxe jazyka je správná či nikoliv. Aby interpret daného jazyka byl schopen vykonávat nějaké akivity, musí mít implementovány sémantické akce. 3.6 Sémantické akce Sémantické akce jsou aktivity implementované ve vhodném místě syntaktického analyzátoru. Během sémantické analýzy se provádějí některé kontroly zajišťující správnost programu z hlediska vazeb, které nelze provádět v rámci syntaktické analýzy (např. kontrola deklarací, typová kontrola, atd.). Implementace sémantických akcí znamená přidání specifických operací do gramatiky syntaktického analyzátoru. Jak již bylo řečeno, syntaktická analýza znamená přechod mezi jednotlivými konfiguracemi syntaktického analyzátoru. Pokud se na některém místě průchodu vyskytne příkaz pro vykonání sémantické akce, tato akce se provede, a pokračuje se dále v přechodu na další konfiguraci analyzátoru. Technicky jsou sémantické akce reprezentovány funkcemi, které provedou danou operaci, podle toho, na jakém místě se v dané gramatice jazyka vyskytují. 3.7 Programovací jazyk C Interpret jazyka Ruzin je programován v programovacím jazyce C, je tedy vhodné tento programovací jazyk čtenáři přiblížit. Jazyk C je univerzální programovací jazyk nízké úrovně (low level language). Má velmi úsporné vyjadřování, je strukturovaný, má velký soubor operátorů a moderní datové struktury. Není specializovaný na jednu oblast používání. Pro mnoho úloh je efektivnější a rychlejší než jiné jazyky. C byl navržen a implementován pod operačním systémem UNIX a téměř celý UNIX je v C napsán. C se ale na UNIX nijak neváže a neváže se ani na jiný konkrétní počítač či operační systém. Jazyk nízké úrovně znamená, že C pracuje přímo pouze se standardními datovými typy jako jsou znaky, celá a reálná čísla atd. C neumožňuje přímo práci s řetězci a poli ani přímo neobsahuje nástroje pro vstupy a výstupy. Tyto všechny akce je nutné provádět pomocí volání funkcí, což přináší určité výhody např.:

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

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

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

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

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

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

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

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

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LL SYNTAKTICKÁ ANALÝZA DOKONČENÍ, IMPLEMENTACE.

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LL SYNTAKTICKÁ ANALÝZA DOKONČENÍ, IMPLEMENTACE. PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LL SYNAKICKÁ ANALÝZA DOKONČENÍ, IMPLEMENACE. VLASNOSI LL GRAMAIK A JAZYKŮ. 2011 Jan Janoušek BI-PJP Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Gramatika

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

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

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

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

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

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

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

Ú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

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

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

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

Čí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

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

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

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

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K. Virtuální počítač Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor Virtuální počítač Překladač Překladač : Zdrojový jazyk Cílový jazyk Analytická část:

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Implementace LL(1) překladů

Implementace LL(1) překladů Překladače, přednáška č. 6 Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 30. října 2007 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku

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

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

Lexikální analýza Teorie programovacích jazyků

Lexikální analýza Teorie programovacích jazyků Lexikální analýza Teorie programovacích jazyků doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Osnova dnešní přednášky 1 Úvod do teorie překladačů kompilátor a interpret

Více

Vlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost

Vlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost Programování Algoritmus návod na vykonání činnosti, který nás od (měnitelných) vstupních dat přivede v konečném čase k výsledku přesně definovaná konečná posloupnost činností vedoucích k výsledku (postup,

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

/1: Teoretická informatika(ti) přednáška 4

/1: Teoretická informatika(ti) přednáška 4 456-330/1: Teoretická informatika(ti) přednáška 4 prof. RNDr Petr Jančar, CSc. katedra informatiky FI VŠB-TUO www.cs.vsb.cz/jancar LS 2009/2010 Petr Jančar (FI VŠB-TU) Teoretická informatika(ti) LS 2009/2010

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

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem. Algoritmus Algoritmus je schematický postup pro řešení určitého druhu problémů, který je prováděn pomocí konečného množství přesně definovaných kroků. nebo Algoritmus lze definovat jako jednoznačně určenou

Více

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava Implementace LL(1) překladů Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 6. ledna 2012 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku

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

Překladač a jeho struktura

Překladač a jeho struktura Překladač a jeho struktura Překladače, přednáška č. 1 Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz http://fpf.slu.cz/ vav10ui Poslední aktualizace: 23. září 2008 Definice

Více

Složitost Filip Hlásek

Složitost Filip Hlásek Složitost Filip Hlásek Abstrakt. Příspěvek popisuje dva základní koncepty teoretické informatiky, Turingovy stroje a složitost. Kromě definic důležitých pojmů uvádí také několik souvisejících tvrzení,

Více

3 Co je algoritmus? 2 3.1 Trocha historie... 2 3.2 Definice algoritmu... 3 3.3 Vlastnosti algoritmu... 3

3 Co je algoritmus? 2 3.1 Trocha historie... 2 3.2 Definice algoritmu... 3 3.3 Vlastnosti algoritmu... 3 Obsah Obsah 1 Program přednášek 1 2 Podmínky zápočtu 2 3 Co je algoritmus? 2 3.1 Trocha historie............................ 2 3.2 Definice algoritmu.......................... 3 3.3 Vlastnosti algoritmu.........................

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

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí) Programovací jazyky Programovací jazyky nižší assembler (jazyk symbolických instrukcí) vyšší imperativní (procedurální) Pascal, C/C++, Java, Basic, Python, php neimperativní (neprocedurální) Lisp, Prolog

Více

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru: 3 Maticový počet 3.1 Zavedení pojmu matice Maticí typu (m, n, kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru: a 11 a 12... a 1k... a 1n a 21 a 22...

Více

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Maturitní otázky z předmětu PROGRAMOVÁNÍ Wichterlovo gymnázium, Ostrava-Poruba, příspěvková organizace Maturitní otázky z předmětu PROGRAMOVÁNÍ 1. Algoritmus a jeho vlastnosti algoritmus a jeho vlastnosti, formy zápisu algoritmu ověřování správnosti

Více

TÉMATICKÝ OKRUH TZD, DIS a TIS

TÉMATICKÝ OKRUH TZD, DIS a TIS TÉMATICKÝ OKRUH TZD, DIS a TIS Číslo otázky : 27. Otázka : Principy moderních překladačů, virtuální stroj. Obsah : 1.Překladač a jeho struktura 2.Druhy překladačů 3.Hlavní části překladače 3.1 Lexikální

Více

Základy algoritmizace

Základy algoritmizace Algoritmus Toto je sice na první pohled pravdivá, ale při bližším prozkoumání nepřesná definice. Například některé matematické postupy by této definici vyhovovaly, ale nejsou algoritmy. Přesné znění definice

Více

Programovací jazyk Pascal

Programovací jazyk Pascal Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce

Více

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace Vektory a matice Aplikovaná matematika I Dana Říhová Mendelu Brno Obsah 1 Vektory Základní pojmy a operace Lineární závislost a nezávislost vektorů 2 Matice Základní pojmy, druhy matic Operace s maticemi

Více

Program a životní cyklus programu

Program a životní cyklus programu Program a životní cyklus programu Program algoritmus zapsaný formálně, srozumitelně pro počítač program se skládá z elementárních kroků Elementární kroky mohou být: instrukce operačního kódu počítače příkazy

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Algoritmus Daniela Szturcová Tento

Více

Příklad z učebnice matematiky pro základní školu:

Příklad z učebnice matematiky pro základní školu: Příklad z učebnice matematiky pro základní školu: Součet trojnásobku neznámého čísla zvětšeného o dva a dvojnásobku neznámého čísla zmenšeného o pět se rovná čtyřnásobku neznámého čísla zvětšeného o jedna.

Více

Úvod. Programovací paradigmata

Úvod. Programovací paradigmata .. Úvod. Programovací paradigmata Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Cíl: programování efektivně a bezpečně Programovací techniky

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

Množiny, relace, zobrazení

Množiny, relace, zobrazení Množiny, relace, zobrazení Množiny Množinou rozumíme každý soubor určitých objektů shrnutých v jeden celek. Zmíněné objekty pak nazýváme prvky dané množiny. Pojem množina je tedy synonymem pojmů typu soubor,

Více

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky Vyučovací hodina 1vyučovací hodina: Opakování z minulé hodiny Nová látka Procvičení nové látky Shrnutí 5 min 20 min 15 min 5 min 2vyučovací hodiny: Opakování z minulé hodiny Nová látka Procvičení nové

Více

1 Linearní prostory nad komplexními čísly

1 Linearní prostory nad komplexními čísly 1 Linearní prostory nad komplexními čísly V této přednášce budeme hledat kořeny polynomů, které se dále budou moci vyskytovat jako složky vektorů nebo matic Vzhledem k tomu, že kořeny polynomu (i reálného)

Více

Operační výzkum. Síťová analýza. Metoda CPM.

Operační výzkum. Síťová analýza. Metoda CPM. Operační výzkum Síťová analýza. Metoda CPM. Operační program Vzdělávání pro konkurenceschopnost Název projektu: Inovace magisterského studijního programu Fakulty ekonomiky a managementu Registrační číslo

Více

Algoritmizace. 1. Úvod. Algoritmus

Algoritmizace. 1. Úvod. Algoritmus 1. Úvod Algoritmizace V dnešní době již počítače pronikly snad do všech oblastí lidské činnosti, využívají se k řešení nejrůznějších úkolů. Postup, který je v počítači prováděn nějakým programem se nazývá

Více

Dijkstrův algoritmus

Dijkstrův algoritmus Dijkstrův algoritmus Hledání nejkratší cesty v nezáporně hranově ohodnoceném grafu Necht je dán orientovaný graf G = (V, H) a funkce, která každé hraně h = (u, v) H přiřadí nezáporné reálné číslo označované

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

= je prostý orientovaný graf., formálně c ( u, v) 0. dva speciální uzly: zdrojový uzel s a cílový uzel t. Dále budeme bez

= je prostý orientovaný graf., formálně c ( u, v) 0. dva speciální uzly: zdrojový uzel s a cílový uzel t. Dále budeme bez Síť Síť je čtveřice N = ( G, s, t, c) kde G ( V, A) = je prostý orientovaný graf a každé orientované hraně ( u, v) je přiřazeno nezáporné číslo, které se nazývá kapacita hrany ( u, v), formálně c ( u,

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

/01: Teoretická informatika(ti) přednáška 5

/01: Teoretická informatika(ti) přednáška 5 460-4005/01: Teoretická informatika(ti) přednáška 5 prof. RNDr Petr Jančar, CSc. katedra informatiky FEI VŠB-TUO www.cs.vsb.cz/jancar LS 2010/2011 Petr Jančar (FEI VŠB-TU) Teoretická informatika(ti) LS

Více

NP-úplnost problému SAT

NP-úplnost problému SAT Problém SAT je definován následovně: SAT(splnitelnost booleovských formulí) Vstup: Booleovská formule ϕ. Otázka: Je ϕ splnitelná? Příklad: Formule ϕ 1 =x 1 ( x 2 x 3 )jesplnitelná: např.přiohodnocení ν,kde[x

Více

1. Definujte překladač. Jaký je rozdíl mezi interpretačním a kompilačním překladačem? Co je to konverzační překladač?

1. Definujte překladač. Jaký je rozdíl mezi interpretačním a kompilačním překladačem? Co je to konverzační překladač? 1. Definujte překladač. Jaký je rozdíl mezi interpretačním a kompilačním překladačem? Co je to konverzační překladač? 2. Charakterizujte lexikální analýzu(vstup, výstup, lexikální chyby). 3. Definujte

Více

5 Orientované grafy, Toky v sítích

5 Orientované grafy, Toky v sítích Petr Hliněný, FI MU Brno, 205 / 9 FI: IB000: Toky v sítích 5 Orientované grafy, Toky v sítích Nyní se budeme zabývat typem sít ových úloh, ve kterých není podstatná délka hran a spojení, nýbž jejich propustnost

Více

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí) Programovací jazyky Programovací jazyky nižší assembler (jazyk symbolických instrukcí) vyšší imperativní (procedurální) Pascal, C/C++, Java, Basic, Python, php neimperativní (neprocedurální) Lisp, Prolog

Více

Úvod do informatiky. Miroslav Kolařík. Zpracováno dle učebního textu R. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008.

Úvod do informatiky. Miroslav Kolařík. Zpracováno dle učebního textu R. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008. Úvod do informatiky přednáška čtvrtá Miroslav Kolařík Zpracováno dle učebního textu R. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008. Obsah 1 Pojem relace 2 Vztahy a operace s (binárními) relacemi

Více

MATICE. a 11 a 12 a 1n a 21 a 22 a 2n A = = [a ij]

MATICE. a 11 a 12 a 1n a 21 a 22 a 2n A = = [a ij] MATICE Matice typu m/n nad tělesem T je soubor m n prvků z tělesa T uspořádaných do m řádků a n sloupců: a 11 a 12 a 1n a 21 a 22 a 2n A = = [a ij] a m1 a m2 a mn Prvek a i,j je prvek matice A na místě

Více

ALGORITMIZACE A PROGRAMOVÁNÍ

ALGORITMIZACE A PROGRAMOVÁNÍ Metodický list č. 1 Algoritmus a jeho implementace počítačovým programem Základním cílem tohoto tematického celku je vysvětlení pojmů algoritmus a programová implementace algoritmu. Dále je cílem seznámení

Více

Matematická analýza 1

Matematická analýza 1 Matematická analýza 1 ZS 2019-20 Miroslav Zelený 1. Logika, množiny a základní číselné obory 2. Limita posloupnosti 3. Limita a spojitost funkce 4. Elementární funkce 5. Derivace 6. Taylorův polynom Návod

Více

Lekce 01 Úvod do algoritmizace

Lekce 01 Úvod do algoritmizace Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů Lekce 01 Úvod do algoritmizace Tento projekt CZ.1.07/1.3.12/04.0006 je spolufinancován Evropským sociálním

Více

Matematická logika. Miroslav Kolařík

Matematická logika. Miroslav Kolařík Matematická logika přednáška šestá Miroslav Kolařík Zpracováno dle textu R. Bělohlávka: Matematická logika poznámky k přednáškám, 2004. a dle učebního textu R. Bělohlávka a V. Vychodila: Diskrétní matematika

Více

Výukový materiál zpracován v rámci projektu EU peníze školám

Výukový materiál zpracován v rámci projektu EU peníze školám Výukový materiál zpracován v rámci projektu EU peníze školám Registrační číslo projektu: CZ. 1.07/1.5.00/34.0637 Šablona III/2 Název VY_32_INOVACE_39_Algoritmizace_teorie Název školy Základní škola a Střední

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

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Algoritmus pro hledání nejkratší cesty orientovaným grafem 1.1 Úvod Algoritmus pro hledání nejkratší cesty orientovaným grafem Naprogramoval jsem v Matlabu funkci, která dokáže určit nejkratší cestu v orientovaném grafu mezi libovolnými dvěma vrcholy. Nastudoval

Více

TÉMATICKÝ OKRUH Softwarové inženýrství

TÉMATICKÝ OKRUH Softwarové inženýrství TÉMATICKÝ OKRUH Softwarové inženýrství Číslo otázky : 24. Otázka : Implementační fáze. Postupy při specifikaci organizace softwarových komponent pomocí UML. Mapování modelů na struktury programovacího

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

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

Výroková a predikátová logika - III Výroková a predikátová logika - III Petr Gregor KTIML MFF UK ZS 2017/2018 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - III ZS 2017/2018 1 / 16 2-SAT 2-SAT Výrok je v k-cnf, je-li v CNF a

Více

Báze a dimenze vektorových prostorů

Báze a dimenze vektorových prostorů Báze a dimenze vektorových prostorů Buď (V, +, ) vektorový prostor nad tělesem (T, +, ). Nechť u 1, u 2,..., u n je konečná posloupnost vektorů z V. Existují-li prvky s 1, s 2,..., s n T, z nichž alespoň

Více

8) Jaké jsou důvody pro použití víceprůchodového překladače Dříve hlavně kvůli úspoře paměti, dnes spíše z důvodu optimalizace

8) Jaké jsou důvody pro použití víceprůchodového překladače Dříve hlavně kvůli úspoře paměti, dnes spíše z důvodu optimalizace 1) Charakterizujte křížový překladač Překlad programu probíhá na jiném procesoru, než exekuce. Hlavním důvodem je náročnost překladače na cílovém stroji by ho nemuselo být možné rozběhnout. 2. Objasněte

Více

Vývojové diagramy 1/7

Vývojové diagramy 1/7 Vývojové diagramy 1/7 2 Vývojové diagramy Vývojový diagram je symbolický algoritmický jazyk, který se používá pro názorné zobrazení algoritmu zpracování informací a případnou stručnou publikaci programů.

Více

Zadání semestrálního projektu Algoritmy II. letní semestr 2017/2018

Zadání semestrálního projektu Algoritmy II. letní semestr 2017/2018 Zadání semestrálního projektu Algoritmy II. letní semestr 2017/2018 doc. Mgr. Jiří Dvorský, Ph.D. Verze zadání 6. dubna 2018 První verze Obecné pokyny 1. Celkem jsou k dispozici tři zadání příkladů. 2.

Více

63. ročník Matematické olympiády 2013/2014

63. ročník Matematické olympiády 2013/2014 63. ročník Matematické olympiády 2013/2014 Úlohy ústředního kola kategorie P 2. soutěžní den Na řešení úloh máte 4,5 hodiny čistého času. Při soutěži je zakázáno používat jakékoliv pomůcky kromě psacích

Více

Úvod z historie. Kompilátory. Kompilace / Kompilátor Compile / Compiler. Pojem kompilátoru. Úvod z historie

Úvod z historie. Kompilátory. Kompilace / Kompilátor Compile / Compiler. Pojem kompilátoru. Úvod z historie Úvod z historie RNDr. Miroslav Benedikovič John Louis von Neumann r. 1946 nová koncepce počítače (společná paměť pro kód programu a zpracovávaná data) vytvořila podmínky pro vznik softvéru na přípravu

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

Základy umělé inteligence

Základy umělé inteligence Základy umělé inteligence Automatické řešení úloh Základy umělé inteligence - prohledávání. Vlasta Radová, ZČU, katedra kybernetiky 1 Formalizace úlohy UI chápe řešení úloh jako proces hledání řešení v

Více

Algoritmy a algoritmizace

Algoritmy a algoritmizace Otázka 21 Algoritmy a algoritmizace Počítačové programy (neboli software) umožňují počítačům, aby přestaly být pouhou stavebnicí elektronických a jiných součástek a staly se pomocníkem v mnoha lidských

Více

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou

Více

Unární je také spojka negace. pro je operace binární - příkladem může být funkce se signaturou. Binární je velká většina logických spojek

Unární je také spojka negace. pro je operace binární - příkladem může být funkce se signaturou. Binární je velká většina logických spojek Otázka 06 - Y01MLO Zadání Predikátová logika, formule predikátové logiky, sentence, interpretace jazyka predikátové logiky, splnitelné sentence, tautologie, kontradikce, tautologicky ekvivalentní formule.

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

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013 Předměty Algoritmizace a programování Seminář z programování Verze pro akademický rok 2012/2013 Verze pro akademický rok 2012/2013 1 Přednášky Jiřina Královcová MTI, přízemí budovy A Tel: 48 53 53 521

Více

Teoretická informatika - Úkol č.1

Teoretická informatika - Úkol č.1 Teoretická informatika - Úkol č.1 Lukáš Sztefek, xsztef01 18. října 2012 Příklad 1 (a) Gramatika G 1 je čtveřice G 1 = (N, Σ, P, S) kde, N je konečná množina nonterminálních symbolů N = {A, B, C} Σ je

Více

Univerzální Turingův stroj a Nedeterministický Turingův stroj

Univerzální Turingův stroj a Nedeterministický Turingův stroj 27 Kapitola 4 Univerzální Turingův stroj a Nedeterministický Turingův stroj 4.1 Nedeterministický TS Obdobně jako u konečných automatů zavedeme nedeterminismus. Definice 14. Nedeterministický Turingův

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Algoritmus Daniela Szturcová Tento

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

Formální jazyky. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března / 32

Formální jazyky. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března / 32 Formální jazyky Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 1/ 32 Abeceda a slovo Definice Abeceda je libovolná neprázdná konečná množina symbolů(znaků). Poznámka: Abeceda se často

Více

Bezkontextové jazyky. Bezkontextové jazyky 1 p.1/31

Bezkontextové jazyky. Bezkontextové jazyky 1 p.1/31 Bezkontextové jazyky Bezkontextové jazyky 1 p.1/31 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

Bezkontextové gramatiky. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května / 49

Bezkontextové gramatiky. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května / 49 Bezkontextové gramatiky Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 1/ 49 Bezkontextové gramatiky Příklad: Chtěli bychom popsat jazyk aritmetických výrazů obsahující výrazy jako například:

Více