Abeceda a formální jazyk U přirozeného jazyka je nutné znát nejprve písmena, z nichž se tvoří slova a potom věty Stejně je tomu i u formálních jazyků DEF: Abeceda je konečná množina prvků, které nazýváme symboly. Příklad: A = {a,b,c, …,x,y,z} B = {0,1} C = {0,1,2,…,9} D = {.,0,1,2,…,9}
Řetězce nad danou abecedou DEF: Řetězec nad abecedou A je libovolná konečná posloupnost symbolů z abecedy A. x = a1a2…..ak-1ak je řetězec nad A {ai A | i=1,..,k} Příklad: 0101011 je řetězec nad abecedou A = {0,1} 4.573.3 je řetězec nad abecedou B = {.,0,1,2,…,9} 0.A567 není řetězec nad abecedou B = {.,0,1,2,…,9} DEF: Délka řetězce je rovna počtu symbolů v řetězci. x = a1a2…..ak-1ak & ai A pro i=1,..,k, potom |x| = k
Řetězce nad danou abecedou DEF: Řetězec s nulovou délkou se nazývá prázdný řetězec a značí se e. DEF Obrácený řetězec. Jestliže x = a1a2…..ak-1ak je řetězec nad abecedou A potom xR= akak-1…..a2a1 je obrácený řetězec k řetězci x Příklad: x = abcde xR= edcba Tvrzení: (xR) R= x
Operace zřetězení DEF: Jestliže x = a1a2…ak-1ak a y = b1b2…bl-1bl , potom řetězec xy = a1a2…akb1b2…bl-1bl nazýváme zřetězením řetězců x a y (značíme x•y) Tvrzení: Množina všech řetězců nad danou abecedou je uzavřená vzhledem k operaci zřetězení. Důkaz: Nechť x = a1a2…ak-1ak {ai A, i=1,..,k} y = b1b2…bl-1bl , {bi A, i=1,..,l} potom xy = a1a2…akb1b2…bl-1bl = c1…ckck+1…ck+l a současně {ci A, i=1,..,k+l}
Prefix, postfix a podřetězec DEF: Jestliže x = a1a2…ai…aj ….am, potom libovolný řetězec u = a1a2…ai nazýváme prefixem řetězce x v = ai+1…aj nazýváme podřetězcem řetězce x w = aj+1…am nazýváme postfixem řetězce x Napíšeme-li řetězec ve tvaru x=uvw, potom u je prefix, v je podřetězec a w je postfix
Prefix, postfix a podřetězec Příklad: Nechť x = 0101 potom prefixy: e, 0, 01, 010, 0101 podřetězce: e, 0, 1, 01, 10, 010, 101, 0101 postfixy: e, 1, 01, 101, 0101 (prefixem není 1, 10 atd.; podřetězcem není 11, 00 atd.) (e je prefixem, postfixem i podřetězcem lib. řetězce) Úloha: x = hradec ??? prefixy, podřetězce, postfixy
Množina řetězců nad abecedou DEF: Nechť A je libovolná abeceda. Množina všech řetězců nad abecedou A se označuje A*. DEF: Množina všech neprázdných řetězců nad abecedou A se označuje A+. Platí A+ = A* – {e} Příklad: Nechť A = {0,1}, potom A* = {e, 0, 1, 00, 01, 10, 11, 000, 001, 010, …} A+ = {0, 1, 00, 01, 10, 11, 000, 001, 010, …}
Formální jazyky DEF: Nechť A je daná abeceda. Potom libovolná podmnožina L A* je formální jazyk nad abecedou A. Je-li L konečná (respektive nekonečná), je příslušný jazyk konečný (respektive nekonečný) Jazyk může být i prázdný. Příklad: Nechť L je český jazyk, potom: x L: Ahoj , čau, dobré, ráno, dobrý, den, dobrou, noc, … x L: Axoj, čaw, dibré, morning, bnon, jour, ….
Formální jazyky Jazyk je množina a z toho plyne, že jej umíme popsat: - vyjmenováním všech prvků - definováním vlastnosti, kterou musí všechny prvky množiny splňovat Příklad: A = {a}, potom L1= {e, a, aa, aaa} = {ai| i = 0, 1, 2, 3} …konečný L2= {a, aa, aaa, …} = {ai| i > 0} = A+ …nekonečný L3= Ø …prázdný L4= {e} L3 = Ø …neprázdný jazyk obsahující jediné slovo
Formální jazyky Jazyk je množina a z toho plyne, že lze používat i běžné množinové operace: DEF: Nechť A a B jsou abecedy, L1 a L2 jazyky takové, že L1 A* a L2 B*. Potom platí A B = {x| xA xB} L1 L2 = {y| y L1 y L2} A B = {x| xA xB} L1 L2 = {y| y L1 y L2} A \ B = {x| xA xB} L1 \ L2 = {y| y L1 y L2}
Formální jazyky DEF: Operace zřetězení jazyků: L =L1•L2 = {xy| x L1 y L2} Příklad: Nechť L1 ={a,b,.., z} a L2 = {a,b,..,z,0,1,..,9}*. Potom L= L1•L2 je množina všech řetězců nad abecedou {a,b,..,z,0,1,..,9} takových, že x = a1a2…an, kde a1 L1 & a2…an L2 L = ? L je množina všech běžně používaných identifikátorů, jelikož každý řetězec z L začíná písmenem.
Formální jazyky DEF: Nechť L je jazyk, potom n-tou moncninu jazyka definujeme takto: L0 = {e} Ln = LLn-1 pro n1 Příklad: L = {ab, ba} Napište první čtyři mocniny jazyka L. Popište slovy n-tou mocninu jazyka L.
Formální jazyky DEF: Nechť L je jazyk, potom iterací jazyka rozumíme množinu L* = L0 L1 L2 L3 L4 … a pozitivní iterací množinu L+ = L1 L2 L3 … Platí: L* = L+ {e} , L+ = LL* = L*L Příklad: L = {ab} L+ = {ab, abab, ababab, abababab, ….} L* = {e, ab, abab, ababab, abababab, ….}
Formální jazyky - úkoly Příklad: L = {0,1,..,9}* Jazyk nezáporných celých čísel s vedoucími nulami. Úlohy: Nadefinujte jazyk, který obsahuje nezáporná celá čísla (bez vedoucích nul). Nadefinujte jazyk, který obsahuje všechna celá čísla. Nadefinujte jazyk, který obsahuje reálná čísla. Nadefinujte jazyk, který obsahuje množinu všech komentářů v programovacím jazyce C. Nadefinujte jazyk nad abecedou {a,b,…,z}, který obsahuje všechny slova obsahující podřetězec zuzana.
Formální jazyky - úkoly Úlohy: Lze množinu přirozených čísel považovat za abecedu? Lze množinu přirozených čísel považovat za jazyk? Která slova jsou zároveň prefixem i sufixem slova 101? Jaká slova vzniknou zřetězením jazyků {11,00} a {11,0}? Jaký jazyk vznikne iterací jazyka {00,01,1}? Obsahuje tento jazyk všechna slova nad abecedou {0,1}? Pro L1 ={w{a,b}|w obsahuje sudý počet symbolů a} a L2 ={w{a,b}|w začíná a končí stejným symbolem} napište několik prvních slov z L1 L2, L1 L2, L1 \ L2, \L1.
Formální jazyky - úkoly Úlohy: Popište slovně jazyk nad abecedou {0,1} vzniklý iterací jazyka {00,111}*? Jak lze schematicky popsat všechny posloupnosti stisků přepínačů A a B, které zajistí, že žárovka poté znovu svítí? A B