Gramatiky a jazyky Přednáška z předmětu Řízení v komplexních systémech České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Jazyk Jazyk L je množina řetězců nad abecedou T abeceda = neprázdná konečná množina symbolů Příklad: T = {a,b,c} L = {abc, abbc, ab} České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Gramatiky Gramatika je čtveřice: kde: N - množina neterminálních symbolů T - množina terminálních symbolů P - množina pravidel S - startovací symbol gramatiky SN České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Pravidla množina pravidel: levá strana pravidla pravá strana pravidla je libovolný řetězec z terminálních a neterminálních symbolů České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Pravidla pravidlo (,)P zapisujeme jako pravidlo má význam: „ přepiš na “ na levé straně pravidla je vždy neterminální symbol (tj. pomocí pravidla lze vždy přepsat nějaký neterminální symbol) České vysoké učení technické v Praze Fakulta dopravní
Příklad jednoduché gramatiky gramatika generující symetrické řetězce nul a jedniček 0000…01…11111 G = (N,T,P,S) N = { S, A } T = { 0, 1 } P = { S 0A1, A 0A1, A } (symbol představuje prázdný symbol) České vysoké učení technické v Praze Fakulta dopravní
Příklad jednoduché gramatiky příklad generovaného řetězce (věty): S 0A1 00A11 000A111 000111 Terminologie: = γ1αγ2 přímo generuje =γ1βγ2, jestliže existuje pravidlo α β značíme příklad: 00A11 000A111 České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Terminologie generuje , jestliže existuje posloupnost α1, α2,…, αn tak, že = α1, = αn a αi αi+1, i = 1 … n píšeme * posloupnost řetězů je derivace příklad: 0A1 * 000111 popis derivace posloupnost pravidel – viz dříve derivační strom České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Derivační strom S A 1 A 1 A 1 České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Jazyky a gramatiky gramatika G generuje jazyk LG gramatika G a jazyk LG generovaný gramatikou jsou ekvivalentní Poznámka: věty jazyka jsou tvořeny jen z terminálních symbolů České vysoké učení technické v Praze Fakulta dopravní
Chomského klasifikace gramatik podle tvaru pravidel se rozlišují gramatiky neomezené kontextové bezkontextové regulární České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Klasifikace gramatik neomezené - L(0) pravidla jsou obecná kontextové – L(1) γ1Aγ2 γ1βγ2, AN, γ1,γ2 je kontext, γ1,γ2 (N T)*, β (N T)+ bezkontextové A β, AN, β (N T)+ regulární viz dále České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Klasifikace gramatik neomezené gramatiky generují neomezený jazyk - L(0) kontextové gramatiky generují kontextový jazyk bezkontextové gramatiky generují bezkontextový jazyk regulární gramatiky generují regulární jazyk České vysoké učení technické v Praze Fakulta dopravní
Příklad neomezené gramatiky G = { N, T, P, S } N = { S, B } T = { a, b, c } P = { S abc, S aSBc, cB Bc, bB bb } gramatika generuje jazyk České vysoké učení technické v Praze Fakulta dopravní
Příklad kontextové gramatiky v příkladu neomezené gramatiky neodpovídá pravidlům kontextové gramatiky pouze pravidlo č. 3: cB Bc upravíme gramatiku na kontextovou pravidlo typu AB BA lze nahradit množinou pravidel kontextové gramatiky: kontext je vyznačen modře AB XB XB XA XA BA České vysoké učení technické v Praze Fakulta dopravní
Příklad kontextové gramatiky prohození nelze aplikovat na pravidlo č. 3 Proč? Protože terminální symbol nemohu přepsat. přidáme do gramatiky další neterminální symbol C, pravidlo cC cc a upravíme ostatní pravidla České vysoké učení technické v Praze Fakulta dopravní
Příklad kontextové gramatiky G = { N, T, P, S } N = { S, B, C, X } T = { a, b, c } P = { S abC, S aSBC, CB XB, XB XC, XC BC, bB bb, bC bc, cC cc } gramatika generuje stejný jazyk České vysoké učení technické v Praze Fakulta dopravní
Využití gramatik v programování lexikální elementy programovacích jazyků (klíčová slova, příkazy, konstanty, proměnné) jsou definovány regulární gramatikou programovací jazyky jsou většinou definovány bezkontextovou gramatikou České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Regulární gramatiky pravidla mají tvar: A aB nebo A a, kde A, B N, a T Poznámka: pravidla ve tvaru A aB má pravá regulární gramatika pravidla ve tvaru A Ba má levá regulární gramatika České vysoké učení technické v Praze Fakulta dopravní
Příklad regulární gramatiky gramatika generující celočíselné kladné konstanty používané v jazyce C desítkové konstanty začínají 1-9 osmičkové konstanty začínají 0 šestnáctkové konstanty začínají 0x G = (N, T, P, S) N = { S, X, D, H, O } T = { 0,...,9,x,A,..., F } České vysoké učení technické v Praze Fakulta dopravní
Příklad regulární gramatiky České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Konečné automaty regulární jazyk generovaný regulární gramatikou lze přijímat konečným automatem KA je model lexikálního analyzátoru, který rozhoduje, zda je přijímaný řetězec z daného jazyka KA je ekvivalentní regulární gramatice České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Konečné automaty konečný automat je pětice kde T je konečná množina vstupních písmen Q je konečná množina vnitřních stavů je stavově přechodová: funkce : Q T Q pro deterministický automat relace Q T Q pro nedeterministický automat České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Konečné automaty K je množina koncových stavů q0 je počáteční stav automatu Poznámka: automat nemá výstupní funkci po přijetí vstupního slova nás zajímá, zda automat skončil v nějakém stavu s K automat nemusí být deterministický lze jej převést na deterministický České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Konečné automaty České vysoké učení technické v Praze Fakulta dopravní
Konstrukce konečného automatu z regulární gramatiky množina vstupních písmen automatu X = T množina vnitřních stavů automatu Q = N {U}, U N každé pravidlo A aB implikuje přechod (A,a)=B, každé pravidlo A a implikuje přechod (A,a)=U množina koncových stavů K = {U}, resp. K={U,S}, pokud existuje pravidlo S České vysoké učení technické v Praze Fakulta dopravní
Příklad 4 Lexikální symboly v programovacích jazycích jsou konstanty, proměnné, operátory atd. V programovacím jazyce C je možné celočíselné konstanty zapsat v desítkové, osmičkové nebo šestnáctkové soustavě. Číslo zapsané v desítkové soustavě začíná cifrou 1 až 9, číslo zapsané v osmičkové soustavě začíná cifrou 0, číslo zapsané v šestnáctkové soustavě začíná 0x nebo 0X. Příklad: desítkově: 12, 25, 95 osmičkově: 05, 0123 šestnáctkově: 0x2F, 0X11 Navrhněte automatový model části lexikálního analyzátoru, který rozpozná, zda je číslo na vstupu zapsáno v desítkové, osmičkové nebo šestnáctkové soustavě.
navržený automat bude bez výstupní funkce; po zpracování vstupního čísla nás zajímá, ve kterém stavu automat končí; nejsou uvažovány chyby (doplňte sami příslušné stavy a přechody)
KA ekvivalentní regulární gramatice z příkladu automat je nedeterministický S U počáteční stav koncový stav České vysoké učení technické v Praze Fakulta dopravní
KA ekvivalentní regulární gramatice z příkladu odpovídající deterministický automat (minimalizovaný) S počáteční stav koncové stavy České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Regulární výrazy je dána konečná abeceda T regulární výrazy generují regulární jazyk, definují se rekurzivně, pomocí operací „*“ (iterace), „·“ (zřetězení) a „+“ (sjednocení) Definice: 1) Každé písmeno x T je regulární výraz. 2) Jsou-li E1, E2 regulární výrazy, pak E1 · E2, E1+ E2, E1 *, (E1) jsou také regulární výrazy. 3) Žádné jiné řetězce za regulární výrazy nepovažujeme. České vysoké učení technické v Praze Fakulta dopravní
Regulární výraz generující konstanty jazyka C (1+...+9)(0+...+9)*+0(0+...+7)*+ +0x(0+...+9+A+...+F)(0+...+9+A+...+F)* České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Ekvivalence regulární gramatiky, regulární výrazy a konečné automaty jsou vzájemně ekvivalentní a převoditelné Regulární gramatiky Konečné automaty Regulární výrazy České vysoké učení technické v Praze Fakulta dopravní
Příklad bezkontextové gramatiky gramatika generující jednoduchý ukázkový programovací jazyk G = {N,T,P,S} N = {S,Posl,Blok,Příkaz,Podm} T = { main,{,},;,cti_x,pis_x,x,++,--, if,(,),else,==,<,>,0,!= } České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Pravidla gramatiky S main { Posl }, Posl Příkaz, Posl Příkaz Posl Blok Příkaz, Blok { Posl } Příkaz cti_x;, Příkaz pis_x; Příkaz x++;, Příkaz x—-; Příkaz if(Podm) Blok Příkaz if(Podm) Blok else Blok Podm x==0, Podm x>0, Podm x<0, Podm x!=0 České vysoké učení technické v Praze Fakulta dopravní
Příklad generované věty S main { Posl } main { Příkaz } main { if(Podm) Blok } main { if(x!=0) Blok } main { if(x!=0) Příkaz } main { if(x!=0)if(Podm)Blok else Blok } main { if(x!=0)if(x<0)Příkaz else Příkaz} main { if(x!=0)if(x<0)x++; else Příkaz} main { if(x!=0)if(x<0)x++; else x--;} České vysoké učení technické v Praze Fakulta dopravní
Jiný příklad generované věty S main { Posl } main { Příkaz } main { if(Podm) Blok else Blok } main { if(Podm) Příkaz else Blok } main { if(x!=0) Příkaz else Příkaz } main { if(x!=0)if(Podm)Blok else Příkaz } main { if(x!=0)if(x<0)Příkaz else Příkaz} main { if(x!=0)if(x<0)x++; else Příkaz} main { if(x!=0)if(x<0)x++; else x--;} přepisuji vždy levý neterminální symbol, jde o levou derivaci České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Nejednoznačnost Všimněte si: pomocí dvou různých derivací byly vygenerovány dvě stejné věty jazyka, tj. mají stejnou syntaxi, ale různou sémantiku (význam) takové jazyky se nazývají nejednoznačné řešení: definování dodatečných pravidel v programovacích jazycích, např. else se vždy vztahuje k nejbližšímu if České vysoké učení technické v Praze Fakulta dopravní
Scénka Felixe Holzmanna a Františka Budína o vaření H: „Já podle kuchařky moc rád nevařím.“ B: „Proč ne, když je to dobrá kuchařka…“ H: „Já jednou dělal podle kuchařky knedlíky, tam stálo: krájejte tři dny starý housky. Já už jich měl nakrájenou plnou vanu a ještě jsem nekrájel ani den.“ České vysoké učení technické v Praze Fakulta dopravní
Krájejte tři dny starý housky příslovečné určení času přívlastek předmět Krájejte tři dny starý housky přívlastek předmět České vysoké učení technické v Praze Fakulta dopravní
Analýza bezkontextového jazyka Bezkontextový jazyk je analyzován zásobníkovým automatem České vysoké učení technické v Praze Fakulta dopravní
Překladové regulární gramatiky překladová regulární gramatika G = (N,T,D,P,S) kde: N - množina neterminálních symbolů T - množina terminálních symbolů D- množina výstupních symbolů P - množina pravidel S - startovací symbol gramatiky SN České vysoké učení technické v Praze Fakulta dopravní
Pravidla překladové regulární gramatiky pravidla mají tvar: A aB nebo A a, kde A, B N, a T, D* (D* je množina všech řetězů nad abecedou D) České vysoké učení technické v Praze Fakulta dopravní
Příklad překladové regulární gramatiky G= {N,T,D,P,S} N = {S,A,K,X} T = {a,+,*} D = {,,} P = { S aA, A +K, A *X, K a, X a } příklad: S aA a+K a+a gramatika přeloží vstupní výraz a+a v infixové formě na výst. výraz v postfixové formě České vysoké učení technické v Praze Fakulta dopravní
Konečný překladový automat konečný překladový automat je šestice kde T je konečná množina vstupních písmen D je konečná množina výstupních písmen Q je konečná množina vnitřních stavů K je konečná množina koncových stavů q0 je počáteční stav České vysoké učení technické v Praze Fakulta dopravní
Konečný překladový automat je zobrazení: : Q T { Mi: Mi Q D* } pokud má překladová gramatika pravidla ve tvaru A ayB, resp. A ay, kde y D (pravidlo obsahuje pouze jedno výstupní písmeno) a neexistují dvě pravidla taková, že A ayB a A ayC , pak je překladový automat deterministický a zachovává při překladu vlastnosti sekvenčního zobrazení České vysoké učení technické v Praze Fakulta dopravní
Konečný překladový automat zobrazení lze pak „rozdělit“ na: stavově přechodovou funkci : Q T Q výstupní funkci : Q T D automat je „klasický“ Mealyho automat Poznámka: konečné automaty, které se používají v jiné oblasti než překladů (např. jako modely sekvenčních logických systémů), nemají v definici automatu množinu koncových stavů K České vysoké učení technické v Praze Fakulta dopravní
Konečný překladový automat k příkladu automat je deterministický České vysoké učení technické v Praze Fakulta dopravní
Regulární překladové gramatiky Konečné překladové automaty Ekvivalence existuje ekvivalence Regulární překladové gramatiky Konečné překladové automaty České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Příklady k zamyšlení Navrhněte regulární gramatiku, která generuje desetinná čísla se znaménkem Navrhněte bezkontextovou gramatiku, která generuje logické výrazy v součtové formě pomocí spojek and (*), or (+), negace (-) a vstupních proměnných a,b,c, výstupní proměnná je y. Výraz je zakončen středníkem. České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Doplnění gramatiky neslouží pouze jazykům gramatikou mohou být definovány obecně jakékoliv generativní systémy např. gramatika „přírody“ L – systémy (Lindenmayerovy systémy) skupina fraktálů definovaných pomocí přepisovacích gramatik České vysoké učení technické v Praze Fakulta dopravní
Sierpinského trojúhelník G = (V,P,S) V = {S,G,F,+,-} konečná množina symbolů P = {S FGF + +FF + +FF, F FF, G + + FGF − −FGF − −FGF + +} interpretace pomocí „želví grafiky“ "F" – posun želvy vpřed (nakreslí čáru) "G" – ignoruje "+" – otočení želvy doleva o zadaný úhel "–" – otočení želvy doprava o zadaný úhel České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze pro úhel 60 stupňů vzniknou trojúhelníky České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze Kochova křivka G = (V,P,S) V = {S, F,+,-} konečná množina symbolů P = {S F +F − − F + F, F F +F − − F + F} „želví grafika“ "F" – posun želvy vpřed (nakreslí čáru) "+" – otočení želvy doleva o zadaný úhel "–" – otočení želvy doprava o zadaný úhel České vysoké učení technické v Praze Fakulta dopravní
České vysoké učení technické v Praze úhel = 60 stupňů České vysoké učení technické v Praze Fakulta dopravní