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 řetězců nad danou abecedou automat pro každý řetězec rozhoduje, zda patří do daného jazyka JAZYK gramatika reprezentuje jazyk pomocí pravidel pro tvorbu řetězců AUTOMAT automat a gramatika jsou navzájem převoditelné vyjadřovací prostředky GRAMATIKA Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 2 / 24
Osnova dnešní přednášky 1 Formální gramatika intuitivní chápání a definice generování věty, přímá a nepřímá derivace definice jazyka množinou vět 2 Chomského klasifikace gramatik a jazyků neomezené gramatiky kontextové gramatiky bezkontextové gramatiky lineární gramatiky vztahy mezi jednotlivými třídami Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 3 / 24
Gramatika Splňuje základní požadavek kladený na reprezentaci konečných i nekonečných jazyků konečnost reprezentace Dvě konečné disjunktní abecedy množina neterminálních symbolů N množina terminálních symbolů Σ Neterminální symboly mají roli pomocných proměnných označujících určité syntaktické celky Množina terminálních symbolů je identická s abecedou, nad níž je definován jazyk Množinu N Σ nazveme slovník gramatiky Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 4 / 24
Intuitivní chápání pojmu gramatika Pravidla, kterými se neterminální symboly přepisují na terminální symboly nebo jiné neterminální symboly Příklad Schéma jednoduché oznamovací věty v přirozeném jazyce (řetězce v závorkách představují neterminální symboly): věta ::= podmět přísudek předmět podmět ::= Petr přísudek ::= má předmět ::= počítač předmět ::= notebook Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 5 / 24
Gramatika Definice Gramatika G jazyka L je čtveřice G L = (N, Σ, P, S), kde: N je konečná neprázdná množina neterminálních symbolů Σ je konečná množina terminálních symbolů, N Σ = P (N Σ) N(N Σ) (N Σ) je konečná množina přepisovacích pravidel S N je startovací symbol (kořen) gramatiky Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 6 / 24
Dohodnuté značení Zaveďme symboliku: terminální symboly a, b, c, neterminální symboly A, B, C, řetězce pouze terminálních symbolů u, v, w, řetězce smíšených symbolů α, β, γ, Prvek (α, β) P nazveme přepisovací pravidlo a budeme jej nejčastěji zapisovat ve tvaru α β Řetězec α je levá strana přepisovacího pravidla (obsahuje alespoň jeden neterminální symbol), řetězec β je pravá strana přepisovacího pravidla Pravidla ve tvaru α β 1, α β 2,, α β n lze vyjádřit zkráceně jako α β 1 β 2 β n Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 7 / 24
Generování věty Aplikací přepisovacích pravidel lze ze startovacího symbolu gramatiky generovat věty patřící do jazyka L V průběhu generování postupně vznikají řetězce ze slovníku gramatiky (N Σ), tzv. větné formy Cílem generování je vytvoření řetězce w Σ, který neobsahuje neterminální symboly S větné formy w Příklad věta podmět přísudek předmět Petr přísudek předmět Petr má předmět Petr má počítač Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 8 / 24
Přímá a nepřímá derivace Definice Nechť G je gramatika a λ, µ jsou řetězce z (N Σ). Mezi řetězci λ a µ platí relace G nazývaná přímá derivace, jestliže je můžeme vyjádřit ve tvaru λ = γαδ, µ = γβδ, kde α β P. Libovolnou mocninu přímé derivace n nazveme nepřímá derivace. Příklad G = ( {A, S}, {0, 1}, {(S, 0A1), (0A, 00A1), (A, ϵ)}, S ) Řetězce λ = 000A111, µ = 0000A1111 Platí 000A111 0000A1111, neboť 0A 00A1 P Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 9 / 24
Derivace Definice Nechť G je gramatika a λ, µ jsou řetězce z (N Σ). Mezi řetězci λ a µ platí relace + G nazývaná derivace, jestliže existuje posloupnost přímých derivací ν i 1 ν i, kde i = 1,, n a n 1, taková, že platí: λ = ν 0 ν 1 ν n 1 ν n = µ Tuto posloupnost nazveme derivací délky n. Platí-li λ + G µ, pak řekneme, že řetězec µ lze vygenerovat z řetězce λ v gramatice G. Místo + G budeme často používat jen + Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 10 / 24
Definice jazyka množinou vět Relace + je zřejmě tranzitivním uzávěrem přímé derivace + = Definice n=1 n Řetězec α (N Σ) nazveme větnou formou, jestliže S + α. Větná forma obsahující pouze terminální symboly se nazývá věta. Jazyk L G generovaný gramatikou G definujeme jako množinu všech vět L G = {w w Σ S + w} Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 11 / 24
Definice jazyka množinou vět Příklad Je dána abeceda Σ = {a, b, c} a gramatika G nad touto abecedou: N = {S, A} P = {(S, b), (S, aac), (A, ba), (A, ϵ)} S je startovací symbol Pravidla přepíšeme do přehledné podoby a očíslujeme (1) S b (2) S aac (3) A ba (4) A ϵ Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 12 / 24
Definice jazyka množinou vět Příklad (pokračování) Aplikujeme přepisovací pravidla gramatiky: S (1) b S (2) aac (4) ac S (2) aac (3) abac (4) abc S (2) aac (3) abac (3) abbac (4) abbc S (2) aac (3) abac (3) abbac (3) abbbac (4) abbbc Generujeme postupně věty z jazyka L G = {b, ab n c n 0}.. Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 13 / 24
Příklady gramatik a jimi generovaných jazyků Příklad Jaké jazyky generují následující gramatiky? a) G = ({A}, {a, b}, P, A) L G = {a n b n n 0} A aab ϵ b) G = ({A, B, C}, {a, b, 0, 1}, P, B) L G = {a, b} {0, 1} B A C A aa ba ϵ C 0C 1C ϵ c) G = ({A, B, C}, {a, b, 0, 1}, P, B) L G = {a, b} + {0, 1} + B AC A a b aa ba C 0 1 0C 1C Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 14 / 24
Příklad ekvivalentních gramatik Příklad Gramatika G 1 = ({A, B, C}, {a, b,, z}, P 1, A) s pravidly: A B AC B a C a b z Gramatika G 2 = ({D, E}, {a, b,, z}, P 2, D) s pravidly: D a ae E EE a b z L G1 = L G2 = { w w {a, b,, z} + w začíná písm. a } Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 15 / 24
Chomského klasifikace gramatik a jazyků Při porovnávání dvou gramatik nezáleží na druhu, tvaru či počtu přepisovacích pravidel, rozhodující jsou odvozovací možnosti Protože každý jazyk lze popsat více ekvivalentními gramatikami, je účelné zkoumat nejen jaký jazyk gramatiky popisují, ale i jakým způsobem jej popisují Vhodným omezením tvaru přepisovacích pravidel je možné gramatiky rozdělit do tříd a poté klasifikovat i příslušné jazyky Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 16 / 24
Chomského klasifikace gramatik a jazyků Čtyři třídy gramatik a jazyků jimi generovaných (A N C, 1956) Postupné zpřísňování požadavků na tvar přepisovacích pravidel gramatiky Sekvenční způsob generování slova v každém kroku derivace použito právě jedno přepisovací pravidlo na právě jednom místě ve větné formě Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 17 / 24
Gramatiky typu 0 Přepisovací pravidla ve shodě s definicí gramatiky α β, α (N Σ) N(N Σ), β (N Σ) Neomezené gramatiky na tvar pravidel nejsou kladeny žádné omezující požadavky Akceptačním systémem Turingův stroj Příklad Gramatika G = ({A, B}, {a, b}, P, A) s pravidly: A AbB a AbB bab BAbB B b ϵ Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 18 / 24
Gramatiky typu 1 Přepisovací pravidla ve tvaru αaβ αγβ A N, α, β (N Σ), γ (N Σ) + Zřejmě γ 1 s výjimkou pravidla S ϵ, potom se ale S nesmí vyskytnout na pravé straně žádného pravidla Kontextové gramatiky symbol A může být přepsán řetězcem γ pouze tehdy, je-li jeho pravým kontextem β a levým kontextem α Akceptačním systémem lineárně ohraničený automat Příklad Gramatika G = ({A, S}, {0, 1, c}, P, S) s pravidly: S 0A1 0A 00A1 A c Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 19 / 24
Gramatiky typu 2 Přepisovací pravidla ve tvaru A α, A N, α (N Σ) Bezkontextové gramatiky přepsání lze provést libovolně bez ohledu na kontext, ve kterém je neterminál A uložen Akceptačním systémem zásobníkový automat Příklad Gramatika G = ({S, A, B}, {a, b}, P, S) s pravidly: S ab ba A a as baa B b bs abb Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 20 / 24
Gramatiky typu 3 Přepisovací pravidla ve tvaru A wb w, A, B N, w Σ (pravá) A Bw w, A, B N, w Σ (levá) Lineární gramatiky, které lze snadno převést na ekvivalentní regulární gramatiky Akceptačním systémem konečný automat Příklad Gramatika G = ({A, B}, {a, b, c}, P, A) s pravidly: A aab ccb B bb ϵ Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 21 / 24
Vztahy mezi třídami gramatik Definice Jazyk L generovatelný gramatikou G typu i = {0, 1, 2, 3} nazveme jazykem typu i a označíme L i. Každá další třída jazyků je obsažena v předchozí L 0 L 1 L 2 L 3 Podle označení jednotlivých tříd (uvažujeme vždy nejnižší možnou třídu) mluvíme také o jazycích neomezených (i = 0) kontextových (i = 1) bezkontextových (i = 2) lineárních (i = 3) Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 22 / 24
Vztahy mezi třídami gramatik Složitost odpovídajících tříd jazyků v hierarchii klesá Současně s tím se zjednodušuje algoritmické zjišťování některých vlastností jazyků na základě jejich reprezentace příslušnost slova do jazyka pro dané slovo w a gramatiku G zjišťujeme, zda w L G (algoritmicky řešitelné od typu 1 dále) ekvivalence gramatik pro dané dvě gramatiky G 1 a G 2 zjišťujeme, zda L G1 = L G2 (algoritmicky řešitelné pouze pro typ 3) Využití poznatků teorie vyčíslitelnosti jazyky typu 0 a 1 aplikovaná informatika jazyky typu 2 a 3 Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 23 / 24
Návrh gramatiky Příklad Navrhněte gramatiku generující jazyk HTML. Ukázka kódu: <html> <head> <meta charset= utf-8 > <title>příklad</title> </head> <body> <h1>jak navrhnout gramatiku?</h1> <p>zkuste to bude se to hodit!</p> </body> </html> Teorie programovacích jazyků Přednáška 2: Formální jazyky a gramatiky 24 / 24