Kompilátory Co je to vlastně jazyk? Noam Chomsky – r. 1956
Transkript
Kompilátory Co je to vlastně jazyk? Noam Chomsky – r. 1956
Co je to vlastně jazyk? Kompilátory z z z z – jako „soubor slov a metod skládání slov, které chápe a používá dostatečně velká lidská společnost“ ... pro naše potřeby příliš všeobecná definice – třeba definovat formální jazyk abstraktně jako matematický systém – Formální jazyky a gramatiky - 1 z Výkladový Websterův slovník definuje jazyk Základné pojmy Formální jazyk Gramatika Jazyk specifikovaný gramatikou z Noam Chomsky – r. 1956 na základe studia a výzkumu zákonitostí v přirozených jazykách vytvořil matematický model gramatiky RNDr. Miroslav Benedikovič KI – FRI – ŽU Žilina 2 Základní pojmy z – – z z z z {a, b, c, d, ... z, A, B, C, ... Z} {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} {+ - * / . , : ‘ “ = { } [ ] ( ) < >} w = a1a2a3…an , kde ai jsou prvky z abecedy A Délka řetězce – |w| – je definovaná jako počet symbolů v řetězci w Kompilátory Obrácený (reverzní) řetězec – wR – je řetězec obsahující symboly původního řetězce w v obráceném poradí. 12.2. - 11.5. 2007 Jestli máme řetězec obrácený řetězec je w = a1 a2 a3 … a n wR = an an-1 ... a3 a2 a1 Mějme řetězce w1 = xy, w2 = yz které vznikli jejich zřetězením x, y a z z z z 3 Prázdny řetězec – ε – je řetězec s nulovou délkou. – Řetězec, slovo – w – je libovolná konečná posloupnost symbolů abecedy A – 12.2. - 11.5. 2007 Základní pojmy Abeceda – A – je konečná množina symbolů, z kterých se v daném jazyku budují vyšší významové celky. Její prvky nazýváme znaky, resp. symboly : a – Kompilátory 4 a , tak k němu w3 = xyz, Prefix – je řetězec x v řetězcích w1 a w3 ; y v řet. w2 Postfix – je řetězec z v řetězcích w2 a w3 ; y v řet. w1 Podřetězec – řetězce x, y, z v řetězcích w1, w2 i w3 Kompilátory 12.2. - 11.5. 2007 1 Základní pojmy Formální jazyk Operace z Zřetězení – ● – je operace definovaná na množině řetězců dané abecedy takto: – z z z Označujeme ho L (language). Jestli u = a1 a2 ... Am v = b1 b2 ... bn jsou řetězce nad danou abecedou, tak je zřetězení uv. u ● v = a1 a2 ... am b1 b2 ... bn z Množina všech řetězců, slov – A* – obsahuje všechny slova, které se skládají pouze z prvků abecedy A Kompilátory 12.2. - 11.5. 2007 6 Formální jazyk z 7 Nechť L je jazyk. Potom n-tá mocnina jazyka – Ln – je definovaná takto: L0 = { ε } pro n≥1, … (L2 = LL) Ln = Ln-1 z Uzávěr jazyka L je množina L* = ∪ Li z L = L1 L2 je jazyk řetězců písmen a číslic začínajících písmenem z Sjednocení Průnik Rozdíl 12.2. - 11.5. 2007 z Nechť L1 a L2 jsou jazyky. Potom zřetězením jazyků L1 a L2 voláme jazyk L s vlastnostmi : L = { xy | x ∈ L1 ∧ y ∈ L2 } Příklad: L1={a, b, .. z, A, B, .. Z}; L2 ={a, b, .. z, A, B, .. Z, 0, .. 9} z Kompilátory Formální jazyk Operace z L ⊆ A* Příklad: A={a, b}; L ={ w; w = ai bi , i ≥ 0 } Slova ε, ab, aabb patří do jazyka L, ale a, ba, abb nepatří. .... ai = i-násobný výskyt a (např.: a4 = aaaa) Množina všech neprázdných řetězců, slov – A+ – je množina A* bez prázdného řetězce, t.j. A+ = A* \ {ε} 5 Nech A je abeceda. Potom formální jazyk nad abecedou A definujeme jako libovolnou podmnožinu množiny A* Pozitivní uzávěr jazyka L je množina pro i ≥ 0 L+ = ∪ Ln pro n ≥ 1 L1 ∪ L2 = { w | w ∈ L 1 ∨ w ∈ L 2 } L1 ∩ L2 = { w | w ∈ L 1 ∧ w ∈ L 2 } L1 – L2 = { w | w ∈ L 1 ∧ w ∉ L 2 } Kompilátory 12.2. - 11.5. 2007 8 Kompilátory 12.2. - 11.5. 2007 2 Gramatika – úvodní pojmy – – z z z z Gramatika - definice Potřebujeme vytvořit nějaký mechanizmus popisující daný jazyk tak, aby bylo možné pomocí něj analyzovat vstupní text, případně generovat vety jazyka. Tímto mechanizmem je takzvaná gramatika z Terminál - terminální symbol je prvotní symbol daného jazyka Neterminál - neterminální symbol je symbol definovaný pomocí pravidel jazyka Začáteční neterminál (taktéž startovací) je jeden z neterminálních symbolů, ze kterého začíná analýza věty, případně generování vět jazyka Přepisovací pravidlo - vytvářející pravidlo, produkce je předpis, který určuje způsob náhrady neterminálu jiným řetězcem 9 Kompilátory 12.2. - 11.5. 2007 z z Jestli αβγ ∈ (N ∪ T)* a αδγ ∈ (N ∪ T)* , potom dané řetězce jsou v relaci αβγ G⇒ αδγ v případě, že v množině P existuje přepisovací pravidlo β Æ δ Zβ konečná množina neterminálních symbolů T z konečná množina terminálních symbolů, N ∩ T = ∅ S z začáteční symbol, S ∈ N, (musí byť pouze jeden!) P z konečná množina přepisovacích pravidel z z možno přímo derivovat z δ Relace redukce je inverzní relace k derivaci z 11 (N ∪ T)* N (N ∪ T)* × (N ∪ T)* Kompilátory z Jestli β a δ jsou v relaci odvození (derivace), hovoříme, že – z 12.2. - 11.5. 2007 Gramatika Mějme gramatiku G = ( N, T, S, P ). Relace odvození - derivace G⇒ je definována nad množinou (N ∪ T)* takto: – N 10 Gramatika z Gramatika je definována jako čtveřice G = ( N, T, S, P ) Kompilátory 12.2. - 11.5. 2007 12 Nechť G = ( N, T, S, P ) je gramatika pro i = 0, 1, 2, ... k. a mějme řetězce αi ∈ (N ∪ T)* Hovoříme, že αk se dá derivovat z α0 , jestli platí αi G⇒ αi+1 pro i = 0, 1, 2, ... k-1. Posloupnost řetězců α0, α1, ... αk nazýváme odvození – derivace αk z α0 Řetězec α ∈ (N ∪ T)* z gramatiky G = ( N, T, S, P ), který je derivovatelný ze začátečního symbolu S nazýváme větní forma. Všechny takovéto řetězce tvoří množinu větních forem – Formální zápis: V = { α | S ⇒* α, α ∈ (N ∪ T)* } Kompilátory 12.2. - 11.5. 2007 3 Jazyk specifikovaný gramatikou z z Nechť G = ( N, T, S, P ) je gramatika. Jazyk L(G) specifikovaný gramatikou G je množina řetězců složených pouze z terminálních symbolů, pro které existuje derivace ze začátečného symbolu gramatiky. Formální zápis: L(G) Kompilátory = { w | S ⇒* w, w ∈ T* } Děkuji za pozornost 13 Kompilátory 12.2. - 11.5. 2007 4