Professional Documents
Culture Documents
Gramatike
Krunoslav Puljić
2015/2016
Gramatika
• Kao što se gramatika koristi u proučavanju
prirodnih jezika, tako se formalna
gramatika koristi u generiranju i analizi
znakova formalnog jezika
Definicija
• Kontekstno neovisna gramatika je
uređena četvorka G=(V,T,P,S), gdje je:
V konačan skup nezavršnih znakova
T konačni skup završnih znakova i VT=
P konačan skup produkcija oblika A
◦ A je jedan nezavršni znak
◦ je niz znakova skupa (VT)*
može biti i prazni niz
S početni nezavršni znak
Oznake
• U formalnoj gramatici koriste se sljedeće oznake
Velika slova A, B, C, D, E i S su nezavršni znakovi
gramatike
Mala slova a, b, c, d, e, brojke i podebljani nizovi
znakova su završni znakovi
Velika slova X, Y i Z su završni ili nezavršni znakovi
Mala slova u, v, w, x, y i z označavaju nizove završnih
znakova
Mala grčka slova, i označavaju nizove koji se
sastoje od završnih i nezavršnih znakova
Pravila
• Ako više produkcija ima isti znak na lijevoj
strani, te produkcije se pišu u istom retku s
jednim znakom na lijevoj strani, a različite
desne strane odvajaju se operatorom |
• Npr. produkcije
A->a
A->b
se spajaju u
A->a|b
Gramatika
• Konteksno neovisne gramatike koriste se
za definiranje sintakse programskih jezika
Produkcije gramatike najčešće su u Backus-
Naurovom obliku (BNF oblik)
◦ BNF je sličan formalizmu konteksno neovisne
gramatike, osim malih razlika u formatu zapisa i
uvedenih pokrata
Gramatika za aritmetičke izraze
• G=(V,T,P,S)
V = {E}
T = {a, +, *, (, )}
P = {EE+E | E*E | (E) | a}
S=E
• Npr. E a
E E+E2 a+a
E E*E2 a*a
E E*E (E)*E (E+E)*E3 (a+a)*a
Relacija
• Za zadanu gramatiku G=(V,T,P,S) definira
se relacija nad nizovima skupa (VT)*
• Ako je A produkcija iz skupa P i ako su
i iz (VT)* onda vrijedi
A .
• Niz generira se neposredno iz niza
A primjenom produkcije A
Relacija *
• Neka su 1, ... , m nizovi u (VT)*, m1 i
neka je 12, 23, ... , m-1m
• Gramatika G generira niz m iz niza 1, što
se zapisuje pomoću relacije *
1*m
• Relacija * jest refleksivno i tranzitivno
okruženje relacije
Relacija i
• Generira li gramatika niz iz niza
primjenom i produkcija, to zapisujemo kao
i
• Gramatika G=(V,T,P,S) generira jezik
L(G) = { w | w T* za koji vrijedi Siw}
• Niz w je u jeziku L(G) ako vrijedi:
w se sastoji isključivo od završnih znakova
w je moguće generirati iz početnog
nezavršnog znaka S
Kontekstno neovisni jezici
• Kontekstno neovisne gramatike generiraju
klasu kontekstno neovisnih jezika (KNJ)
• Klasa KNJ sadrži i jezike koji nisu regularni
Npr. jezik N={wcwR}
◦ w iz (a+b)*
Npr. jezik N={0n1n}
Jezik N={wcwR}
• Zadana je gramatika G=(V,P,T,S) gdje je
V={S}
T={a,b,c}
P={S aSa | bSb | c}
S=S (S je početno stanje)
• Počevši od početnog nezavršnog znaka S i
primjenom produkcija P, G generira niz u kojem
se neposredno ispred i iza nezavršnog znaka S
nalazi isti znak a ili b
• Primjenom produkcija SaSa i SbSb nastaje
niz S * wSwR, gdje se w sastoji od znakova a i
b, dok je wR niz w napisan obrnutim redoslijedom
Jezik N={wcwR}
• Primjenom produkcija Sc generira se niz
koji se sastoji isključivo od završnih
znakova gramatike, pa gramatika G
generira nizove
S * wSwR * wcwR,
tj. jezik
L(G) = {wcwR} = N
Generativno stablo
• Stablo je generativno stablo za gramatiku
G=(V,T,P,S) ako vrijedi:
Čvorovi stabla označeni su znakovima VT {}
Korijen stabla označen je početnim nezavršnim
znakom S
Unutrašnji čvorovi označeni su nezavršnim
znakovima AV
Neka su n1, n2, ... , nk svi čvorovi djeca čvora n.
Ako je n označen znakom A, a n1, n2, ... , nk
znakovima X1, X2, ... , Xk, onda je A X1X2...Xk
produkcija iz skupa P
Generativno stablo
(nastavak)
14 c
Regularna gramatika
• Gramatika koja generira regularne jezike
naziva se regularna gramatika
desno ili lijevo linearna gramatika
Produkcije su “linearne”
◦ sadrže samo jedan nezavršni znak s desne strane
od
taj nezavršni znak mora biti skroz lijevo ili skroz desno
◦ s lijeve strane sve KNG imaju samo jedan
nezavršni znak
Desno linearna gramatika
• Gramatika je desno linearna (DLG) ako
sve produkcije imaju najviše jedan
nezavršni znak, i to na krajnjem desnom
mjestu
AwB ili Aw
◦ A i B su nezavršni znakovi iz V
◦ Niz w je niz završnih znakova iz T*, proizvoljne
duljine i uključujući prazni niz
AabcB Aabc AB A
Desno linearna gramatika
• Sve produkcije desno linearne gramatike
moguće je svesti na oblik AaB i A
AabcB
◦ AaT1 T1bT2 T2cB
Aabc
◦ AaT1 T1bT2 T2cT3 T3
AB
◦ A”desne strane svih produkcija koje imaju s lijeve strane B”
Lijevo linearna gramatika
• Gramatika je lijevo linearna (LLG) ako sve
produkcije imaju najviše jedan nezavršni
znak, i to na krajnjem lijevom mjestu
ABw ili Aw
◦ A i B su nezavršni znakovi iz V
◦ Niz w je niz završnih znakova iz T*, proizvoljne
duljine i uključujući prazni niz
Primjer
• Zadan je regularni izraz 0(10)*
Desno linearna gramatika
◦ S 0A
◦ A 10A |
Lijevo linearna gramatika
◦ S S10 | 0
Linearne gramatike
• Vrijedi:
Jezik je regularan akko postoji DLG koja ga generira
Jezik je regularan akko postoji LLG koja ga generira
• Lijevo i desno linearne gramatike su regularne
gramatike
Moguće je izgraditi konačni automat koji
prihvaća isti jezik kao i zadana DLG ili LLG
Konstrukcija KNG (DLG) iz DKA
• Slijedi konstrukcija kontekstno neovisne
gramatike za regularni izraz zadan
determinističkim konačnim automatom
RI pretvaramo u DKA preko e-NKA, NKA i
minimizacije DKA
ustvari ćemo konstruirati desno linearnu
gramatiku
Konstrukcija KNG (DLG) iz DKA
• Regularni jezik je zadan pomoću DKA
M=(W,,,q0,F)
• Gradi se konteksno neovisna gramatika
G=(V,T,P,S) za koju vrijedi L(G)=L(M)
1. Skup T završnih znakova gramatike
jednak je skupu ulaznih znakova DKA
2. Skup V nezavršnih znakova gramatike
jednak je skupu stanja DKA
Konstrukcija KNG (DLG) iz DKA
3. Početni nezavršni znak S gramatike
jednak je početnom stanju q0 DKA
4. Na temelju prijelaza DKA (A,a)=B iz
stanja A u stanje B za ulazni znak a,
gradi se produkcija AaB, gdje su A i B
nezavršni znakovi, a a je završni znak
5. Za sva prihvatljiva stanja AF grade se
produkcije A, gdje je A nezavršni
znak, a je prazan niz
Primjer: KNG (DLG) iz DKA
DKA a b Gramatika G
S A B 1 SaA SbB S
A B A 0 AaB AbA
B S A 1 BaS BbA B
Q={S,A,B} V
={a,b} T
q0=S S
F={S,B} S B
Primjer: KNG (DLG) iz DKA
DKA a b Gramatika G
S A B 1 SaA SbB S
A B A 0 AaB AbA
B S A 1 BaS BbA B
• Npr. za niz aba koji se prihvaća:
• U DKA imamo S a A b A a B, BF, aba se prihvaća
• U G imamo S aA abA abaB aba
• Prihvaćaju se i npr. , aa, bbba
• Ne prihvaćaju se i npr. a, bbb
Konstrukcija NKA iz DLG
• Vrijedi tvrdnja:
A * wB akko (A,w)=B
• Za jezik zadan DLG-om, koja ima odgovarajući
oblik produkcija, moguće je izgraditi NKA koji
prihvaća isti jezik
AaB i A
◦ A i B su nezavršni znakovi, a je završni znak
Nezavršni znakovi postaju stanja, završni su abeceda
Ako postoji produkcija A onda je A završno stanje
Na temelju produkcije AaB gradi se prijelaz
(A,a)=(A,a){B}
Primjer konstrukcije NKA iz DLG
• G=({V,B}, {s,b}, {VsB, BbB | sB | }, V)
• V definira varijablu, B definira brojke ili slova
• s označava jedno slovo, a b jednu brojku
Konteksno neovisni
jezici KNJ
Regularni
jezici RJ
Literatura
• Siniša Srbljić: Jezični procesori 1 [JP1]
• Siniša Srbljić: Jezični procesori 2 [JP2]