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