Formální jazyky Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 1/ 32
Abeceda a slovo Definice Abeceda je libovolná neprázdná konečná množina symbolů(znaků). Poznámka: Abeceda se často označuje řeckým písmenem Σ(velké sigma). Definice Slovo v dané abecedě je libovolná konečná posloupnost symbolů z této abecedy. Příklad 1: Σ = {A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z} Slova v abecedě Σ: AHOJ ABRACADABRA ERROR Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 2/ 32
Abeceda a slovo Příklad 2: Σ 2 = {A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z, } Slovovabecedě Σ 2 : HELLO WORLD Příklad 3: Σ 3 = {0,1,2,3,4,5,6,7,8,9} Slovavabecedě Σ 3 : 0,31415926536,65536 Příklad 4: Slovavabecedě Σ 4 = {0,1}:011010001,111,1010101010101010 Příklad 5: Slovavabecedě Σ 5 = {a,b}: aababb, abbabbba, aaab Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 3/ 32
Abeceda a slovo Příklad 6: Abeceda Σ 6 jemnožinavšechasciiznaků. Příklad slova: class HelloWorld { public static void main(string[] args) { System.out.println("Hello, world!"); } } class HelloWorld { public static void main(str Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 4/ 32
Teorie formálních jazyků motivace Jazyk množina(některých) slov tvořených symboly z dané abecedy Příklady typů problémů, při jejichž řešení se využívá poznatků z teorie formálních jazyků: Tvorba překladačů: lexikální analýza syntaktická analýza Vyhledávání v textu: hledání zadaného vzorku hledání textu zadaného regulárním výrazem Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 5/ 32
Práce s formálními jazyky Když chceme nějaký jazyk popsat, máme několik možností: Můžeme vyjmenovat všechna jeho slova(což je ale použitelné jen pro malé konečné jazyky). Příklad: L = {aab, babba, aaaaaa} Můžeme specifikovat nějakou vlastnost, kterou mají právě ta slova, která do tohoto jazyka patří: Příklad: Jazyk nad abecedou {0, 1}, obsahující všechna slova, ve kterých je počet výskytů symbolu 1 sudý. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 6/ 32
Práce s formálními jazyky V teorii formálních jazyků se používají především následující dva přístupy: Popsat(idealizovaný) stroj, zařízení, algoritmus, který rozpozná slova patřící do daného jazyka vede k použití tzv. automatů. Popsat nějaký mechanismus umožňující generovat všechna možná slovapatřícídodanéhojazyka vedektzv.gramatikáma regulárním výrazům. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 7/ 32
Některé základní pojmy Délkaslovajepočetznakůveslově. Například délka slova abaab je 5. Délkuslova woznačujeme w. Pokudtedynapř. w = abaab,pak w =5. Početvýskytůznaku aveslově woznačujeme w a. Proslovo w = ababbtedyplatí w a =2a w b =3. Prázdné slovo je slovo délky 0, tj. neobsahující žádné znaky. Prázdné slovo se označuje řeckým písmenem ε(epsilon). (Pozn.: V literatuře se pro označení prázdného slova někdy používá místo symbolu ε řecké písmeno λ(lambda).) ε =0 Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 8/ 32
Zřetězení slov Se slovy je možné provádět operaci zřetězení: Například zřetězením slov OST a RAVA vznikne slovo OSTRAVA. Operace zřetězení se označuje symbolem (podobně jako násobení). Tento symbol je možné vypouštět. OST RAVA =OSTRAVA Zřetězeníjeasociativní,tj.prolibovolnátřislova u, va wplatí (u v) w = u (v w) což znamená, že při zápisu více zřetězení můžeme vypouštět závorky a psátnapříklad w 1 w 2 w 3 w 4 w 5 místo (w 1 (w 2 w 3 )) (w 4 w 5 ). Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 9/ 32
Zřetězení slov Zřetězení není komutativní, tj. obecně pro dvojici slov u a v neplatí rovnost u v = v u Příklad: OST RAVA RAVA OST Zjevněprolibovolnáslova va wplatí: v w = v + w Pro libovolné slovo w také platí: ε w = w ε = w Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 10/ 32
Prefixy, sufixy a podslova Definice Slovo xjeprefixemslova y,jestližeexistujeslovo vtakové,že y = xv. Slovo xjesufixemslova y,jestližeexistujeslovo utakové,že y = ux. Slovo xjepodslovemslova y,jestližeexistujíslova ua vtaková,že y = uxv. Příklad: Prefixyslovaabaabjsou ε,a,ab,aba,abaa,abaab. Sufixyslovaabaabjsou ε,b,ab,aab,baab,abaab. Podslovaslovaabaabjsou ε,a,b,ab,ba,aa,aba,baa,aab,abaa, baab, abaab. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 11/ 32
Jazyk Množinuvšechslovtvořenýchsymbolyzabecedy Σoznačujeme Σ. Definice (Formální) jazyk L v abecedě Σ je nějaká libovolná podmnožina množiny Σ,tj. L Σ. Příklad1:Množina {00,01001,1101}jejazykvabecedě {0,1}. Příklad 2: Množina všech syntakticky správných programů v jazyce C je jazyk v abecedě tvořené množinou všech ASCII znaků. Příklad 3: Množina všech textů obsahujících sekvenci znaků ahoj je jazyk v abecedě tvořené množinou všech ASCII znaků. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 12/ 32
Množinové operace na jazycích Vzhledem k tomu, že jazyky jsou množiny, můžeme s nimi provádět množinové operace: Sjednocení L 1 L 2 jejazyktvořenýslovy,kterápatříbuďdojazyka L 1 nebodojazyka L 2 (nebodoobou). Průnik L 1 L 2 jejazyktvořenýslovy,kterápatřísoučasnědojazyka L 1 idojazyka L 2. Doplněk L 1 jejazyktvořenýtěmislovyze Σ,kteránepatřído L 1. Rozdíl L 1 L 2 jejazyktvořenýslovy,kterápatřído L 1,alenepatří do L 2. Poznámka: Při operacích nad jazyky předpokládáme, že jazyky, se kterými operaci provádíme, používají tutéž abecedu Σ. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 13/ 32
Množinové operace na jazycích Formálně: Sjednocení: L 1 L 2 = {w Σ w L 1 w L 2 } Průnik: L 1 L 2 = {w Σ w L 1 w L 2 } Doplněk: L 1 = {w Σ w L 1 } Rozdíl: L 1 L 2 = {w Σ w L 1 w L 2 } Poznámka:Předpokládáme,že L 1,L 2 Σ pronějakoudanouabecedu Σ. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 14/ 32
Množinové operace na jazycích Příklad: Uvažujme jazyky nad abecedou {a, b}. Pak L 1 množinavšechslovobsahujícíchpodslovobaa L 2 množinavšechslovsesudýmpočtemvýskytůsymbolub L 1 L 2 množinavšechslovobsahujícíchpodslovobaanebosudý počet symbolů b L 1 L 2 množinavšechslovobsahujícíchpodslovobaaasudý počet symbolů b L 1 množinavšechslov,kteráneobsahujípodslovobaa L 1 L 2 množinavšechslov,vekterýchsevyskytujepodslovobaa, alekdepočetsymbolůbnenísudý Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 15/ 32
Zřetězení jazyků Definice Zřetězeníjazyků L 1 a L 2,kde L 1,L 2 Σ,jejazyk L Σ takový,žepro každé w Σ platí w L ( u L 1 )( v L 2 )(w = u v) Zřetězeníjazyků L 1 a L 2 označujeme L 1 L 2. Příklad: L 1 = {abb,ba} L 2 = {a,ab,bbb} Jazyk L 1 L 2 obsahujeslova: abba abbab abbbbb baa baab babbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 16/ 32
Iterace jazyka Definice Iteracejazyka L,označovanázápisem L,jejazyktvořenýslovyvzniklými zřetězením libovolného počtu slov z jazyka L. Tj. w L právětehdy,když n N : w 1,w 2,...,w n L : w = w 1 w 2 w n Příklad: L = {aa,b} L = {ε,aa,b,aaaa,aab,baa,bb,aaaaaa,aaaab,aabaa,aabb,...} Poznámka: Počet slov, která zřetězujeme, může být i 0, což znamená, že vždyplatí ε L (bezohledunato,zda ε Lnebone). Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 17/ 32
Iterace jazyka alternativní definice Nejprvedefinujemeprojazyk Lačíslo k Njazyk L k : L 0 = {ε}, L k = L k 1 L pro k 1 To znamená L 0 = {ε} L 1 = L L 2 = L L L 3 = L L L L 4 = L L L L L 5 = L L L L L... Příklad:Pro L = {aa,b}jazyk L 3 obsahujenásledujícíslova: aaaaaa aaaab aabaa aabb baaaa baab bbaa bbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 18/ 32
Iterace jazyka alternativní definice Alternativní definice Iterace jazyka L je jazyk L = k 0 L k Poznámka: L k = L 0 L 1 L 2 L 3 k 0 Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 19/ 32
Iterace jazyka Poznámka:Používásetakézápis L + jakozkratkaza L L,tj. L + = k 1 L k Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 20/ 32
Zrcadlový obraz Zrcadlovýobrazslova wjeslovo wzapsané pozpátku. Zrcadlovýobrazslova wznačíme w R. Příklad: w =AHOJ w R =JOHA Formálněmůžemedefinovat,žepro w = a 1 a 2 a n (kde a i Σ)je w R = a n a n 1 a 1. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 21/ 32
Zrcadlový obraz Zrcadlový obraz jazyka L je jazyk tvořený zrcadlovými obrazy všech slov zjazyka L. Zrcadlovýobrazjazyka Lznačíme L R. L R = {w R w L} Příklad: L = {ab, baaba, aaab} L R = {ba, abaab, baaa} Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 22/ 32
Uspořádání na slovech Předpokládejme určité(lineární) uspořádání < symbolů abecedy Σ, tj.pokud Σ = {a 1,a 2,...,a n },takplatí a 1 < a 2 <... < a n. Příklad: Σ = {a,b,c},přičemž a < b < c. Namnožině Σ můžemedefinovatnásledující(lineární)uspořádání < L : x < L yprávětehdy,když: x < y,nebo x = y aexistujíslova u,v,w Σ asymboly a,b Σtakové,že platí x = uav y = ubw a < b Neformálněmůžemeříctvuspořádání < L řadímeslovapodledélkya v rámci stejné délky lexikograficky(podle abecedy). Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 23/ 32
Uspořádání na slovech Všechnaslovanadabecedou Σmůžemepomocíuspořádání < L seřaditdo posloupnosti w 0,w 1,w 2,... vekterésekaždéslovo w Σ vyskytujeprávějednouakdeprolibovolná i,j Nplatí,že w i < L w j právětehdy,když i < j. Příklad:Proabecedu Σ = {a,b,c}(kde a < b < c)budezačátek posloupnosti vypadat následovně: ε,a,b,c,aa,ab,ac,ba,bb,bc,ca,cb,cc,aaa,aab,aac,aba,abb,abc,... Pokudbudememluvitnapříkladoprvníchdesetislovechjazyka L Σ, mámetímnamyslidesetslov,kterápatřídojazyka Lajsoumezivšemi slovyzjazyka Lnejmenšívzhledemkuspořádání < L. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 24/ 32
Regulární výrazy Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 25/ 32
Regulární výrazy Regulární výrazy popisující jazyky nad abecedou Σ:, ε, a(kde a Σ)jsouregulárnívýrazy:... označujeprázdnýjazyk ε... označujejazyk {ε} a... označujejazyk {a} Jestliže α, βjsouregulárnívýrazy,paki(α+β), (α β), (α )jsou regulární výrazy: (α+β)... označujesjednoceníjazykůoznačených αaβ (α β)... označujezřetězeníjazykůoznačených αaβ (α )... označujeiteracijazykaoznačeného α Neexistují žádné další regulární výrazy než ty definované podle předchozích dvou bodů. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 26/ 32
Regulární výrazy Příklad: abeceda Σ = {0,1} Podledefinicejsou0i1regulárnívýrazy. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 27/ 32
Regulární výrazy Příklad: abeceda Σ = {0,1} Podledefinicejsou0i1regulárnívýrazy. Protože0i1jsouregulárnívýrazy,jei(0+1)regulárnívýraz. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 27/ 32
Regulární výrazy Příklad: abeceda Σ = {0,1} Podledefinicejsou0i1regulárnívýrazy. Protože0i1jsouregulárnívýrazy,jei(0+1)regulárnívýraz. Protože0jeregulárnívýraz,jei(0 )regulárnívýraz. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 27/ 32
Regulární výrazy Příklad: abeceda Σ = {0,1} Podledefinicejsou0i1regulárnívýrazy. Protože0i1jsouregulárnívýrazy,jei(0+1)regulárnívýraz. Protože0jeregulárnívýraz,jei(0 )regulárnívýraz. Protože (0+1)i(0 )jsouregulárnívýrazy,jei((0+1) (0 )) regulární výraz. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 27/ 32
Regulární výrazy Příklad: abeceda Σ = {0,1} Podledefinicejsou0i1regulárnívýrazy. Protože0i1jsouregulárnívýrazy,jei(0+1)regulárnívýraz. Protože0jeregulárnívýraz,jei(0 )regulárnívýraz. Protože (0+1)i(0 )jsouregulárnívýrazy,jei((0+1) (0 )) regulární výraz. Poznámka: Jestliže α je regulární výraz, zápisem [α] označujeme jazyk definovaný regulárním výrazem α. [((0+1) (0 ))] = {0,1,00,10,000,100,0000,1000,00000,...} Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 27/ 32
Regulární výrazy Strukturu regulárního výrazu si můžeme znázornit abstraktním syntaktickým stromem: + + 1 1 1 1 0 0 0 1 (((((0 1) ) 1) (1 1))+(((0 0)+1) )) Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 28/ 32
Regulární výrazy Formální definice sémantiky regulárních výrazů: [ ] = [ε] = {ε} [a] = {a} [α ] = [α] [α β] = [α] [β] [α+β] = [α] [β] Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 29/ 32
Regulární výrazy Aby byl zápis regulárních výrazů přehlednější a stručnější, používáme následují pravidla: Vynecháváme vnější pár závorek. Vynecháváme závorky, které jsou zbytečné vzhledem k asociativitě operací sjednocení(+) a zřetězení( ). Vynecháváme závorky, které jsou zbytečné vzhledem k prioritě operací (nejvyššíprioritumáiterace( ),menšízřetězení( )anejmenší sjednocení(+)). Nepíšeme tečku pro zřetězení. Příklad: Místo obvykle píšeme (((((0 1) ) 1) (1 1))+(((0 0)+1) )) (01) 111+(00+1) Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 30/ 32
Regulární výrazy Příklady:Vevšechpřípadech Σ = {0,1}. 0... jazyktvořenýjedinýmslovem0 Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 31/ 32
Regulární výrazy Příklady:Vevšechpřípadech Σ = {0,1}. 0... jazyktvořenýjedinýmslovem0 01... jazyktvořenýjedinýmslovem01 Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 31/ 32
Regulární výrazy Příklady:Vevšechpřípadech Σ = {0,1}. 0... jazyktvořenýjedinýmslovem0 01... jazyktvořenýjedinýmslovem01 0+1... jazyktvořenýdvěmaslovy0a1 Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 31/ 32
Regulární výrazy Příklady:Vevšechpřípadech Σ = {0,1}. 0... jazyktvořenýjedinýmslovem0 01... jazyktvořenýjedinýmslovem01 0+1... jazyktvořenýdvěmaslovy0a1 0... jazyktvořenýslovy ε,0,00,000,... Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 31/ 32
Regulární výrazy Příklady:Vevšechpřípadech Σ = {0,1}. 0... jazyktvořenýjedinýmslovem0 01... jazyktvořenýjedinýmslovem01 0+1... jazyktvořenýdvěmaslovy0a1 0... jazyktvořenýslovy ε,0,00,000,... (01)... jazyktvořenýslovy ε,01,0101,010101,... Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 31/ 32
Regulární výrazy Příklady:Vevšechpřípadech Σ = {0,1}. 0... jazyktvořenýjedinýmslovem0 01... jazyktvořenýjedinýmslovem01 0+1... jazyktvořenýdvěmaslovy0a1 0... jazyktvořenýslovy ε,0,00,000,... (01)... jazyktvořenýslovy ε,01,0101,010101,... (0+1)... jazyktvořenývšemislovynadabecedou {0,1} Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 31/ 32
Regulární výrazy Příklady:Vevšechpřípadech Σ = {0,1}. 0... jazyktvořenýjedinýmslovem0 01... jazyktvořenýjedinýmslovem01 0+1... jazyktvořenýdvěmaslovy0a1 0... jazyktvořenýslovy ε,0,00,000,... (01)... jazyktvořenýslovy ε,01,0101,010101,... (0+1)... jazyktvořenývšemislovynadabecedou {0,1} (0+1) 00... jazyktvořenývšemislovykončícími00 Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 31/ 32
Regulární výrazy Příklady:Vevšechpřípadech Σ = {0,1}. 0... jazyktvořenýjedinýmslovem0 01... jazyktvořenýjedinýmslovem01 0+1... jazyktvořenýdvěmaslovy0a1 0... jazyktvořenýslovy ε,0,00,000,... (01)... jazyktvořenýslovy ε,01,0101,010101,... (0+1)... jazyktvořenývšemislovynadabecedou {0,1} (0+1) 00... jazyktvořenývšemislovykončícími00 (01) 111(01)... jazyktvořenývšemislovyobsahujícímipodslovo111 předcházené i následované libovolným počtem slov 01 Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 31/ 32
Regulární výrazy (0+1) 00+(01) 111(01)... jazyktvořenývšemislovy,kterábuď končí 00 nebo obsahují podslovo 111 předcházené i následované libovolným počtem slov 01 Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 32/ 32
Regulární výrazy (0+1) 00+(01) 111(01)... jazyktvořenývšemislovy,kterábuď končí 00 nebo obsahují podslovo 111 předcházené i následované libovolným počtem slov 01 (0+1) 1(0+1)... jazyktvořenývšemislovyobsahujícímialespoň jeden symbol 1 Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 32/ 32
Regulární výrazy (0+1) 00+(01) 111(01)... jazyktvořenývšemislovy,kterábuď končí 00 nebo obsahují podslovo 111 předcházené i následované libovolným počtem slov 01 (0+1) 1(0+1)... jazyktvořenývšemislovyobsahujícímialespoň jeden symbol 1 0 (10 10 )... jazyktvořenývšemislovyobsahujícímisudýpočet symbolů 1 Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března 2017 32/ 32