základů algoritmizace
|
|
- Aneta Moravcová
- před 8 lety
- Počet zobrazení:
Transkript
1 Mendelova univerzita v Brně Provozně ekonomická fakulta Punťa - vývojové prostředí pro výuku základů algoritmizace Diplomová práce Vedoucí práce: Mgr. Tomáš Foltýnek, Ph.D. Bc. Marek Fojtl Brno 2010
2 zadání práce
3 Děkuji Mgr. Tomáši Foltýnkovi, Ph.D. za vedení a podporu při tvorbě této práce a umožnění nasazení vývojové verze aplikace do výuky. Chtěl bych dále poděkovat Mgr. Jitce Machalové, Ph.D., Ing. Miroslavu Ceplovi a vybraným studentům a studentkám předmětu Výpočetní technika a algoritmizace II (LS09/10) za cenné připomínky a testování aplikace.
4 Prohlašuji, že jsem tuto diplomovou práci vyřešil samostatně s použitím literatury uvedené v závěru práce. V Brně dne 28. května
5 5 Abstract Fojtl M., Punťa - development environment for teaching of basic algorithms. Diploma thesis. Brno, 2010 This diploma thesis deals with construction of Punťa - new czech programming language and development environment for teaching of algorithms. A theoretical part discusses the meaning of a word algorithm, and important terms of programming language theory. A baseline analysis describes so far known products for teaching of algorithms. A solution consists in design and implementation Punťa language to its own development environment. Keywords algorithms, programming language, development environment, lexical analysis, syntactic analysis, semantic actions Abstrakt Fojtl M., Punťa - vývojové prostředí pro výuku základů algoritmizace. Diplomová práce. Brno, 2010 Diplomová práce se zabývá tvorbou nového českého programovací jazyka a vývojového prostředí pro výuku algoritmizace - Punťa. V teoretické části rozebírá význam slova algoritmus a důležité pojmy z teorie programovacích jazyků. V analýze výchozího stavu jsou popsány dosud známé produkty pro výuku algoritmizice. Vlastní řešení spočívá v návrhu a implemenentaci jazyka Punťa do vlastního vývojového prostředí. Klíčová slova algoritmizace, programovací jazyk, vývojové prostředí, lexikální analýza, syntaktická analýza, sémantické akce
6 OBSAH 6 Obsah 1 Úvod a cíl práce Úvod do problematiky Cíl práce Teoretická východiska práce Algoritmus Historická východiska Definice pojmu Formalizace pojmu Způsoby zápisu Algoritmizace Programovací jazyky Prostředek pro zápis algoritmu Dělení programovacích jazyků Formální jazyky a gramatiky Abeceda a jazyk Gramatika Chomského klasifikace gramatik Konečné automaty a jazyky typu 3 Chomského klasifikace Nedeterministický konečný automat Deterministický konečný automat Jazyky akceptované KA, konstrukce NKA Převod NKA na DKA Bezkontextové jazyky a zásobníkový automat Bezkontextová gramatika Derivační stromy Rozklad věty Syntaktické diagramy Zásobníkový automat Deterministické bezkontextové jazyky LL gramatiky Výpočet množin FIRST a FOLLOW Syntaktická analýza LL(1) gramatiky Sémantika
7 OBSAH 7 3 Současný stav řešené problematiky Pascal Robot Karel Baltazar, Baltík, Baltie Petr Imagine Logo Ostatní Zvolená metodika a programové prostředky Návrh lexikálního a syntaktického analyzátoru Návrh a implementace vývojového prostředí Implementace lexikálního a syntaktického analyzátoru a sémantických akcí do aplikace Vlastní práce Obecné vlastnosti jazyka Punťa Regulární gramatika lexikálního analyzátoru Abeceda jazyka Gramatika jazyka čísel Gramatika jazyka přiřazení Gramatika jazyka operátorů Gramatika jazyka řetězců Gramatika jazyka znaků Gramatika jazyka proměnných Gramatika jazyka klíčových slov Gramatika ukončovacího znaku příkazu Gramatika příkazových bloků Gramatika oddělovače parametrů a názvů proměnných Gramatika jazyka polí Gramatika bílých znaků Gramatika komentářů Stanovení nevýznamových tokenů Stanovení významových tokenů Zregularizovaný lexikální analyzátor NKA a DKA Bezkontextová gramatika syntaktického analyzátoru Deterministická bezkontextová gramatika souboru s hlavním programem Deterministická bezkontextová gramatika modulu
8 OBSAH Syntaktické diagramy Výpočet množin FIRST a FOLLOW Zásobníkový automat Vývojové prostředí Návrh uživatelského rozhraní Implementace uvítací obrazovky, editoru a console Funkce editoru Zvýrazňovač syntaxe Implementace lexikálního a syntaktického analyzátoru Lexikální analyzátor Syntaktický analyzátor Implementace sémantických akcí a popis příkazů Sémantický procesor Datové typy a pole Zpracování výrazů Větvení Cykly Matematické funkce Standardní vstup a výstup Práce s proměnnými typu Text Funkce definované uživatelem a globální proměnné Práce s grafikou Zpracování chyb Diskuse 64 7 Závěr 68 8 Literatura 69 Přílohy 71 A Nedeterministický a deterministický konečný automat 72 B Syntaktické diagramy 73 C Výpočet množin FIRST a FOLLOW 82 D Zásobníkový automat 85 E Dotazník 86
9 OBSAH 9 F Ukázkový příklad 88
10 1 ÚVOD A CíL PRÁCE 10 1 Úvod a cíl práce 1.1 Úvod do problematiky Využití prostředků informačních technologií v našem běžném i pracovním životě zaznamenalo v posledních letech velký nárůst. Možnost zakoupení personálního počítače je dnes cenově dostupná každému. Díky tomu se otevřela další cesta pro programátory a vývojáře aplikací, kteří již v dnešní době nemusí své aplikace vyvíjet pouze pro úzkou a specializovanou skupinu lidí, ale i pro širokou veřejnost. Aby vývojář navrhl dobrý a správně fungující software, musí nastudovat moderní přístupy pro jeho tvorbu a také jednu ze základní činností řešení problémů - algoritmizaci. Někteří by se nyní mohli mylně domnívat, že cílem výuky algoritmizace je připravit budoucí programátory na jejich povolání a toto téma se ostatních vlastně netýká. Ale jejím cílem nemusí být nutně jen výchova nových programátorů. Jde o trénink mozku a logického myšlení a zdokonolování se v řešení různých problémů, které nás v životě čekají. Trénink mozku je přitom v dnešní době velmi důležitý. Trendem se totiž stává automatizace rutinních činností, kdy máme k dispozici různé softwarové aplikace a zařízení přemýšlející za nás. Mezi ně patří chytré mobilní telefony (smartphony) nebo informační systémy, které nám usnadňují práci. Lidé tak ztrácejí potřebu uvažovat a jejich schopnost řešit problémy klesá. Základním pojmem této činnosti je algoritmus, s jehož definicí se nejčastěji potkáte v podobě: jednoznačný srozumitelný přesně specifikovaný postup (předpis) vedoucí v konečném počtu kroků k řešení určité úlohy (Havelková, 2008), ale později bude vysvětleno, že za tímto pojmem se skrývá mnohem více než jen tato definice. Algoritmy můžeme zapisovat různě. Slovem, matematicky, graficky a nebo programovacím jazykem. Je jasné, že nejvhodnější zápis, kterému počítač rozumí je programovací jazyk, ale i ten se musí přeložit do tzv. strojového kódu, kterému počítač, respektive jeho operační systém, teprve plně porozumí. Jazyk tedy není pouze nástroj pro dorozumívání lidí mezi sebou, ale slouží i ke komunikaci s počítačem, jehož forma stejně jako u lidského jazyka má svá pravidla a ta se musí dodržovat. Drtivá většina programovacích jazyků disponuje pouze angličtinou a ta může být pro české uživatele problémem, přitom čeština je jazyk unikátní, bohatý, různorodý a krásný a z těchto dvou důvodů vznikla myšlenka ulehčit výuku algoritmizace právě návrhem a implementováním nového programovacího jazyka s českou syntaxí a vlastním vývojovým prostředím.
11 1.2 Cíl práce Cíl práce Tato práce si klade za cíl navrhnout a implementovat zcela nový interpretovaný programovací jazyk s jednoduchou českou syntaxí vhodný pro výuku algoritmizace a vytvořit pro něj takové vývojové prostředí, jehož ovládání bude jednoduché i pro úplné začátečníky. Cíle bude dosaženo postupně ve dvou fázích. V první fázi dojde k navržení regulární gramatiky lexikálního analyzátoru a sestavení deterministického konečného automatu společně s návrhem bezkontextové gramatiky syntaktického analyzátoru a sestavením zásobníkového automatu. V druhé fázi bude proveden návrh a implementace vlastního vývojového prostředí včetně zakomponování lexikálního a syntaktického analyzátoru a implementace sémantických akcí.
12 2 TEORETICKÁ VÝCHODISKA PRÁCE 12 2 Teoretická východiska práce 2.1 Algoritmus Historická východiska Historie vzniku tohoto pojmu je celkem spletitá. Jak uvádí Donald E. Knuth (2008), vyvinulo se ze slova algorism, které vzniklo ve středověku a jehož původní význam zněl: provádění aritmetických výpočtů s arabskými číslicemi (Knuth, 2008), ale historikové matematiky však nakonec objevili skutečný původ, který pocházel ze jména perského matematika 9. století Abu Jafar Muhammada ibn Musa al- Chwarizmího, autora slavného arabského matematického textu Kitab al-jabr wa lmuqabala ( Pravidla pro odvozování a srovnávání ). (Knuth, 2008) Od původního slova algorism došlo v průběhu vývoje k několika odklonům a přeměnám, které dospěly až do jeho finální fáze, která se používá do dnes. Největší podíl na tom nese záměna arabského kořene s kořenem řeckého slova arithmos a díky tomu se z algorismu stal algoritmus. ( 2006) Definice pojmu Význam slova algoritmus má hodně synonym. Mezi nejčastěji používané se řadí recept, metoda, technika, procedura nebo postup. Ale jak bylo řečeno již v úvodu, za tímto pojmem se skrývá mnohem více. Algoritmus je konečnou množinou pravidel, která popisují posloupnost operací pro řešení jistého typu problému (Knuth, 2008) a musí splňovat 5 důležitých vlastností: 1. Konečnost. Každý algoritmus musí mít konečný počet kroků a po jejich vykonání musí skončit. Procedura, která splňuje všechny vlastnosti algoritmu, ale není konečná, se nazývá výpočetní metoda. 2. Určitost. Každý krok algoritmu musí být jednoznačně definován a za všech okolností musí být vždy jasné, co a jak se má provést. Prováděné operace musí být popsány s jednoznačností a určitostí. 3. Vstup. Algoritmus může mít jeden a více vstupů, ale také nemusí mít žádný. Jsou to veličiny zadávané do algoritmu před jeho zahájením nebo dynamicky zadávané během průběhu algoritmu. Vstupy jsou přebírány z určité množiny objektů. 4. Výstup. Algoritmus má jeden či více výstupů, což jsou veličiny, které jsou dány vztahem ke vstupům.
13 2.1 Algoritmus Efektivnost. Každý algoritmus by měl být efektivní, což znamená, že všechny jeho operace musí být v rozumné míře jednoduché a jejich řešení by mělo být proveditelné i s pomocí tužky a papíru. (Knuth, 2008) Na základě Dvorského (2007) lze výše uvedené vlastnosti rozšířit o opakovatelnost (stejné vstupy musí poskytovat stejné výsledky) a rezultivnost (algoritmus poskytuje správné výsledky). (Dvorský, 2007) Formalizace pojmu Nyní vyvstává otázka, jak rozlišit, zda-li na řešený problém algoritmus existuje či nikoliv. Dříve, než bude zodpovězena, je třeba objasnit pojem Turingův stroj. Černá, Křetínský a Kučera (2002) popisují Turingův stroj jako stroj sestrojený Alanem Turingem 1 s konečnou množinou stavů Q, páskou rozdělenou na jednotlivá políčka a hlavou pohybující se po pásce doleva a doprava, čímž je umožněno čtení a zápis symbolů. Na každém políčku je zapsán právě jeden páskový nebo pracovní symbol náležící do konečné množiny symbolů. Páska je jednosměrná a nekonečná. Na nultém políčku (vlevo) je zapsán speciální symbol, kterému se říká startovací a označuje levý konec pásky. (Černá, Křetínský, Kučera, 2002) Odpověď na výše uvedenou otázku poskytuje Churchova 2 teze (či též jako Church-Turingova teze): Každý proces, který lze intuitivně nazvat algoritmem, se dá realizovat na Turingově stroji. (Černá, Křetínský, Kučera, 2002) Churchova teze nám tedy dává do souvislosti pojmy algoritmicky řešitelný a řešitelný Turingovým strojem a ztotožňuje je. Obsah Churchovy teze nelze formálně dokázat, protože pojem algoritmicky řešitelný je pouze intuitivní pojem. Černá, Křetínský a Kučera (2002) však také uvádějí, že existují další systémy, které potvrzují platnost teze a jsou, co se výpočetní síly týče, ekvivaletní s Turingovým strojem. Jmenovat lze Postovy systémy, Minského stroje, µ-rekurzivní funkce, λ-kalkul a while programy. Navíc dosud nebyl nalezen algoritmus, který by na Turingově stroji nešel sestavit. Na základě těchto faktů, lze považovat tezy za platnou. (Černá, Křetínský, Kučera, 2002) 1 Alan Turing - matematik, který v roce 1936 definoval jeden z dosud nejsilnějších výpočetních modelů - Turingův stroj (Černá, Křetínský, Kučera, 2002) 2 Alonzo Church - americký matematik a profesor na Princestonské univerzitě, mezi jeho studenty patřil i Alan Turing (World of Mathematics Biography, 2006)
14 2.1 Algoritmus Způsoby zápisu Algoritmus lze zapsat několika způsoby: slovním popisem využití přirozeného jazyka jako prostředek zápisu algoritmu vývojovým diagramem pomocí jednotných značek a zkratek graficky zobrazený algoritmus řešení úlohy strukturogramy opět se jedná o grafické zobrazení splňující podmínky pro strukturované programování, které používá obdobné symboly jako při znázornění vývojovým diagramem datově orientované diagramy HIPO (Hierarchy plus Input-Process- Output) - forma zápisu, kdy je graficky vyjádřeno funkční členění problému, struktury dat a postupu řešení problému při různém stupni podrobnosti rozhodovací tabulky používají se při velmi složitých větveních ( 2006) pseudokódem - kombinace kódu a přirozeného jazyka programovacím jazykem - využití některého z dostupných programovacích jazyků k zápisu algoritmů (Beránek, 2008) Algoritmizace Algoritmizace je postup, který se uplatňuje při tvorbě programu pro počítač a pomocí kterého lze prostřednictvím algoritmu řešit daný problém. (Diviš) Tento postup lze rozdělit do několika etap: 1. Formulace problému - formulace požadavků, určení výchozích hodnot, požadovaných výsledků, jejich formu a přesnost měření 2. Analýza úlohy - ověření, zda je úloha řešitelná a vytvoření první představy o jejím řešení, zjištění zda výchozí hodnoty jsou k řešení postačující, zda má úloha více řešení a výběr nejvhodnějšího řešení 3. Vytvoření algoritmu - sestavení jednoznačného sledu jednotlivých operací pro správné vyřešení úlohy a je třeba mít na paměti, že algoritmus nedává přímo odpověď na řešený problém, ale postup, jak ji získat 4. Sestavení programu - sestavení programu na základě navrženého algoritmu v určitém programovacím jazyce a provedení překladu nebo intepretace programu
15 2.2 Programovací jazyky Odladění programu - odstranění syntaktických (odhalí překladač) a sémantických chyb (musí odhalit člověk na základě získaných chybných výsledků nebo nekorektním chováním programu při určitých činnostech) (Diviš) 2.2 Programovací jazyky Prostředek pro zápis algoritmu Chceme-li docílit nahrazení člověka při realizaci algoritmu počítačem, je potřeba zvolit takovou formu zápisu algoritmu, které počítač plně rozumí. Přirozený jazyk ani vývojové diagramy tuto podmínku nesplňují. Jediný jazyk, kterému počítače rozumí se nazývá strojový kód. Strojový kód je jazyk primitivní a umožňuje zapsat pouze ty nejzákladnější operace, které se nazývají strojové instrukce (např. aritmetické operace, porovnání dvou hodnot, skok aj.), zapsané v binárním tvaru. Značnou nevýhodou tohoto způsobu zápisu algoritmu je pracnost a nepřehlednost, a proto se k praktickému zápisu algoritmů příliš nehodí. Z těchto důvodů vznikají programovací jazyky, které nejsou sice pro počítač přímo srozumitelné, ale pomocí speciálního programu - tzv. překladače - je lze do strojového kódu přeložit. (Častorál, 1991) Dělení programovacích jazyků Programovací jazyky lze dělit dle nejrůznějších kritérií. Jak uvádí Josef Kadlec (2004), za nejobecnější rozdělení se dá považovat rozlišení na nižší a vyšší. Nižší programovací jazyky se vyznačují využíváním přímo příkazů procesoru. K velké výhodě těchto jazyků patří maximálně optimalizovaný program pro zvolenou platformu a vyšší rychlost při provádění programu. Mezi další výhody patří minimální omezení při programování a možnost využívat všechny funkce zařízení. Nevýhoda spočívá v nepřenositelnosti programu na jiný druh procesoru, který tyto instrukce nezná. Další vlastností, na základě které nelze k zápisu algoritmů nižší jazyky doporučit, je jistá nepohodlnost při psaní programu (větší rozsah kódu než u vyšších programovacích jazyků). Skupina nižších jazyků není příliš početná, patří sem zejména jazyk symbolických adres a strojový kód. Vyšší programovací jazyky tvoří mnohem početnější skupinu. Řadí se sem jazyky, které jsou pro člověka čitelnější a mají logicky uspořádaný kód. Pro zápis algoritmů jsou tedy lepším nástrojem. Tato skupina není závislá na strojových principech počítače. Na rozdíl od nižších programovacích jazyků se zde může stát, že některé věci, vyžadující např. přímou adresaci zařízení, zde nepůjdou zhotovit. V těchto případech musíme tuto část kódu nahradit tzv. inline vložením kódu z nižšího progra-
16 2.2 Programovací jazyky 16 movacího jazyku (pokud to překladač dovoluje). Mezi vyšší patří prakticky všechny ostatní jazyky (C, C++, Java, Perl, Php, Python, atd.). (Kadlec, 2004) Dalším kritériem, podle kterého můžeme jazyky rozdělit, je na interpretované a kompilované. Hlavní rozdíl spočívá ve zpracovávání zdrojového kódu. Zatímco jazyky kompilované překládají kód do spustitelné formy, kód psaný v jazyku intepretovaném potřebuje ke svému spuštění tzv. interpret, který zpracovává jednotlivé příkazy a ihned je vykonává. Zdeněk Častorál (1991) i Josef Kadlec (2004) spatřují výhody kompilovaných jazyků zejména v rychlosti provádění programu, která je několikanásobně vyšší než u jazyků interpretovaných. Největší výhodu interpretovaných jazyků vidí Častorál (1991) v pohodlném testování programu, kdy po opravě chyby v kódu lze ihned provést výpočet, zatímco Kadlec (2004) spíše vyzdvihuje fakt, že u většiny interpretovaných jazyků není nutné deklarovat proměnné, velikost paměti, kterou mají proměnné zabírat, apod. Mezi interpretované jazyky patří např. Php, Perl, Python nebo Java. Do skupiny kompilovaných řadíme např. C++, Pascal nebo Visual Basic. (Kadlec, 2004) Další dělení jazyků může probíhat na základě přístupu k řešení problému a to na procedurální a funkcionální. V procedurálních (imperativních) jazycích se využívá postupu, jak se má daná úloha (vy)řešit, tedy využívá se algoritmu. V jazycích funkcionálních se nevyjadřuje, jak daný problém řešit, nýbrž co chceme řešit. (Kadlec, 2004) Jak uvádí Dosedla (2006), celý program je v tomto případě chápán jako funkce, jejímž výsledkem je výraz. Základem je výpočtový model λ-kalkul 3. Příkladem funkcionálních jazyků je např. LISP nebo Haskell. Procedurální jazyky lze rozdělit z hlediska přístupu tvorby programu na strukturované a objektové. Strukturovaný přístup je založen na principu rozdělení algoritmu na podproblémy implementované pomocí strukturovaných datových typů a řídících struktur (posloupnost příkazů, větvení, cykly). Do jazyků se strukturovaným přístupem se řadí např. jazyk C nebo Pascal. Objektově orientované jazyky jsou založeny na objektech a vztazích mezi nimi. Základem je třída, z které vzniká objekt jakožto instance třídy. Mezi objektově orientované jazyky patří např. Java nebo Smalltalk. Některé jazyky umožňují kombinovat jak objektový, tak strukturovaný přístup. Mezi ně se řadí např. jazyk C++. (Dosedla, 2006) 3 λ-kalkul - teorie funkcí založená na velmi jednoduchém jazyce. Základní prvky tohoto jazyka (tzv. lambda výrazy) jsou pouze tři: proměnná, aplikace a abstrakce (Beneš, 2006)
17 2.3 Formální jazyky a gramatiky Formální jazyky a gramatiky Abeceda a jazyk Abecedou se rozumí neprázdná konečná množina prvků, které se nazývají symboly abecedy. Každá konečná posloupnost symbolů abecedy se nazývá řetězec (též slovo nebo věta). Formální definice řetězce podle Češky (2002) nad abecedou Σ zní: 1. Prázdný řetězec ɛ je řetězec nad abecedou Σ. 2. Je-li x řetězec nad Σ a a Σ, pak i xa Σ. 3. y je řetězec nad Σ, tehdy a jen tehdy když lze y získat pomocí aplikace pravidel 1 a 2. Konkatenací (zřetězením) se nazývá taková operace, kdy spojením řetězce x Σ a y Σ vznike řetězec xy. Operace konkatenace je asociativní, tzn. x(yz) = (xy)z, ale není komutativní, protože xy yx. Nechť existuje řetězec x = a 1 a 2... a n nad abecedou Σ, a i Σ pro i = 1,..., n. Zápis symbolů v opačném pořadí vzhledem k řetězci x se nazývá reverzí (zrcadlovým obrazem), kdy x R = a n a n 1... a 2 a 1. Nechť w je řetězec nad abecedou Σ. Podřetězcem w se nazývá takový řetězec z, pro který při existenci řetězců x a y platí, že w = xzy. Prefixem řetězce w nazýváme takový řetězec x 1, pro který při existenci řetězce y 1 platí, že w = x 1 y 1. Pak se tedy analogicky sufixem řetězce w nazývá takový řetězec x 2, pro který při existenci řetězce y 2 platí, že w = y 2 x 2. Délkou řetězce se rozumí nezáporné číslo udávající počet symbolů řetězce. Délka řetězce x se značí x. Máme-li x = a 1 a 2... a n, a i Σ pro i = 1,..., n, pak platí x = n. Pro prázdný řetězec je délka řetězce nulová, tj. ɛ = 0. Jazykem L názýváme takovou množinu L, pro kterou platí: L Σ nebo L Σ +, kde Σ je množina všech řetězců nad abecedou Σ včetně prázdného řetězce a Σ + množina všech řetězců nad abecedou Σ vyjma prázdného řetězce. Z toho tedy plyne, že jazyk je libovolná podmožina řetězců nad danou abecedou. (Češka, 2002) Gramatika Gramatika je nejznámější prostředek pro reprezentaci jazyků. Pokud bychom chtěli použít triviálnější způsob reprezentace, museli bychom vytvořit výčet všech vět ja-
18 2.3 Formální jazyky a gramatiky 18 zyka. Tento způsob je však nepoužitelný pro nekonečné jazyky 4 a prakticky i pro rozsáhlé konečné jazyky 5. Gramatika splňuje základní požadavek kladený na reprezentaci konečných i nekonečných jazyků, který spočívá v konečnosti reprezentace. Používá konečných množin N - nonterminálních a Σ - terminálních symbolů, které jsou vzájemně disjunktní. Nonterminální symboly (nonterminály) slouží jako pomocné symboly označující syntaktické celky, zatímco množina terminálních symbolů (terminálů) je identická s abecedou, nad níž je definován jazyk. Jestliže provedeme sjednocení množin, tj. N Σ, získáváme slovník gramatiky. Základem každé gramatiky je konečná množina přepisovacích pravidel P. Pravidla tvoří uspořádanou dvojici řetězců (α, β), kde β představuje možnou substituci řetězce α, který značí podřetězec generovaného řetězce. Řetězec α obsahuje vždy alespoň jeden nonterminální symbol (kdyby neobsahoval, nebyla by možná substituce) a řetězec β patří do množiny (N Σ). Množinu přepisovacích pravidel P pak lze formálně vyjádřit pomocí kartézského součinu: (N Σ) N(N Σ) (N Σ) Gramatiku G lze tedy na základě předchozích poznatků definovat jako čtveřici G = (N, Σ, P, S), kde N je konečná množina nonterminálních symbolů, Σ je konečná množina terminálních symbolů, platí, že N Σ = 0, P je konečná podmožina kartézského součinu (N Σ) N(N Σ) (N Σ), S N je startovací symbol gramatiky. Uspořádaná dvojice (α, β), která je prvkem množiny P, se nazývá přepisovacím pravidlem a zapisuje se ve tvaru (α β). Řetězec α představuje levou stranu přepisovacího pravidla, řetězec β pak pravou stranu. Nechť existují řetězce λ a µ, kde λ, µ (N Σ). Relace G se nazývá přímou derivac, jestliže lze řetězce λ a µ vyjádřit jako: λ = γαδ µ = γβδ 4 obsahují nekonečný počet slov (Černá, Křetínský, Kučera, 2002) 5 obsahují konečný počet slov(černá, Křetínský, Kučera, 2002)
19 2.3 Formální jazyky a gramatiky 19 kde γ, δ (N Σ) a α β P. Relace + se nazývá derivací, jestliže existuje taková posloupnost přímých derivací υ i 1 υ i, i = 1,..., n a n 1, že platí: λ = υ 0 υ 1... υ n 1 υ n = µ Nechť existuje řetězec ϕ (N Σ). ϕ se nazývá větnou formou, jestliže platí S ϕ (řetězec ϕ se generuje ze startovacího symbolu S). Větou se nazývá taková větná forma, která obsahuje pouze terminální symboly. Jazyk L(G), tedy jazyk produkovaný gramatikou G, je definován množinou všech vět: L(G) = {w S w w Σ } Gramatika tedy znázorňuje generativní systém, kdy pomocí aplikace tzv. přepisovacích pravidel lze z vyznačeného nonterminálu generovat řetězce tvořené pouze terminálními symboly. Tyto řetězce představují věty definované gramatikou jazyka. (Češka, 2002) Chomského klasifikace gramatik Noam Chomský 6 vymezil čtyři typy gramatik, které se liší tvarem přepisovacích pravidel, jež jsou obsaženy v množině přepisovacích pravidel P. Označují se typ 0, typ 1, typ 2 a typ 3. Češka (2002) tato pravidla rozvádí následujícím způsobem: Typ 0 Gramatika tohoto typu obsahuje nejobecnější tvar pravidel, který je shodný s definicí gramatiky popsané v předchozí sekci: α β, α (N Σ) N(N Σ) (N Σ) Z definice je patrné, že zde neexistují žádná omezení, proto se gramatiky typu 0 nazývají take neomezenými. 6 Noam Chomský - americký lingvista, díky němuž vznikla teorie generativní gramatiky, kterou byla ovlivněna (nejen) americká teorie lingvistiky ve 20. století (Szabó, 2004)
20 2.3 Formální jazyky a gramatiky 20 Typ 1 Gramatika typu 1 umožňuje vytvářet pravidla tvaru: αaβ αγβ, A N, α, β (N Σ), γ (N Σ) + nebo S ɛ Tento typ se nazývá gramatika kontextová, protože svým tvarem pravidla udává, že k nahrazení nonterminálu A řetězcem γ může dojít tehdy a jen tehdy, pokud jeho pravým kontextem je řetězec β a levým kontextem řetězec α. Kontextové gramatiky nepřipouštějí nahrazení nonterminálu prázdným řetězcem. Výjimku tvoří startovací pravidlo S, které umožňuje prázdný řetězec do jazyka zařadit. V tomto případě se ale symbol S pak už nesmí vyskytnout na pravé straně přepisovacího pravidla. Typ 2 Gramatika typu 2 umožňuje vytvářet pravidla tvaru: A γ, A N, γ (N Σ) Tento typ gramatiky se nazývá bezkontextová gramatika, poněvadž lze provádět substituci řetězce γ za nonterminál A bez ohledu na kontext, ve kterém je nonterminál A zapsán. Na rozdíl od gramatik typu 1, bezkontextové gramatiky umožňují zápis pravidla ve tvar A ɛ. I zde ale platí, existuje-li S ɛ, pak se S nesmí vyskytovat na pravé straně žádného pravidla. Typ 3 Gramatika typu 3 umožňuje vytvářet pravidla tvaru: A xb nebo A x; A, B N, x Σ Tento typ gramatiky se nazývá pravá lineární gramatika, poněvadž na pravé straně pravidla se může vyskytovat jediný nonterminál a ten musí být umístěn navíc úplně poslední, tedy vpravo na konci řetězce. Speciální případ pravé lineární gramatiky je regulární gramatika (přesněji regulární pravá gramatika), která se zapisuje ve tvaru:
21 2.4 Konečné automaty a jazyky typu 3 Chomského klasifikace 21 A ab nebo A a; A, B N, a Σ nebo S ɛ a z tohoto důvodu jsou gramatiky typu 3 nazývány regulárními gramatikami. Kromě pravých lineárních gramatik existují i levé lineární gramatiky. Jak uvádějí Šorm, Rybička a Haluza (2006), v tomto případě je nonterminál pravé strany umístěn jako první a pravidla se zapisují ve tvaru: A Ba nebo A a; A, B N, a Σ Jazykem typu i, i = 0, 1, 2, 3 nazýváme jazyk generovaný příslušnou gramatikou typu i. Dle tohoto označení pak podobně jako o gramatikách mluvíme o jazycích neomezených (i = 0), kontextových (i = 1), bezkontextových (i = 2) a regulárních (i = 3). 2.4 Konečné automaty a jazyky typu 3 Chomského klasifikace Konečný automat (dále jen KA) patří mezi abstraktní modely s konečným počtem stavů, které lze využít pro modelování systémů. Pracuje v diskrétním čase a aktuální stav se mění na základě vnějšího podnětu, přičemž je pro daný stav a podnět určeno, do kterého stavu systém přejde. KA se obecně dělí na deterministické a nedeterministické. Deterministické se vyznačují jednoznačností, zatímco nedeterministické tuto vlastnost nemají. (Dostál, 2008) Nedeterministický konečný automat Nedeterministický KA (dále jen NKA) je definován jako 5-tice M = (Q, Σ, δ, q 0, F ), kde: Q - konečná množina stavů, Σ - konečná vstupní abeceda, δ - funkce přechodu - zobrazení Q Σ 2 Q (2 Q je množina podmnožin mnnožiny), q 0 Q - počáteční stav, F Q - množina koncových stavů Činnost konečného automatu M lze charakterizovat jako přechod z jednoho stavu do druhého. Tento přechod řídí funkce přechodu δ, která zpracovává symboly
22 2.4 Konečné automaty a jazyky typu 3 Chomského klasifikace 22 čtené ze vstupního řetězce. Na základě aktuálního stavu q i a přečteného symbolu a Σ pak funkce přechodu vyhodnotí, do kterého stavu q j automat přejde. Počet stavů, do kterých lze v té chvíli přejít, může být i více než jeden. Přechodová funkce tedy v případě NKA předepisuje množinu budoucích stavů Q j, kde Q j 2 Q. Přechodová funkce se zapisuje v tabulkové formě, kde řádky reprezentují množinu stavů Q a sloupce symboly abecedy. (Češka, 2002) Konfigurací automatu M se nazývá taková dvojice C = (q, w), pro kterou platí C Q Σ. Je popsána tedy stavem, ve kterém se automat právě nachází a dosud nepřečtenou částí řetězce. (Češka, 2002) Konfigurace ve tvaru (q 0, w) označuje počáteční konfiguraci a (q F, ɛ), q F F označuje konfiguraci koncovou (automat akceptuje řetězec). Přechod je definován jako relace na množině konfigurací a značí se. Celou činnost automatu lze tedy popsat jako posloupnost konfigurací značící přechod z počáteční do koncové neboli (q 0, w) (q F, ɛ). Uskutečnění přechodu z konfigurace (q i, ax) do konfigurace (q j, x) je možné pouze tehdy, je-li δ(q i, a) = {..., q j,...}. (Šorm, Rybička, Haluza, 2006) Deterministický konečný automat Deterministický KA (dále jen DKA) je definován stejně jako NKA, rozdíl však spočívá v definici funkce přechodu δ. V případě DKA se δ definuje jako zobrazení Q Σ Q a předepisuje pouze jediný budoucí stav q j Jazyky akceptované KA, konstrukce NKA Mezi jazyky, které jsou akceptovány KA, patří jazyky typu 3 Chomského klasifikace 7. Nejprve je nutné převést pravou lineární gramatiku na regulární. Tohoto cíle dosáhneme následovně: 1. všechna pravidla ve tvaru A wb převedeme 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. najdeme a případně odstraníme ɛ-pravidla (A ɛ) 3. najdeme a případně odstraníme jednoduchá pravidla typu A B Podobný princip funguje i u levých lineárních gramatik 8. 7 Důkaz tohoto tvrzení lze nalézt v publikaci (Češka, 2002) 8 V této práci není nutné dále rozvádět, protože implementační část výchází z pravých lineárních gramatik. Více informací o převodu levých lineární gramatik se lze dočíst v (Češka, 2002)
23 2.4 Konečné automaty a jazyky typu 3 Chomského klasifikace 23 Takto sestavenou regulární gramatiku lze převést na NKA dle následujících pravidel (Šorm, Rybička, Haluza, 2006): Nechť existuje gramatika G = (N, Σ, P, S). Na základě této gramatiky vytvoříme automat M = (Q, Σ, δ, q S, F ) takový, že platí L G = L M : Q = N {q F } stavy automatu jsou vytvořeny z nonterminálů gramatiky a k nim je přidán stav q F, který představuje koncový stav. Stavy se označují písmenem q s indexem v podobě odpovídajícího nonterminálu gramatiky abeceda automatu je identická s abecedou gramatiky, přechodovu funkci vytváříme 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, za počáteční stav automatu označíme q S, což je stav odpovídající startovacímu nonterminálu gramatiky S, prvek q F musí být vždy obsažen v množině koncových stavů F; existuje-li však pravidlo S ɛ P, počáteční stav automatu považujeme také za koncový a platí F = {q F, q S } Převod NKA na DKA Z popisu konečných automatů plyne, že praktická implementace NKA by byla velice náročná, protože by se muselo procházet všemi směry, jelikož dopředu není jasné, který je správný. Proto je mnohem výhodnější implementovat DKA. U návrhu NKA a DKA to platí zase obráceně. DKA je mnohem náročnější na svůj návrh než NKA. V tomto případě ale existuje velice důležitý poznatek o vztahu mezi NKA a DKA, který zní: Každý NKA lze převést na ekvivaletní DKA 9. Nejprve tedy provedeme návrh NKA, převedeme na DKA a implementujeme. Princip převodu NKA na DKA spočívá v rozšíření původní množiny Q takovým způsobem, že několik původních stavů vytvoří jeden nový. Tento nově vzniklý stav přebírá vazby a vlastnosti stavů, z kterých byl vytvořen. Tento postup se používá na místech, kde výsledek přechodové funkce není jednoznačný stav, nýbrž množina stavů. Jestliže i po vytvoření kompozitního stavu vznikne opět nedeterministická množina, postup znovu opakujeme a spojením vytvoříme stav nový. Postup opaku- 9 Více informací o vztahu DKA a NKA se lze dočíst v (Češka, 2002)
24 2.5 Bezkontextové jazyky a zásobníkový automat 24 jeme do té doby, dokud se v přechodové funkci nalézá na některém místě nedeterministická množina. (Šorm, Rybička, Haluza, 2006) 2.5 Bezkontextové jazyky a zásobníkový automat Bezkontextová gramatika Bezkontextové gramatiky a jazyky mají dva důležité významy. Prvním z nich je fakt, že jsme s nimi schopni popsat většinu rysů současných jak programovacích (Češka, 2002), tak i komunikačních jazyků. (Šorm, Rybička, Haluza, 2006) Druhým důležitým významem je existence algoritmů, které dokáží analyzovat věty bezkontextových jazyků. Tyto algoritmy jsou uplatňovány zejména v základech překladačů, přesněji v syntaktických analyzátorech. Bezkontextová gramatika G je definována jako čtvečice G = (N, Σ, P, S), kde: N je konečná množina nonterminálů, Σ je konečná množina terminálů, P je konečná množina přepisovacích pravidel, které se zapisují ve tvaru A α, A N a α (N Σ), S je výchozí nonterminální symbol Derivační stromy Derivační (syntaktický) strom 10 je důležitým prostředkem pro grafické vyjádření struktury věty (její derivace). Při generování věty hovoříme o tzv. levé derivaci v případech, kdy je systematicky přepisován nejlevější nonterminální symbol nebo pravé derivaci, kdy je naopak přepisován nejpravější nonterminální symbol. O jednoznačném jazyce hovoříme tehdy, jestliže ke každé větě existuje právě jeden derivační strom. Každá věta generovaná gramatikou jednoznačného jazyka má vždy právě jednu (levou) pravou derivaci. Existuje-li k větě derivačních stromů více, jazyk se nazývá víceznačný 11.(Šorm, Rybička, Haluza, 2006) 10 strom - orientovaný acyklický graf, pro který platí, že má jeden uzel, do něhož nevstupuje žádná hrana (tzv. kořen stromu) a do všech ostatních uzlů pak vstupuje hrana pouze jedna; uzly z nichž žádná hrana nevystupuje se nazývají uzly (listy) stromu (Češka, 2002) 11 např. podmíněný příkaz if-then-else umožňuje konstrukci dvou derivačních stromů; více se lze dočíst v (Češka, 2002)
25 2.5 Bezkontextové jazyky a zásobníkový automat 25 Obr. 1: Ukázka derivačního stromu, (Češka, 2002) Rozklad věty Syntaktickou analýzou neboli rozkladem věty se nazývá proces, při kterém se vytváří derivační strom pro danou větu nebo větnou formu. Program, který tuto činnost vykonává se nazývá syntaktický analyzátor (angl. parser). Konstrukce derivačního stromu využívá dvě metody: syntaktickou analýzu shora dolů syntaktickou analýzu zdola nahoru Syntaktická analýza shora dolů začíná vytvářet derivační strom od výchozího symbolu (kořene) a přes postupné přímé derivace se dopracovává k terminálům 12. Metoda zdola nahoru pak začíná vytvářet derivační strom od koncových uzlů a pomocí redukcí se snaží dopracovat ke kořenu (výchozímu symbolu). (Češka, 2002) Syntaktické diagramy Syntaktické diagramy slouží k grafickému vyjádření bezkontextové gramatiky. Při kreslení diagramů používáme dva hlavní symboly: obdélník - představuje odkaz na jiný graf, tj. nonterminál a ovál - představuje terminál. K vyjádření posloupnosti symbolů ve větné formě se využívají graficky orientované linky, tzv. spojnice. Rozeznáváme čtyři druhy elementů, které můžeme při tvorbě syntaktických diagramů použít a to zřetězení symbolů, varianta, iterace a seznam s oddělovači. 12 tato metoda je použita při implementaci ve vlastní práci
26 2.5 Bezkontextové jazyky a zásobníkový automat 26 Vztahy mezi prvky a pravidly bezkontextové gramatiky jsou následující: zřetězení symbolů - A α 1 α 2, varianta - A α 1 α 2, iterace - A α 1 Ā, Ā, α 1 Ā ɛ; v tomto případě pravidla gramatiky musí vyjadřovat skutečnost, že α 1 se musí vyskytovat alespoň jedenkrát, a musí odrážet iteraci, tedy být rekurzivní, seznam s oddělovači - A α 1 Ā, Ā aα 1 Ā ɛ; iterace prvků s oddělovači v podobě terminálního symbolu a; odpovídající pravidla gramatiky jsou odvozena od tvaru v předchozím případě. Využití těchto diagramů je čistě praktické, zpřehledňuje gramatiky a popisuje programovací jazyk, a proto tento způsob bývá pro člověka mnohem více čitelnější.(šorm, Rybička, Haluza, 2006) Zásobníkový automat Zásobníkový automat je jednocestné nedeterministrické abstraktní zařízení (viz Obr. 2), které představuje model syntaktického analyzátoru bezkontextových jazyků. Je vybaven zásobníkem reprezentujícím nekonečnou paměť. Vstupní páska je rozdělena na elementární symboly. Vstupní pásku lze číst, nikoliv na ni zapisovat. V určitém časovém okamžiku může hlava setrvat nad aktuálním záznamem a nebo se posunout doprava (proto jednocestný). Řídící jednotka tak realizuje operace prováděné čtecí hlavou a ukládá informace do zásobníku prostřednictvím funkce přechodů, množinou stavů řídící jednotky a vrcholem zásobníku. (Češka, 2002) Obr. 2: Schéma zásobníkového automatu (Češka, 2002)
27 2.6 Deterministické bezkontextové jazyky 27 Zásobníkový automat P je definován jako sedmice P = (Q, Σ, Γ, δ, q 0, z 0, F ) kde Q je konečná množina symbolů reprezentující vnitřní stavy automatu, Σ je konečná množina terminálů, Γ je konečná množina tzv. zásobníkových symbolů, δ je přechodová funkce, definovaná jako zobrazení δ : Q (Σ {ɛ}) Γ 2 Q Γ q 0 Q je výchozí vnitřní stav, z 0 F startovací symbol, který je na počátku vložen do zásobníku F Q je množina koncových stavů. Zásobníkové automaty, podobně jako konečné automaty, pracují na principu přecházení mezi jednotlivými konfiguracemi. Konfiguraci tvoří trojice (q, w, α) Q Σ Γ, kde q je aktuální stav řídící jednotky, w je část vstupní věty, která nebyla dosud přečtena a α představuje obsah zásobníku. Počáteční konfiguraci nazveme takovou konfiguraci zásobníkového automatu, která má tvar (q 0, w, Z 0 ). Koncovou konfiguraci zásobníkového automatu zapisujeme ve tvaru (q, ɛ, α), kde q F a, a Γ. (Šorm, Rybička, Haluza, 2006) 2.6 Deterministické bezkontextové jazyky Deterministické bezkontextové jazyky patří do skupiny bezkontextových jazyků, respektive jsou jejich podmnožinou. Jejich název koresponduje se zařízením, které tyto jazyky reprezentuje - deterministický zásobníkový automat 13. Deterministické gramatiky lze rozdělit do těchto skupin: 1. precedenční gramatiky 2. LL gramatiky LR gramatiky Tyto jazyky mají tři nejvýznačnější vlastnosti, které je třeba vyzdvihnout (Češka, 2002): 1. efektivnost rozkladu - deterministický syntaktický analyzátor pracuje s lineárním paměťovým prostorem a časem 13 Deterministický zásobníkový automat je určitý druh zásobníkového automatu. Zobrazení δ obsahuje pro každou konfiguraci pouze jeden prvek, tedy δ : Q (Σ {ɛ}) Γ Q Γ (Šorm, Rybička, Haluza, 2006) 14 tato třída je použita při implementaci ve vlastní práci
28 2.6 Deterministické bezkontextové jazyky automatizovatelnost výstavby analyzátoru syntaxe - realizaci lze řešit algoritmicky 3. snadnost nálezu syntaktických chyb a propojení se sémantickým zpracováním - deterministické syntaktické analyzátory pracují bez návratů (není potřeba zkoušet všechna pravidla než najdeme to správné) LL gramatiky LL gramatika patří mezi gramatiky generované deterministickými jazyky. Generuje třídu deterministických jazyků, tzv. LL jazyků, které rovněž tvoří podmmnožinu deterministických jazyků. Název LL vychází ze dvou způsobů analýzy, které využívá: Left to right parse (rozklad zleva doprava) a Left Parse (levý rozklad). Při deterministické analýze je důležité vybrat správnou variantu pravé strany z množiny přepisovacích pravidel, které mají na levé straně stejný nonterminál. Při realizaci levého rozkladu věty a existenci pravidel tvaru A α 1 α 2... α n máme při výskytu nejlevějšího neterminálu A ve větné formě právě n možností na jeho přepis. Šorm, Rybička a Haluza (2006) popisují základní princip analýzy LL jazyka následovně: Vzhledem k tomu, že vytváříme levou derivaci věty, má každá větná forma (s výjimkou výsledné věty) tvar ξ r = a 1 a 2... a j Aβ, kde prefix a 1 a 2... a j je identický s prefixem analyzované věty. Při přechodu k další formě ξ r+1 expanzí neterminálu A pak tedy může být tento prefix obohacen o další terminální symboly, které opět musí souhlasit s analyzovanou větou. Ze všech A-pravidel je tedy potřeba vybrat tu variantu, jejíž prefix odpovídá požadovanému řetězci symbolů ve větě. Na základě toho, kolik následujících symbolů vstupní věty je potřeba znát, abychom se dokázali správně rozhodnout, hovoříme o LL(k) gramatikách, kde k je počet následujících symbolů potřebný pro výběr správné varianty. Pokud k výběru správné varianty postačuje znát jediný následující terminální symbol, hovoříme o tzv. LL(1) gramatikách 15. (Šorm, Rybička, Haluza, 2006) Výpočet množin FIRST a FOLLOW Při rozhodování o variantě na pravé straně A pravidel se setkáme s problémem, kdy potřebujeme zjistit, kterým terminálem jednotlivé varianty začínají. K tomuto účelu použijeme výpočet množiny FIRST(α) dané gramatiky G = (N, Σ, P, S) podle následujícího algoritmu (Šorm, Rybička, Haluza, 2006): 15 použity při řešení vlastní práce
29 2.6 Deterministické bezkontextové jazyky Předpokládejme, ž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 aβ, pak k množině FIRST(α) přidáme terminální symbol a. 4. Je-li X 1 N a X 1 ɛ, pak k množině FIRST(α) přidáme symboly množiny FIRST(γ), kde γ = X 2... X m. Množinu FIRST je potřeba vypočítat pro všechny varianty pravých stran A-pravidla. Na místech, kde α i = ɛ, potřebujeme navíc vypočítat množinu FOLLOW(A): 1. Množina vzniklá FOLLOW(S) obsahuje ɛ. 2. Je-li A αbβ P a β ɛ, pak FOLLOW(B) obsahuje všechny prvky FIRST(β). 3. Je-li A abβ P a β ɛ, pak všechny prvky FOLLOW(A) jsou v množině FOLLOW(B) Syntaktická analýza LL(1) gramatiky Zásobníkový automat řízený rozkladovou tabulkou provádí rozklad věty v zásobníku na základě symbolů čtených ze vstupní pásky. Rozkladová tabulka reprezentuje zobrazení M : (Γ {Z 0 }) (Σ {ɛ}) R, kde R nabývá pro každou dvojici (X, Y ) následující hodnoty (Šorm, Rybička, Haluza, 2006): 1. řetězec β Γ, je-li X N a zároveň A B P a zároveň Y FF(β), 2. prvek pop, je-li X = Y pro X, Y Σ, 3. prvek accept, je-li X = Z 0 a zároveň Y = ɛ, 4. prvek error v ostatních případech. Na počátku se v zásobníku nachází startovací symbol gramatiky a speciální symbol Z 0. Na vstupní pásce najdeme analyzovanou větu. Na konci zpracování, tedy v místě, kdy se automat nachází v koncové konfiguraci, se předpokládá, že v zásobníku je umístěn jediný symbol Z 0 a na vstupní pásce pak prázdný řetězec. Činnost automatu probíhá způsobem, který lze algoritmicky popsat. Podíváme se, jaký symbol se nachází na vrcholu zásobníku. Je-li to nonterminální symbol, vybere se z rozkladové tabulky podle aktuálního symbolu na vstupní pásce příslušný řetězec β, kterým se nahradí nonterminál v zásobníku. Je-li na vrcholu terminální
30 2.7 Sémantika 30 symbol a na vstupu je tentýž terminál, provede se operace pop, což znamená odstranění symbolu z vrcholu zásobníku a přečtení (odstranění) téhož symbolu ze vstupní pásky. Je-li vrcholem zásobníku Z 0 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, což znamená chybu a neakceptaci věty. (Šorm, Rybička, Haluza, 2006) 2.7 Sémantika Abychom jazyk plně definovali, nelze skončit pouze u syntaktické analýzy. Ta pouze definuje jeho strukturu. Je nutné také specifikovat význam jednotlivých konstrukcí. Je tedy třeba, abychom statickým zápisům dali určitou formu dynamiky a význam. Ke analýze významu jednotlivých konstrukcí slouží tzv. sémantická analýza. Ta kontroluje, zda-li jsou deklarovány všechny proměnné, volané funkce existují a jsou definovány, atd. Po sémantické analýze pak přichází na řadu sémantická akce, která provede v příslušném místě danou operaci (např. přiřazení hodnoty do proměnné, výpis na obrazovku, atd.). S popisem sémantiky k danému programovacímu jazyku se lze setkat nejčastěji v manuálech a referenčních příručkách. (Elbl, 2003)
31 3 SOUČASNÝ STAV ŘEŠENÉ PROBLEMATIKY 31 3 Současný stav řešené problematiky V současnosti je na trhu dostupných několik produktů, které se prezentují jako software pro výuku algoritmizace nebo programování. Tato kapitola se věnuje nejznámějším aplikacím a programovacím jazykům, popisuje jejich vlastnosti, hodnotí cenovou dostupnost, metodickou vhodnost a praktickou využitelnost. Jednotlivé produkty jsou seřazené chronologicky od doby jejich vzniku. 3.1 Pascal Pascal je název programovacího jazyka, jehož návrh pochází ze 70. let 20. století od Niklause Wirtha, profesora na Vysoké škole technické v Curychu. Tento jazyk byl původně navržen pro studenty za účelem výuky, později se však dočkal širšího pojetí. Od svého vzniku prošel několika proměnami a inovacemi. O nejvýznačnější se postarala firma Borland ( a její produkt s názvem Turbo Pascal. Pascal patří mezi jazyky procedurální a obsahuje všechny základní algoritmické prvky (cykly, podmínky, std. vstup a výstup, atd.), proto je velmi vhodný pro výuku algoritmizace. Syntaxe disponuje klíčovými slovy v anglickém jazyce a i vývojová prostředí jsou pouze v angličtině. Mezi nejznámější patří již jmenovaný Turbo Pascal od firmy Borland (placený, již se nevyvíjí) a open-source kompilátor s vývojovým prostředím Free Pascal ( V praxi se spíše využívá jeho nádstavby s názvem Delphi (původně od firmy Borland, nyní vývoj převzala společnost Embarcadero), která disponuje jazykem Object Pascal. V tomto prostředí je vyvíjen např. nejznámější český editor PSPad ( Obr. 3: Prostředí Free Pascal - OS Linux (zdroj:
32 3.2 Robot Karel Robot Karel Karel je programovací jazyk distribuovaný společně se svým vývojovým prostředím. S původní myšlenkou přišel na přelomu 70. a 80. let 20. století Richard E. Pattis. Patří mezi jazyky interpretované, zdarma dostupné a je určen pro výuku programování naprostých začátečníků. Princip práce spočívá v ovládání robota, který se pohybuje po čtvercové síti. Pomocí příkazů lze s robotem pohybovat, pokládat cihly a zase je zvedat. V původní verzi obsahuje klíčová slova v anglickém jazyce, existuje včak i verze počeštěná ( Překlad není příliš zdařilý, respektive se hodí použít spíše anglickou verzi, protože v češtině některé formulace zní poněkud krkolomně a nelogicky. Disponuje pouze elementárními povely (Krok, Polož, Zvedni, Vlevobok), podmínkami (JeCihla, JeZeď, JeSever, Jinak), cykly (Dokud, Dokud ne) a umožňuje tvorbu velice jednoduchých procedur. Tento jazyk není příliš rozsáhlý, nabízí pouze malé množství příkazů a navíc se svým pojetím od ostatních jazyků až příliš liší, proto je prakticky nevyužitelný. Je tak vhodný spíše pro rozvoj logického myšlení. Obr. 4: Robot Karel - online verze (zdroj: Baltazar, Baltík, Baltie Baltazar je vývojové prostředí (i jeho hlavní postava) s vlastním programovacím jazykem na bázi jazyka C vyvinuté českou firmou SGP Systems ( v roce 1993 (poslední verze 5.0 je dostupná z roku 1998). Firma tento produkt prezentuje jako systém určený pro výuku strukturovaného programování v jazyce C, který je vhodný nejen pro dospělé, ale díky své koncepci strukturogramů, maker a česky pojmenovaných příkazů a funkcí i pro mládež a děti od 12 let.
33 3.4 Petr 33 Jedná se o nástroj, který obsahuje textový editor pro psaní kódů a strukturogramů, grafický editor, vlastní interpreter jazyka C (verze Profi pak i překladač) a systém nápovědy. Patří mezi produkty placené a cena se odvíjí od počtu zakoupených licencí. Baltazar je ve skutečnosti název pro 2D knihovnu implementovanou v jazyce C rozšiřující tento jazyk o nové prvky. Základní syntaxe je tedy s jazykem C totožná, funkce z knihovny jsou však již dostupné v češtině. Bohužel disponuje na dnešní dobu velmi zastaralým grafickým prostředí (na bázi DOSu). SGP systems na Baltazara navázali novým pojetím aplikace s názvem Baltík (později přejmenovaná na Baltie), který již opouští od klasického zápisu algoritmů v programovacím jazyce a přidává prvky vizuálního programování. Díky systému Drag&Drop je pomocí ikon sestavována scéna a celý program. Tento produkt se až příliš odklání od klasického způsobu zápisu algoritmů a je vhodný spíše pro děti a mládež, kteří se s počítačem teprve seznamují. Obr. 5: Baltík 4 (zdroj: Petr Petr se prezentuje jako vizuální programovací nástroj určený k snadné a rychlé tvorbě programů. Jeho autorem je společnost Gemtree Software, s.r.o ( první verze pochází z roku 1999 a vyvíjí se prakticky dodnes (i když vývoj již není tak intenzívní). Hlavní postavou je králík Petr, kterého lze ovládat pomocí vestavěných funkcí programu. Podobně jako Baltík, i Petr je založen na vizuálním stylu programování. Lze v něm vytvářet programy bez jakékoliv znalosti problematiky programovacích jazyků. Slouží tedy spíše k rozvoji logického myšlení (podobně jako Robot Karel) a představivosti, proto je vhodný pro děti a mládež. Obsahuje také podrobnou ná-
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é
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
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
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
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
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é
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ý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í
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,
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.........................
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ě
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ě
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
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
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
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á
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
Návrh algoritmů pro sémantické akce při výstavbě interpretu metodou rekurzivního sestupu
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.
Algoritmizace. Obrázek 1: Přeložení programu překladačem
Algoritmizace V každém okamžiku ví procesor počítače přesně, co má vykonat. Pojmem procesor se v souvislosti s algoritmy označuje objekt (např. stroj i člověk), který vykonává činnost popisovanou algoritmem.
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,
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
Algoritmizace- úvod. Ing. Tomáš Otáhal
Algoritmizace- úvod Ing. Tomáš táhal Historie 9. století perský matematik a astronom Mohammed Al-Chorezím v latinském přepise příjmení= algoritmus Nejstarší algoritmus Euklides řecký matematik, 4. století
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
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
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ý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ý
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é
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Ý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
Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace
Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace Číslo projektu Číslo materiálu Autor Průřezové téma Předmět CZ.1.07/1.5.00/34.0565 VY_32_INOVACE_284_Programovací_jazyky
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é
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
IB111 Programování a algoritmizace. Programovací jazyky
IB111 Programování a algoritmizace Programovací jazyky Programovací jazyky Programovací jazyk Prostředek pro zápis algoritmů, jež mohou být provedeny na počítači Program Zápis algoritmu v programovacím
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
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
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
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.
IB111 Úvod do programování skrze Python Přednáška 13
IB111 Úvod do programování skrze Python Přednáška 13 Programovací jazyky Nikola Beneš 14. prosinec 2016 IB111 přednáška 13: programovací jazyky 14. prosinec 2016 1 / 21 Osnova dnešní přednášky Programovací
Čí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
Algoritmus. Cílem kapitoly je seznámit žáky se základy algoritmu, s jeho tvorbou a způsoby zápisu.
Algoritmus Cílem kapitoly je seznámit žáky se základy algoritmu, s jeho tvorbou a způsoby zápisu. Klíčové pojmy: Algoritmus, vlastnosti algoritmu, tvorba algoritmu, vývojový diagram, strukturogram Algoritmus
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Ý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
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í
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
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
Operátory pro maticové operace (operace s celými maticemi) * násobení maticové Pro čísla platí: 2*2
* násobení maticové Pro čísla platí: Pro matice - násobení inverzní maticí inv inverzní matice A -1 k dané matici A je taková matice, která po vynásobení s původní maticí dá jednotkovou matici. Inverzní
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
Ú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,
UČEBNÍ TEXTY VYSOKÝCH ŠKOL. Prof. RNDr. Milan Češka, CSc. Gramatiky a jazyky
UČEBNÍ TEXTY VYSOKÝCH ŠKOL Vysoké učení technické v Brně Fakulta elektrotechniky a informatiky Prof. RNDr. Milan Češka, CSc. Gramatiky a jazyky Tato skripta jsou určena pro kurs Základy matematické informatiky
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:
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
Postův korespondenční problém. Meze rozhodnutelnosti 2 p.1/13
Postův korespondenční problém Meze rozhodnutelnosti 2 p.1/13 Postův korespondenční problém Definice 10.1 Postův systém nad abecedou Σ je dán neprázdným seznamem S dvojic neprázdných řetězců nadσ, S = (α
Pojem algoritmus. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava
Pojem algoritmus doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Pojem algoritmus 54 / 344
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í,
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
Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44
Algoritmizace a programování Ak. rok 2012/2013 vbp 1. ze 44 Vladimír Beneš Petrovický K101 katedra matematiky, statistiky a informačních technologií vedoucí katedry E-mail: vbenes@bivs.cz Telefon: 251
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
Ú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
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
Vysoké učení technické v Brně Fakulta informačních technologií. Gramatiky nad volnými grupami Petr Blatný
Vysoké učení technické v Brně Fakulta informačních technologií Gramatiky nad volnými grupami 2005 Petr Blatný Abstrakt Tento dokument zavádí pojmy bezkontextové gramatiky nad volnou grupou a E0L 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
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
Profilová část maturitní zkoušky 2017/2018
Střední průmyslová škola, Přerov, Havlíčkova 2 751 52 Přerov Profilová část maturitní zkoušky 2017/2018 TEMATICKÉ OKRUHY A HODNOTÍCÍ KRITÉRIA Studijní obor: 78-42-M/01 Technické lyceum Předmět: TECHNIKA
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)
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 =
Teoretická informatika TIN 2013/2014
Teoretická informatika TIN 2013/2014 prof. RNDr. Milan Češka, CSc. ceska@fit.vutbr.cz doc.ing. Tomáš Vojnar, Ph.D. vojnar@fit.vutbr.cz sazba Ing. A. Smrčka, Ing. P. Erlebach, Ing. P. Novosad Vysoké učení
Třídy složitosti P a NP, NP-úplnost
Třídy složitosti P a NP, NP-úplnost Cíle přednášky: 1. Definovat, za jakých okolností můžeme problém považovat za efektivně algoritmicky řešitelný. 2. Charakterizovat určitou skupinu úloh, pro které není
Matematika v programovacích
Matematika v programovacích jazycích Pavla Kabelíková am.vsb.cz/kabelikova pavla.kabelikova@vsb.cz Úvodní diskuze Otázky: Jaké programovací jazyky znáte? S jakými programovacími jazyky jste již pracovali?
1 Základních pojmy z oblasti programování, vyšší programovací jazyky, programovací paradigmata
1 Základních pojmy z oblasti programování, vyšší programovací jazyky, programovací paradigmata Studijní cíl Tento první blok celého kurzu zaměřen na zvládnutí základních pojmů z oblasti programování a
ANOTACE vytvořených/inovovaných materiálů
ANOTACE vytvořených/inovovaných materiálů Číslo projektu Číslo a název šablony klíčové aktivity Tematická oblast Formát Druh učebního materiálu Druh interaktivity CZ.1.07/1.5.00/34.0722 III/2 Inovace a
Profilová část maturitní zkoušky 2013/2014
Střední průmyslová škola, Přerov, Havlíčkova 2 751 52 Přerov Profilová část maturitní zkoušky 2013/2014 TEMATICKÉ OKRUHY A HODNOTÍCÍ KRITÉRIA Studijní obor: 78-42-M/01 Technické lyceum Předmět: TECHNIKA
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
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
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
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
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
Teoretická informatika
Teoretická informatika TIN 2017/2018 prof. RNDr. Milan Češka, CSc. ceska@fit.vutbr.cz prof. Ing. Tomáš Vojnar, Ph.D. vojnar@fit.vutbr.cz sazba dr. A. Smrčka, Ing. P. Erlebach, Ing. P. Novosad Vysoké učení
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...
DTP Základy programování Úvod do předmětu
DTP Základy programování 01 - Úvod do předmětu Úvod Co již umíte? Plán předmětu Studijní materiály Způsob ukončení předmětu Základní pojmy I. Řešený problém: Řešeným nebo zpracovávaným problémem je konkrétní
Algoritmizace a programování
Algoritmizace a programování Výrazy Operátory Výrazy Verze pro akademický rok 2012/2013 1 Operace, operátory Unární jeden operand, operátor se zapisuje ve většině případů před operand, v některých případech
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ý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
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,
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
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
= 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,
Moderní technologie ve studiu aplikované fyziky CZ.1.07/2.2.00/ Množiny, funkce
Moderní technologie ve studiu aplikované fyziky CZ.1.07/2.2.00/07.0018 2. Množiny, funkce MNOŽIN, ZÁKLDNÍ POJMY Pojem množiny patří v matematice ke stěžejním. Nelze jej zavést ve formě definice pomocí
0.1 Úvod do lineární algebry
Matematika KMI/PMATE 1 01 Úvod do lineární algebry 011 Lineární rovnice o 2 neznámých Definice 011 Lineární rovnice o dvou neznámých x, y je rovnice, která může být vyjádřena ve tvaru ax + by = c, kde
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
Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic
Přednáška třetí (a pravděpodobně i čtvrtá) aneb Úvod do lineární algebry Matice a soustavy rovnic Lineární rovnice o 2 neznámých Lineární rovnice o 2 neznámých Lineární rovnice o dvou neznámých x, y je
ALGORITMIZACE Příklady ze života, větvení, cykly
ALGORITMIZACE Příklady ze života, větvení, cykly Cíl kapitoly: Uvedení do problematiky algoritmizace Klíčové pojmy: Algoritmus, Vlastnosti správného algoritmu, Možnosti zápisu algoritmu, Vývojový diagram,
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ů.
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
2. Množiny, funkce. Poznámka: Prvky množiny mohou být opět množiny. Takovou množinu, pak nazýváme systém množin, značí se
MNOŽIN, ZÁKLDNÍ POJMY Pojem množiny patří v matematice ke stěžejním. Nelze jej zavést ve formě definice pomocí primitivních pojmů; považuje se totiž rovněž za pojem primitivní. Představa o pojmu množina
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
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é
Algoritmizace a programování
Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu
Teoretická informatika TIN
Teoretická informatika TIN Studijní opora M. Češka, T. Vojnar, A. Smrčka 20. srpna 2014 Tento učební text vznikl za podpory projektu "Zvýšení konkurenceschopnosti IT odborníků absolventů pro Evropský trh
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
Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:
Čtvrtek 8 prosince Pascal - opakování základů Struktura programu: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury