Konečný automat. Jan Kybic.
|
|
- Richard Procházka
- před 6 lety
- Počet zobrazení:
Transkript
1 Konečný automat Jan Kybic / 33
2 Konečný automat finite state machine Konečný automat = výpočetní model, primitivní počítač Řídící jednotka s konečným počtem stavů Vstupní posloupnost textový řetězec, fyzické vstupy Výstupní posloupnost, fyzické výstupy 2 / 33
3 Konečný automat finite state machine Konečný automat = výpočetní model, primitivní počítač Řídící jednotka s konečným počtem stavů Vstupní posloupnost textový řetězec, fyzické vstupy Výstupní posloupnost, fyzické výstupy Definice: konečná množina stavů Q počáteční stav q 0 Q konečná množina vstupních symbolů A přechodová funkce f : Q A Q q t+1 = f (q t, a t ) t je čas nebo index do vstupní posloupnosti (někdy) množina koncových stavů F Q (někdy) množina akcí G a výstupní funkce g : Y G nebo g : Y A G 2 / 33
4 Příklad: řízení výtahu Stavový diagram jede nahoru motor nahoru tlačítko nahoru kontakt 1.patro přízemí 1. patro kontakt přízemí tlačítko dolu jede dolů motor dolů 3 / 33
5 Příklad: řízení výtahu Přechodová a výstupní tabulka vstupy stavy výstupy Tl.d. Tl.n. Příz. 1.p. q t q t+1? 0?? přízemí přízemí 0 0? 1?? přízemí jede nahoru 1 0??? 0 jede nahoru jede nahoru 1 0??? 1 jede nahoru 1. patro 0 0 0??? 1. patro 1. patro 0 0 1??? 1. patro jede dolů 0 1?? 0? jede dolů jede dolů 0 1?? 1? jede dolů přízemí / 33
6 Automat přijímající jazyk Jazyk = (i nekonečná) množina řetězců Rozhodovací konečný automat Vstupem je řetězec. Dává odpověď ano/ne, zda vstup patří do jazyka. V každém kroku čte automat jeden znak z řetězce. Vstupní abeceda A jsou všechny přípustné znaky. Automat přijímá řetězec na konci řetězce je automat v přijímajícím (koncovém) stavu. 5 / 33
7 Příklad: jméno proměnné Totální automat Automat přijímá platná jména proměnných v Pythonu. start písmeno,_ ano písmeno, číslice, _ jinak jinak ne cokoliv 6 / 33
8 Příklad: jméno proměnné Totální automat Automat přijímá platná jména proměnných v Pythonu. start písmeno,_ ano písmeno, číslice, _ jinak jinak ne cokoliv Automat je totální přechodová funkce f je definována pro všechna Q A. 6 / 33
9 Příklad: jméno proměnné (2) Částečný automat start písmeno,_ ano písmeno, číslice, _ Částečný automat nedefinovaný přechod znamená nepřijetí. 7 / 33
10 Jméno proměnné implementace def is_variable_name(s): """ je s platné jméno proměnné v Pythonu? """ state="start" for c in s: if state=="start": if c=="_" or is_letter(c): state="ano" return False # stav "ano" if not (c=="_" or is_letter(c) or c.isdigit()): return False return state=="ano" def is_letter(c): return c.isupper() or c.islower() Soubor automaton_examples.py. 8 / 33
11 Jméno proměnné příklady print(is_variable_name("moje_promenna12")) True print(is_variable_name("moje{}_promenna")) False print(is_variable_name("12moje{}_promenna")) False 9 / 33
12 Transformace textu Transformační konečný automat Vstupem je řetězec. Výstupem je řetězec. V každém kroku čte automat jeden znak z řetězce. Vstupní abeceda A jsou všechny přípustné znaky. Součásti každého přechodu (nebo stavu) může být výstup jednoho či více znaků. 10 / 33
13 Příklad: přeskakování komentářů Úkol: Vstupem je textový soubor Komentář je vše od znaku # (včetně) do konce řádky Vypište obsah souboru bez komentářů. Soubor preskoc_komentare.py 11 / 33
14 Přeskakování komentářů znak c # vypiš c start 0 1 # konec řádky jinak 12 / 33
15 # Tento program voláme s argumentem jméno souboru # Vypíše obsah souboru bez Pythonovských komentářů import sys def preskoc_komentare(f): # vytiskne obsah souboru f s vynechanymi komentari stav=0 # počáteční stav automatu while True: c=f.read(1) # přečti jeden znak if c=="": # konec souboru return if stav==0: # počáteční stav if c=="#": # začátek komentáře stav=1 print(c,end="") # vytiskni znak # stav 1="komentar" if c=="\n": # konec řádky stav=0 # konec komentáře print(c,end="") # vše ostatní ignorujeme pass if name ==" main ": with open(sys.argv[1], rt ) as f: # otevři textový soubor preskoc_komentare(f) # pokud se povedlo, přeskakuj 13 / 33
16 Terminal> python3 preskoc_komentare.py preskoc_komentare.py import sys def preskoc_komentare(f): stav=0 while True: c=f.read(1) if c=="": return if stav==0: if c==" stav=1 print(c,end="") if c=="\n": stav=0 print(c,end="") pass if name ==" main ": with open(sys.argv[1],'rt') as f: preskoc_komentare(f) 14 / 33
17 Přeskakování komentářů (2) Verze, kterou nezmate # v řetězci. znak c # vypiš c start 0 1 # " vypiš " 2 konec řádky " vypiš " c " vypiš c jinak 15 / 33
18 # Verze kterou nezmate # mezi " " import sys def preskoc_komentare(f): # vytiskne obsah souboru f s vynechanymi komentari stav=0 # počáteční stav automatu while True: c=f.read(1) # přečti jeden znak if c=="": # konec souboru return if stav==0: # počáteční stav if c=="#": # začátek komentáře stav=1 if c== " : stav=2 # začátek řetězce print(c,end="") # vytiskni znak elif stav==1: # 1="komentar" if c=="\n": # konec řádky stav=0 # konec komentáře print(c,end="") # vše ostatní ignorujeme pass # stav = řetězec if c== " : stav=0 print(c,end="") # vytiskni znak 16 / 33
19 Terminal> python3 preskoc_komentare2.py preskoc_komentare.py import sys def preskoc_komentare(f): stav=0 while True: c=f.read(1) if c=="": return if stav==0: if c=="#": stav=1 print(c,end="") if c=="\n": stav=0 print(c,end="") pass if name ==" main ": with open(sys.argv[1],'rt') as f: preskoc_komentare(f) 17 / 33
20 Terminal> python3 preskoc_komentare2.py preskoc_komentare.py import sys def preskoc_komentare(f): stav=0 while True: c=f.read(1) if c=="": return if stav==0: if c=="#": stav=1 print(c,end="") if c=="\n": stav=0 print(c,end="") pass if name ==" main ": with open(sys.argv[1],'rt') as f: preskoc_komentare(f) Cvičení: doplňte řetězce oddělené. 17 / 33
21 Lexikální analýza (parsing) Vstupem je řetězec (posloupnost znaků) Výstupem je posloupnost symbolů (tokens) číslo, operátor, identifikátor, klíčové slovo,... Symboly mohou mít atributy řetězec, hodnota,... Reprezentujeme jako dvojice typ symbolu + atribut Další operace Vynechání komentářů Odstranění mezer Chybová hlášení 18 / 33
22 Příklad: Lexikální analýza textu Rozdělte řetězec na posloupnost symbolů: Interpunkce., ; :?! ( ) (jeden znak) Slovo řetězec znaků, neobsahující interpunkci, mezery ani konce řádků. Konce řádků, mezery a tabulátory (whitespace) ignorujte. Soubor analyza_textu.py 19 / 33
23 Analýza textu mezera interpunkce vypiš znak slova akumuluj 0 1 mezera vypiš slovo znak slova akumuluj interpunkce vypiš slovo vypiš interpunkci Počáteční stav q 0 = / 33
24 def analyzuj(f): interpunkce=""".,;:?!" ()""" mezery=" \t\n" stav=0 # počáteční stav - mimo slovo while True: c=f.read(1) # přečti jeden znak if c=="": # konec souboru return if stav==0: if c in interpunkce: print("interpunkce: ",c) elif c not in mezery: # je to znak slova slovo=c # akumulátor slova stav=1 # stav==1 - uvnitř slova if c not in interpunkce and c not in mezery: slovo+=c # pořád uvnitř slova # slovo končí print("slovo: ",slovo) stav=0 if c in interpunkce: print("interpunkce: ",c) if name ==" main ": analyzuj(sys.stdin) 21 / 33
25 Terminal> python3 analyza_textu.py Kam jdeš? Stůj! Slovo: Kam Slovo: jdeš Interpunkce:? Slovo: Stůj Interpunkce:! 22 / 33
26 Nedeterministický automat (Non deterministic finite automaton NFA) Přechodová funkce vrací množinu stavů, f : Q A 2 Q, automat si jeden nedeterministicky vybere. Slovo je přijímáno automatem, pokud existuje posloupnost výběrů vedoucí do koncového stavu. Implementace: Při simulaci si udržujeme množinu možných stavů. Automaticky převedeme na deterministický automat s 2 n stavy. Často lze nalézt ekvivalentní deterministický automat s méně stavy. 23 / 33
27 Nedeterministický automat (Non deterministic finite automaton NFA) Přechodová funkce vrací množinu stavů, f : Q A 2 Q, automat si jeden nedeterministicky vybere. Slovo je přijímáno automatem, pokud existuje posloupnost výběrů vedoucí do koncového stavu. Implementace: Při simulaci si udržujeme množinu možných stavů. Automaticky převedeme na deterministický automat s 2 n stavy. Často lze nalézt ekvivalentní deterministický automat s méně stavy. Automat přijímající slova končící na ce Automat přijímající klíčová slova Pythonu. Automat přijímající celá nebo reálná čísla. 23 / 33
28 Regulární výrazy v Pythonu Jazyk přijímaný konečným automatem = regulární jazyk. Regulární jazyk lze popsat regulárním výrazem. Pro regulární výrazy existují knihovny a nástroje. 24 / 33
29 Regulární výrazy v Pythonu Jazyk přijímaný konečným automatem = regulární jazyk. Regulární jazyk lze popsat regulárním výrazem. Pro regulární výrazy existují knihovny a nástroje. Syntaxe. jakýkoliv znak [M] jakýkoliv znak z množiny M, lze [a-z] [^M] jakýkoliv znak mimo M * libovolný počet opakování předchozího + jedno a více opakování předchozího? žádné nebo jedno opakování předchozího () skupina alternativy \ následující znak ztrácí speciální význam (Další viz. dokumentace) 24 / 33
30 Příklad jméno proměnné import re p=re.compile(r [a-za-z_][a-za-z0-9_]* ) print(p.fullmatch("moje_promenna12")) <_sre.sre_match object; span=(0, 15), match='moje_promenna12'> print(p.fullmatch("moje{}_promenna")) None print(p.fullmatch("12moje{}_promenna")) None print(p.match("moje{}_promenna")) <_sre.sre_match object; span=(0, 4), match='moje'> r znamená raw řetězec, bez interpretace \n, \t, / 33
31 Příklad jméno proměnné (2) reimplementace is_variable_name variable_name_regexp=re.compile(r [a-za-z_][a-za-z0-9_]* ) def is_variable_name(s): return variable_name_regexp.fullmatch(s) is not None print(is_variable_name("moje_promenna12")) True print(is_variable_name("moje{}_promenna")) False print(is_variable_name("12moje{}_promenna")) False 26 / 33
32 Příklad reálné číslo p=re.compile(r [+-]?[0-9]+(\.[0-9]*)?([eE][+-]?[0-9]+)? ) print(p.fullmatch("-314")) <_sre.sre_match object; span=(0, 4), match='-314'> print(p.fullmatch("3.14")) <_sre.sre_match object; span=(0, 4), match='3.14'> print(p.fullmatch("2341e-23")) <_sre.sre_match object; span=(0, 8), match='2341e-23'> print(p.fullmatch("-2341e+23")) <_sre.sre_match object; span=(0, 9), match='-2341e+23'> print(p.fullmatch("-2341.e")) None print(p.fullmatch("278h")) None 27 / 33
33 Přeskakování komentářů a regulární výrazy import sys import re line_pattern=re.compile(r"([^#]*)(#.+)?\n") def preskoc_komentare(f): # vytiskne obsah souboru f s vynechanymi komentari for line in f.readlines(): # čte řádku po řádce print(line_pattern.fullmatch(line).group(1)) if name ==" main ": with open(sys.argv[1], rt ) as f: # otevři textový soubor preskoc_komentare(f) # pokud se povedlo, preskakuj Soubor preskoc_komentare3.py 28 / 33
34 Terminal> python3 preskoc_komentare3.py preskoc_komentare.py import sys def preskoc_komentare(f): stav=0 while True: c=f.read(1) if c=="": return if stav==0: if c==" stav=1 print(c,end="") if c=="\n": stav=0 print(c,end="") pass if name ==" main ": with open(sys.argv[1],'rt') as f: preskoc_komentare(f) 29 / 33
35 Přeskakování komentářů a regulární výrazy Verze, kterou nezmate # v řetězci. # Řešení pomocí regulárních výrazů, které nezmate # mezi " " import sys import re line_pattern=re.compile(r (([^#"]*("[^"]*")?)*)(#.+)?\n ) def preskoc_komentare(f): # vytiskne obsah souboru f s vynechanymi komentari for line in f.readlines(): # čte řádku po řádce print(line_pattern.fullmatch(line).group(1)) if name ==" main ": with open(sys.argv[1], rt ) as f: # otevři textový soubor preskoc_komentare(f) # pokud se povedlo, preskakuj 30 / 33
36 Terminal> python3 preskoc_komentare4.py preskoc_komentare.py import sys def preskoc_komentare(f): stav=0 while True: c=f.read(1) if c=="": return if stav==0: if c=="#": stav=1 print(c,end="") if c=="\n": stav=0 print(c,end="") pass if name ==" main ": with open(sys.argv[1],'rt') as f: preskoc_komentare(f) 31 / 33
37 Terminal> python3 preskoc_komentare4.py preskoc_komentare.py import sys def preskoc_komentare(f): stav=0 while True: c=f.read(1) if c=="": return if stav==0: if c=="#": stav=1 print(c,end="") if c=="\n": stav=0 print(c,end="") pass if name ==" main ": with open(sys.argv[1],'rt') as f: preskoc_komentare(f) Cvičení: doplňte řetězce oddělené. 31 / 33
38 Co konečný automat nedovede ani regulární výraz Nemají neomezenou paměť: Příklady neregulárních jazyků: Řetězec 0 n 1 n. Správně uzávorkované výrazy s neomezenou hloubkou uzávorkování. 32 / 33
39 Co konečný automat nedovede ani regulární výraz Nemají neomezenou paměť: Příklady neregulárních jazyků: Řetězec 0 n 1 n. Správně uzávorkované výrazy s neomezenou hloubkou uzávorkování. Chomského hierachie jazyky regulární bezkontextové kontextové neomezené. 32 / 33
40 Konečné automaty a regulární výraze Konečné automaty Jednoduchý výpočetní model Rychlý, dobře teoreticky prozkoumaný. Omezující. Složitější implementace, existují nástroje pro její generování. Vhodné pro řízení jednoduchých systémů. Vhodné pro první krok analýzy textu i kódu v programovacích jazycích. Nedeterministické konečné automaty. Regulární výrazy Teoreticky ekvivalentní konečným automatům. Snadné a rychlé použití, řada vyzkoušených a optimalizovaných knihoven. Některé složitější konstrukce jsou značně nepřehledné. Omezené množství výstupních akcí. Nelze použít pro řízení systému. 33 / 33
SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů
SPJA, cvičení 1 ipython, python, skripty základy syntaxe: základní datové typy, řetězce podmínky: if-elif-else, vyhodnocení logických výrazů cykly: for, while kolekce: seznam, n-tice, slovník funkce, list
PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA
PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA 2011 Jan Janoušek BI-PJP Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti LEXIKÁLNÍ ANALÝZA Kód ve vstupním jazyku Lexikální analyzátor
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
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
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
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
IB111 Úvod do programování skrze Python Přednáška 7
IB111 Úvod do programování skrze Python Přednáška 7 Správa paměti (proměnné podrobněji) Práce se soubory Nikola Beneš 2. listopad 2016 IB111 přednáška 7: správa paměti, práce se soubory 2. listopad 2016
Úvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
Lexikální analýza. Rozhraní lexikálního analyzátoru. Miroslav Beneš Dušan Kolář. M. Beneš, D. Kolář: Lexikální analýza 1. Lexikální analýza 2
Lexikální analýza Miroslav Beneš Dušan Kolář Rozhraní lexikálního analyzátoru Lexikální analýza 2 M. Beneš, D. Kolář: Lexikální analýza 1 Úkoly Čtení zdrojového textu Sestavování symbolů Odstranění mezer
Lexikální analýza. Miroslav Beneš Dušan Kolář
Lexikální analýza Miroslav Beneš Dušan Kolář Rozhraní lexikálního analyzátoru Lexikální analýza 2 Úkoly Čtení zdrojového textu Sestavování symbolů Odstranění mezer a poznámek Normalizace symbolů (velká/malá
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
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ě
PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I
PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I 2011 Jan Janoušek BI-PJP Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Programová realizace DKA typedef enum {q0, q1,... qn,
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ý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ý
Funkce, podmíněný příkaz if-else, příkaz cyklu for
Funkce, podmíněný příkaz if-else, příkaz cyklu for Definice funkce Funkce je pojmenovaná část programu, kterou lze dále zavolat v jiné části programu. V Pythonu je definována klíčovým slovem def. Za tímto
VISUAL BASIC. Práce se soubory
VISUAL BASIC Práce se soubory Práce se soubory 1/2 2 Vstupní data pro programy bývají uloženy do souborů Vstupy pro výpočet, nastavení vzhledu aplikace Výsledky práce programu je potřeba uchovat uložit
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á
Konstruktory překladačů
Konstruktory překladačů Miroslav Beneš Dušan Kolář Konstruktor Lex generátor lexikálních analyzátorů M. E. Lesk, 1975 - pro OS Unix flex - Vern Paxson, 1990 - GNU verze určeno pro generování výstupu v
EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI
EVROPSKÝ SOCIÁLNÍ FOND Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI Úvod do PHP PHP Personal Home Page Hypertext Preprocessor jazyk na tvorbu dokumentů přípona: *.php skript je součást HTML stránky!
Poslední aktualizace: 14. října 2011
Lexikální analýza Překladače, přednáška č. 2 Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz http://fpf.slu.cz/ vav10ui Poslední aktualizace: 14. října 2011 Symboly Co je to
Úvod do programování. Lekce 1
Úvod do programování Lekce 1 Základní pojmy vytvoření spustitelného kódu editor - psaní zdrojových souborů preprocesor - zpracování zdrojových souborů (vypuštění komentářů atd.) kompilátor (compiler) -
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é
NPRG030 Programování I, 2010/11
Podmínka = něco, co JE, nebo NENÍ splněno typ Boolean hodnoty: TRUE pravda FALSE lež domluva (optimistická): FALSE < TRUE když X, Y jsou (číselné) výrazy, potom X = Y X Y X < Y X > Y X = Y jsou
Standardní algoritmy vyhledávací.
Standardní algoritmy vyhledávací. Vyhledávací algoritmy v C++ nám umožňují vyhledávat prvky v datových kontejnerech podle různých kritérií. Také se podíváme na vyhledávání metodou půlením intervalu (binární
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
NPRG030 Programování I, 2016/17 1 / :58:13
NPRG030 Programování I, 2016/17 1 / 31 10. 10. 2016 10:58:13 Podmínka = něco, co JE, nebo NENÍ splněno typ Boolean hodnoty: TRUE pravda FALSE lež domluva (optimistická): FALSE < TRUE NPRG030 Programování
1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:
1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.
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)
Programování v jazyce JavaScript
Programování v jazyce JavaScript Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Syntaxe 1. část BI-JSC Evropský sociální fond
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
24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1
24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE
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
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
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
Textové soubory. alg9 1
Textové soubory Textový soubor je posloupnost znaků členěná na řádky každý znak je reprezentován jedním bytem, jehož obsah je dán nějakým kódováním znaků členění na řádky je závislé na platformě a obvykle
Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.
Přednáška 7 Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu. 1 Příkaz expr výraz Celočíselná aritmetika I Zašle na standardní výstup vyhodnocení výrazu
Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false
Logické operace Datový typ bool může nabýt hodnot: o true o false Relační operátory pravda, 1, nepravda, 0, hodnoty všech primitivních datových typů (int, double ) jsou uspořádané lze je porovnávat binární
1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:
1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.
WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z 15.10.2007
WSH Windows Script Hosting OSY 2 Přednáška číslo 2 opravená verze z 15.10.2007 Co je skript? Skriptování nástroj pro správu systému a automatizaci úloh Umožňuje psát skripty jednoduché interpretované programové
Třídění a vyhledávání Searching and sorting
Třídění a vyhledávání Searching and sorting Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 1 / 33 Vyhledávání Třídění Třídící algoritmy 2 / 33 Vyhledávání Searching Mějme posloupnost (pole)
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
Regulární výrazy. Vzory
Regulární výrazy Regulární výrazy jsou určeny pro práci s textovými řetězci, jsou součástí J2SDK až od verze 1.4, v předchozích verzích je potřeba použít některou z externích knihoven, např. knihovnu ORO
8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek
8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek 1/41 Základní příkazy Všechny příkazy se píšou malými písmeny! Za většinou příkazů musí být středník (;)! 2/41 Základní příkazy
3. Třídy P a NP. Model výpočtu: Turingův stroj Rozhodovací problémy: třídy P a NP Optimalizační problémy: třídy PO a NPO MI-PAA
Jan Schmidt 2011 Katedra číslicového návrhu Fakulta informačních technologií České vysoké učení technické v Praze Zimní semestr 2011/12 MI-PAA EVROPSKÝ SOCIÁLNÍ FOND PRAHA & EU: INVESTUJENE DO VAŠÍ BUDOUCNOSTI
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
Úvod do programování - Java. Cvičení č.4
Úvod do programování - Java Cvičení č.4 1 Sekvence (posloupnost) Sekvence je tvořena posloupností jednoho nebo více příkazů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení
VY_32_INOVACE_08_2_04_PR
Ing. Petr Stránský VY_32_INOVACE_08_2_04_PR Příkazy vstupu - definice Výstupním zařízením může být obrazovka, tiskárna nebo soubor. Jednotlivé údaje se zapisují pomocí příkazu WRITE nebo WRITELN. Příkaz
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,
Problém, jehož různé instance je třeba často řešit Tyto instance lze vyjádřit větami v jednoduchém jazyce
Interpreter Interpreter Motivace Problém, jehož různé instance je třeba často řešit Tyto instance lze vyjádřit větami v jednoduchém jazyce Příklad: zda daný textový řetězec odpovídá nějakému vzoru (match)
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
A7B38UOS Úvod do operačních systémů. 6. Cvičení. Příkazy sed a awk
A7B38UOS Úvod do operačních systémů 6. Cvičení Příkazy sed a awk sed sed [přepínače] 'příkaz' [soubory] sed [přepínače] -f skript [soubory] Stream editor - edituje neinteraktivně jeden nebo více souborů.
Uplatnění metod na zvolený jazyk
Uplatnění metod na zvolený jazyk Při výběru mezi metodami výše popsanými se řídíme především podle typu symbolů, které jazyk obsahuje. Výhodná bývá často kombinace těchto metod nejdřív použijeme metodu
- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku
Znaky - standardní typ char var Z, W: char; - znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku - v TP (často i jinde) se používá kódová
Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)
Programovací jazyk - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi) Odlišnosti implementace od normy - odchylky např.: nepovinná hlavička programu odlišná
Regulární výrazy. Filtry grep, sed a awk.
Přednáška 5 Regulární výrazy. Filtry grep, sed a awk. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2011 Příprava studijního programu Informatika je podporována projektem
ŘÍDÍCÍ STRUKTURY - PODMÍNKY
ŘÍDÍCÍ STRUKTURY - PODMÍNKY Pokusíme se rozvětvit sktipt v Bashi ŘÍDÍCÍ STRUKTURY - PODMÍNKY V této lekci budeme probírat podmínkové, tj., které nám pomohou rozvětvit skript a provádět určité pouze při
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:
Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7
Pascal Katedra aplikované kybernetiky Ing. Miroslav Vavroušek Verze 7 Proměnné Proměnná uchovává nějakou informaci potřebnou pro práci programu. Má ve svém oboru platnosti unikátní jméno. (Připadne, musí
Zápis programu v jazyce C#
Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač
Prioritní fronta, halda
Prioritní fronta, halda Priority queue, heap Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2018 1 / 26 Prioritní fronta Halda Heap sort 2 / 26 Prioritní fronta (priority queue) Podporuje
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é
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
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ě
Poslední nenulová číslice faktoriálu
Poslední nenulová číslice faktoriálu Kateřina Bambušková BAM015, I206 Abstrakt V tomto článku je popsán a vyřešen problém s určením poslední nenulové číslice faktoriálu přirozeného čísla N. Celý princip
Konstruktory a destruktory
Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,
Programování v Pythonu
ƒeské vysoké u ení technické v Praze FIT Programování v Pythonu Ji í Znamená ek P íprava studijního programu Informatika je podporována projektem nancovaným z Evropského sociálního fondu a rozpo tu hlavního
Programování. Bc. Veronika Tomsová
Programování Bc. Veronika Tomsová Regulární výrazy Regulární výrazy slouží k porovnání a zpracovaní textu PHP podporuje syntaxi POSIX-Extended Regulární výrazy jsou velice vhodné například k ověření emailové
Paměť počítače. alg2 1
Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových
Přednáška 4. Regulární výrazy. Filtry grep, sed a awk. Úvod do Operačních Systémů Přednáška 4
1 Přednáška 4 Regulární výrazy. Filtry grep, sed a awk. 2 grep grep [přepínače] vzor [soubory] Implicitně vypíše na standardní výstup řádky, které obsahují zadaný vzor. Vzor může být definován základním
Programování v Pythonu
ƒeské vysoké u ení technické v Praze FIT Programování v Pythonu Ji í Znamená ek P íprava studijního programu Informatika je podporována projektem nancovaným z Evropského sociálního fondu a rozpo tu hlavního
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
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
2. lekce Algoritmus, cyklus Miroslav Jílek
2. lekce Algoritmus, cyklus Miroslav Jílek 1/36 Algoritmus 2/36 Algoritmus je konečná posloupnost operací, která dává řešení skupiny problémů 3/36 Algoritmus je konečná posloupnost operací, která dává
Knihovna XmlLib TXV 003 63.01 druhé vydání říjen 2012 změny vyhrazeny
Knihovna XmlLib TXV 003 63.01 druhé vydání říjen 2012 změny vyhrazeny 1 TXV 003 63.01 Historie změn Datum Vydání Popis změn Prosinec 2010 1 První vydání, popis odpovídá XmlLib_v13 Říjen 2012 2 Druhé vydá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í
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í,
Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19
Algoritmy I Cvičení č. 2, 3 1 ALG I, informace Cvičící RNDr. Eliška Ochodková, Ph.D., kancelář EA439 eliska.ochodkova@vsb.cz www.cs.vsb.cz/ochodkova Přednášející doc. Mgr. Jiří Dvorský, Ph.D., kancelář
DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v
DSL manuál Ing. Jan Hranáč 27. října 2010 V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v současné době krátký) seznam vestavěných funkcí systému. 1 Vytvoření nového dobrodružství Nejprve
PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.
PHP - úvod Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky. Klíčové pojmy: PHP, webový prohlížeč, HTTP, FTP Základní pojmy služba WWW = 1990 první prototyp serveru, od roku 1994
Sada 1 - PHP. 03. Proměnné, konstanty
S třední škola stavební Jihlava Sada 1 - PHP 03. Proměnné, konstanty Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284 Šablona: III/2 - inovace a
Úvod do UNIXu. Okruh č. 4 - vi, regulární výrazy, grep a sed. Jakub Galgonek. verze r2. inspirováno materiály Davida Hokszy
Okruh č.4 Okruh č. 4 - vi, regulární výrazy, grep a sed verze 1.0.0-r2 inspirováno materiály Davida Hokszy Textové editory Okruh č.4 vi(m) prastarý textový editor (1976) dostupný v podstatě na každém UNIXovém
Definice 9.4. Nedeterministický algoritmus se v některých krocích může libovolně rozhodnout pro některé z několika možných různých pokračování.
9.5 Třída NP Definice 9.4. Nedeterministický algoritmus se v některých krocích může libovolně rozhodnout pro některé z několika možných různých pokračování. Příklad. Uvažujme problém IND a následující
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
Č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
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
Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.
TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců. Zadání: V textovém souboru text.txt je uloženo několik řádků textu. Vytvořte makro, které určí nejdelší řádek z daného souboru. 1. Název
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
Tvorba výrazu: speciální znaky shellu se uvádějí do apostrofů jednotlivé části výrazu se oddělují mezerou
Příkaz expr Tvorba výrazu: speciální znaky shellu se uvádějí do apostrofů jednotlivé části výrazu se oddělují mezerou výraz1 výraz2 vrátí první výraz, pokud není nulový a není prázdným řetězcem, jinak
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
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
Basic256 - úvod do programování Příklady. ing. petr polách
Basic256 - úvod do programování Příklady ing. petr polách 1 Basic 256 input, print Př.: Vytvořte program pro součet dvou čísel: input "Zadej a: ", a input "Zadej b: ", b print a+b input "Zadej a: ", a
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
Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016
Preprocesor Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016 Programování v C++, A7B36PJC 4/2016, Lekce 9b https://cw.fel.cvut.cz/wiki/courses/a7b36pjc/start
Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace
Programování: základní konstrukce, příklady, aplikace IB111 Programování a algoritmizace 2011 Připomenutí z minule, ze cvičení proměnné, výrazy, operace řízení výpočtu: if, for, while funkce příklady:
Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty
Data v počítači Informační data (elementární datové typy) Logické hodnoty Znaky Čísla v pevné řádové čárce (celá čísla) v pohyblivé (plovoucí) řád. čárce (reálná čísla) Povelová data (instrukce programu)
Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií
1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední
X36UNX 16. Numerické výpočty v sh příkazy expr, bc, dc. Zdeněk Sojka
X36UNX 16 Numerické výpočty v sh příkazy expr, bc, dc Zdeněk Sojka sojkaz1@fel.cvut.cz dc desk calculator - zadávání příkazů postfixově - data se ukládají do stacku - příkazy obyčejně pracují s jedním
Chyby a výjimky. Chyba. Odkud se chyby berou? Kdo chyby opravuje? Co můžete dělat jako programátor? Dvě hlavní metody práce s chybami.
Chyby a výjimky Petr Pošík Katedra kybernetiky, FEL ČVUT v Praze OI, B4B33RPH Řešení problémů a hry, 2016 Chyba Stav programu (podmínky), který mu brání v dosažení požadovaného výsledku. Odkud se chyby