PERTEMUAN I
Teori Bahasa dan Otomata
Buku
Teori Bahasa dan Otomata, Firrar Utdirartatmo
An
Introduction to Formal Language and Automata, Peter Linz
Otomata
Arti menurut American Heritage Dictionary:
1. a robot
2. one that behaves in an automatic or mechanical fashion
Arti dalam dunia matematika
Berkaitan dengan teori mesin abstrak, yaitu mesin sekuensial
yang menerima input, dan mengeluarkan output, dalam bentuk diskrit.
Contoh :
¨
Mesin Jaja / vending machine
¨
Kunci kombinasi
¨
Parser/compiler
Teori Otomata dan bahasa formal, berkaitan dalam hal :
¨
Pembangkitan kalimat/generation : menghasilkan semua kalimat dalam bahasa L berdasarkan
aturan yang dimilikinya
¨
Pengenalan kalimat / recognition : menentukan
suatu string (kalimat) termasuk sebagai salah satu anggota himpunan L.
Bahasa Formal
Suatu kalimat dibentuk dengan menerapkan serangkaian aturan
produksi pada sebuah simbol ‘akar’. Proses penerapan aturan produksi dapat
digambarkan sebagai suatu diagram pohon.
Teori dasar
Def. 1 sebuah string dengan panjang n yang dibentuk dari
himpunan A adalah barisan dari n simbol
a1a2...an
ai Î A
Panjang string x dituliskan dengan |x|
Def 2. String kosong (null string), dilambangkan dengan e
adalah untaian dengan panjang 0 dan tidak berisi apapun. Panjang string x
dituliskan dengan |x|
Def 3. dua buah string a = a1a2...am
dan b=b1b2...bn dapat disambungkan menjadi
string c dengan panjang m+n sebagai berikut
c = a1a2...amb1b2...bn
Operasi penyambungan tersebut dapat pula diterapkan pada
himpunan
Z=XY = {st
| s ÎX
Ù
tÎY}
Def 4. (Closure) . An adalah himpunan string
dengan panjang n yang dibentuk dari simbol-simbol di himpunan simbol/alfabet A:
Transitif Closure/Kleen Closure adalah himpunan seluruh
string yang dapat dibentuk dari A dengan berbagai panjang
A* = A0 È A1
È
A2 È
A3 È
...
Jika string kosong dikeluarkan , akan diperoleh positive
closure
A+ = A1 È A2
È
A3 È
...
Tata Bahasa
Aturan yang disebutkan pada proses pengenalan dan
pembangkitan kalimat.
Secara formal, tata bahasa terdiri dari 4 komponen yaitu :
1. Himpunan
berhingga, tidak kosong dari simbol-simbol non terminal T1
2. Himpunan
berhingga, dari simbol-simbol non-terminal N
3. Simbol
awal S Î
N, yang merupakan salah satu anggota dari himpunan simbol non-terminal.
4. Himpunan
berhingga aturan produksi P yang setiap elemennya dituliskan dalam bentuk :
a ® b
dimana a dan b adalah string yang dibentuk dari himpunan T È N
dan a
harus berisi paling sedikit satu simbol non-terminal.
Keempat komponen tersebut sering dituliskan sbb :
G
= (T,N,S,P)
Bahasa yang dihasilkan oleh G ditulis sebagai L(G), yaitu
himpunan string yang dapat diturunkan dari simbol awal S dengan menerapkan
aturan-aturan produksi yang terdapat pada P.
Aturan Produksi
Aturan produksi a®b yang diterapkan pada suatu string w=aac
mengganti kemunculan. a menjadi b, sehingga string tersebut berubah menjadi w=abc,
sehingga dapat dituliskan aac Þ abc (aac memproduksi abc).
Produksi tersebut dapat diterapkan berkali-kali
w1
Þ
w2 Þ
w3 Þ
... Þ
wn
atau dapat dituliskan
w1 Þ*
wn
jika
minimal harus ada 1 aturan produksi yang diterapkan :
w1 Þ+
wn
Contoh 1
Tatabahasa G = {{S} , {a,b}, S , P } dengan aturan produksi
P adalah
S ® aSb
S ® e
maka dapat dihasilkan suatu string
S Þ aSb Þ
aaSbb Þaabb
sehingga dapat dituliskan
S Þ* aabb
Bahasa yang dihasilkan dari tatabahasa tersebut adalah
L(G) = { e ,
ab, aabb , aaabbb , aaaabbbb, ... }
atau dapat pula dituliskan
L(G) = {anbn
| n ³
0 }
Contoh 2
Tatabahasa G = {{S,A} , {a,b}, S , P } dengan aturan
produksi P adalah
S ® Ab
A ® aAb
A ® e
maka dapat dihasilkan suatu string
S Þ Ab Þb
S Þ Ab Þ aAbb
Þ
abb
S Þ Ab Þ aAbb
Þ
aaAbbb Þ
aaAbbb
Bahasa yang dihasilkan dari tatabahasa tersebut adalah
L(G) = { b
, abb, aabbb , aaabbbb , aaaabbbbb, ... }
atau dapat pula dituliskan
L(G) = {anbn+1
| n ³
0 }
Hirarki Bahasa
Kelas
|
Mesin pengenal
|
Regular language
Context free language
Context sensitive language
Unrestricted language
|
Finite
State Automata
Push Down Automata
Linear Bounded Automata
Turing Machine
|
Kelas
|
Ruas kiri
|
Ruas Kanan
|
Contoh
|
Regular
|
a Î N
|
£ 1 non terminal (paling kiri/kanan)
|
P ® abR
Q ® abc
R ® Scac
|
Context free
|
a Î N
|
-
|
P ® aQb
Q ® abPRS
|
Context sensitive
|
a Î (TÈN)+
|
|a| £ |b|
|
aD ® Da
AD ® aCD
|
Unrestricted
|
a Î (TÈN)+
|
-
|
CB ® DB
ADc ® e
|
NB : Ruas kiri harus memuat simbol non-terminal
Pelajari sendiri
Teori Himpunan
Relasi dan fungsi
Teori Pembuktian
Graph dan Tree
PR /Latihan di buku
Firrar, bab I
PERTEMUAN II
Finite State
Automata (FSA)
¨
model matematika yang dapat menerima input dan
mengeluarkan output
¨
Memiliki state yang berhingga banyaknya dan dapat
berpindah dari satu state ke state lainnya berdasar input dan fungsi transisi
¨
Tidak memiliki tempat penyimpanan/memory, hanya
bisa mengingat state terkini.
¨
Mekanisme kerja dapat diaplikasikan pada :
elevator, text editor, analisa leksikal, pencek parity.
0
|
1
|
0
|
1
|
1
|
0
|
1
|
FA |
Contoh pencek parity ganjil
Misal input : 1101
Genap 1 Ganjil 1 Genap 0 Genap 1
Ganjil
diterima
mesin
Misal input : 1100
Genap 1 Ganjil 1 Genap 0 Genap 0
Genap
ditolak
mesin
Def 1. Finite State Automata dinyatakan oleh 5 tuple
M=(Q , S , d , S
, F )
Q = himpunan state
S = himpunan simbol input
d = fungsi transisi d : Q ´ S
S = state awal / initial state , S Î Q
F = state akhir, F Í Q
Contoh diatas,
Q = {Genap,
Ganjil}
S =
{0,1}
S = Genap
F = {Ganjil
}
d
|
0
|
1
|
|
Genap
|
Genap
|
Ganjil
|
|
Ganjil
|
Ganjil
|
Genap
|
|
atau
d(Genap,0) = Genap
d(Genap,1) = Ganjil
d(Ganjil,0) = Ganjil
d(Ganjil,1) = Genap
Jenis FSA
Deterministic Finite Automata (DFA) : dari suatu state ada
tepat satu state berikutnya untuk
setiap simbol masukan yang diterima
Non-deterministic Finite Automata (NFA) : dari suatu state
ada 0, 1 atau lebih state berikutnya
untuk setiap simbol masukan yang diterima
Deterministic Finite Automata
¨
Contoh : pengujian parity ganjil.
¨
Contoh lain : Pengujian untuk menerima bit
string dengan banyaknya 0 genap, serta banyaknya 1 genap.
¨
0011 : diterima.
¨
10010 : ditolak, karena banyaknya 0 ganjil
¨
Diagram transisi-nya :
¨
DFA nya
Q = {q0
, q1 , q2 , q3 }
S =
{0,1}
S = q0
F = { q0}
fungsi transisi
d
|
0
|
1
|
q0
|
q2
|
q1
|
q1
|
q3
|
q0
|
q2
|
q0
|
q3
|
q3
|
q1
|
q2
|
d( q0,011)=
d(
q2,11) =d(
q3,1)= q2 Ditolak
d( q0,1010)=
d(
q1,010) =d(
q3,10)=d(
q2,0)= q0 Diterima
¨ Contoh lain DFA : Variabel dalam bahasa pascal diawali oleh huruf (besar/kecil), dan diikuti dengan huruf atau angka.
¨ Contoh DFA lainnya :
PERTEMUAN III
Nondeterministic Finite Automata
¨ Perbedaan dengan NFA: fungsi transisi dapat memiliki 0 atau lebih fungsi transisi
¨
G = ({q0 , q1 , q2
, q3, q4 }, {0,1}, d , q0 , { q2 , q4}}
d
|
0
|
1
|
q0
|
{ q0,q3}
|
{q0,q1}
|
q1
|
e
|
{q2}
|
q2
|
{q2}
|
{q2}
|
q3
|
{q4}
|
e
|
q4
|
{q4}
|
{q4}
|
¨
String diterima NFA bila terdapat suatu urutan
transisi berdasar input, dari state awal ke state akhir.
¨
harus mencoba semua kemungkinan.
¨
Contoh : string 01001
Def 2. Dua buah FSA disebut ekuivalen apabila kedua FSA
tersebut menerima bahasa yang sama
Contoh
: FSA yang menerima bahasa {an | n³0 }
Def 3. Dua buah state
dari FSA disebut indistinguishable
(tidak dapat dibedakan) apabila :
d(q,w)ÎF
sedangkan d(p,w)ÏF dan
d(q,w) ÏF
sedangkan d(p,w)
ÎF
untuk semua w Î
S*
Def 4. Dua buah state
dari FSA disebut distinguishable (dapat
dibedakan) bila terdapat w Î S* sedemikian hingga:
d(q,w)ÎF
sedangkan d(p,w)ÏF dan
d(q,w) ÏF
sedangkan d(p,w)
ÎF
untuk semua w Î
S*
Prosedur menentukan pasangan status indistinguishable
1. Hapus
semua state yang tak dapat dicapai dari state awal.
2. Catat
semua pasangan state (p,q) yang distinguishable, yaitu {(p,q) | p Î F Ù q Ï F}
3. Untuk
setiap pasangan (p,q) sisanya,
untuk setiap aÎ S, tentukan d(p,a) dan d(q,a)
Contoh
1. Hapus
state yang tidak tercapai -> tidak ada
2. Pasangan
distinguishable (q0,q4), (q1,q4),
(q2,q4), (q3,q4).
3. Pasangan
sisanya (q0,q1), (q0,q2), (q0,q3),
(q1,q2) (q1,q3) (q2,q3)
pasangan
|
state 1
|
state 2
|
hasil
|
||
0
|
1
|
0
|
1
|
||
(q0,q1)
|
q1
|
q3
|
q2
|
q4
|
distinguishable
|
(q0,q2)
|
q1
|
q3
|
q1
|
q4
|
distinguishable
|
(q1,q2)
|
q2
|
q4
|
q1
|
q4
|
indistinguishable
|
(q0,q3)
|
q1
|
q3
|
q2
|
q4
|
distinguishable
|
(q1,q3)
|
q2
|
q4
|
q2
|
q4
|
indistinguishable
|
(q2,q3)
|
q1
|
q4
|
q2
|
q4
|
indistinguishable
|
Catatan : jumlah pasangan seluruhnya :
Prosedur Reduksi DFA
1. Tentukan
pasangan status indistinguishable.
2. Gabungkan
setiap group indistinguishable state ke dalam satu state dengan relasi
pembentukan group secara berantai : Jika p dan q indistingishable dan jika q
dan r indistinguishable maka p dan r indistinguishable, dan p,q serta r
indistinguishable semua berada dalam satu group.
3. sesuaikan
transisi dari dan ke state-state gabungan.
Contoh
1. pasangan
status indistinguishable (q1,q2), (q1,q3) dan (q2,q3).
2. q1,q2,q3
ketiganya dapat digabung dalam satu state q123
3. Menyesuaikan
transisi, sehingga DFA menjadi
PR Buku Firrar Bab II nomor 3, 4, 8, 9, 12.
PERTEMUAN IV
Ekuivalensi NFA-DFA
¨ Ada apa dengan NFA ? konsep yang sulit diimplemen-tasikan. Komputer sepenuhnya deterministic.
¨
Kenapa dipelajari ? Lebih dekat ke sistem nyata
¨
Contoh : permainan catur, banyak alternatif pada
suatu posisi tertentu -> nondeterministic
¨
Non deterministik dapat menyelesaikan problem
tanpa backtrack, namun dapat diekuivalensikan ke DFA.
Algoritma
1. Buat
semua state yang merupakan subset dari state semula. jumlah state menjadi 2Q
2. Telusuri
transisi state–state yang baru terbentuk, dari diagram transisi.
3. Tentukan
state awal : {q0}
4. Tentukan
state akhir adalah state yang elemennya mengandung state akhir.
5. Reduksi
state yang tak tercapai oleh state awal.
Contoh Ubahlah NFA
berikut menjadi DFA
M={{q0,q1}, {0,1}, d, q0,{q1}}
dengan tabel transisi
d
|
0
|
1
|
q0
|
{q0,q1}
|
q1
|
q1
|
{}
|
{q0,q1}
|
1. State
yang akan dibentuk : {}, {q0} {q1},{q0,q1}
2. Telusuri state
d
|
0
|
1
|
{}
|
{}
|
{}
|
{q0}
|
{q0,q1}
|
{q1}
|
{q1}
|
{}
|
{q0,q1}
|
{q0,q1}
|
{q0,q1}
|
{q0,q1}
|
3. State awal : {q0}
4. State akhir yang mengandung q1, yaitu {q1},{q0,q1}
Contoh : Ubahlah NFA
berikut menjadi DFA
M={{q0,q1 ,q2}, {p,r}, d, q0,{q1}}
dengan tabel transisi
d
|
0
|
1
|
q0
|
{q1,q2}
|
{}
|
q1
|
{}
|
{q0,q1}
|
q2
|
{q1}
|
{q1}
|
1.
State yang akan dibentuk : {}, {q0} {q1},{q2},
{q0,q1}, {q0,q2}, {q1,q2},
{q0,q1,q2}
2.
Telusuri state:
d
|
p
|
r
|
{}
|
{}
|
{}
|
{q0}
|
{q1,q2}
|
{}
|
{q1}
|
{}
|
{q2}
|
{q2}
|
{q1}
|
{q1}
|
{q0,q1}
|
{q1,q2}
|
{q2}
|
{q0,q2}
|
{q1,q2}
|
{q1}
|
{q1,q2}
|
{q1}
|
{q1,q2}
|
{q0,q1,q2 }
|
{q1,q2}
|
{q1,q2}
|
3. State awal : {q0}
4. State akhir yang mengandung q1, yaitu {q1},{q1,q2}
5. Reduksi {q0,q1}{q0,q2}{q0,q1,q2
} sehingga FSA menjadi
NFA
dengan e-move
Def 1. e-move
adalah suatu transisi antara 2 status tanpa adanya input. Contoh gambar :
transisi antara status q1 ke q3
Def 2. e-closure
adalah himpunan state yang dapat dicapai dari suatu state tanpa adanya input.
Contoh gambar :
e-closure(q0) =
[q0,q1,q3]
e-closure(q1) =
[q1,q3]
e-closure(q3) =
[q3]
Ekuivalensi NFA dengan e-move ke NFA tanpa e-move
1.
Buat tabel transisi NFA dengan e-move
2. Tentukan
e-closure
setiap state
3. Carilah
fungsi transisi /tabel transisi yang baru,
rumus :
d’(state,input)=e-closure(d(e-closure(state,input))
4. Tentukan state akhir
ditambah dengan state yang e-closure nya menuju state
akhir, rumusnya
F’ = F È {q | (e-closure(q) Ç F ¹ Æ}
Contoh
Tabel transisi-nya
d
|
0
|
1
|
q0
|
Æ
|
Æ
|
q1
|
q2
|
q3
|
q2
|
Æ
|
Æ
|
q3
|
Æ
|
Æ
|
e-closure
dari FSA tersebut
e-closure(q0) =
[q0,q1]
e-closure(q1) =
[q1]
e-closure(q2) =
[q2]
e-closure(q3) =
[q3]
Cari tabel transisi yang baru (d’) :
d’
|
a
|
b
|
q0
|
e-cl(d(e-cl(q0),a))
e-cl(d({q0,q1},a))
e-cl(q2)
{q2}
|
e-cl(d(e-cl(q0),b))
e-cl(d({q0,q1},b))
e-cl(q3)
{q3}
|
q1
|
e-cl(d(e-cl(q1),a))
e-cl(d({q1},a))
e-cl(q2)
{q2}
|
e-cl(d(e-cl(q1),b))
e-cl(d({q1},b))
e-cl(q3)
{q3}
|
q2
|
e-cl(d(e-cl(q2),a))
e-cl(d({q3},a))
e-cl(Æ)
Æ
|
e-cl(d(e-cl(q2),b))
e-cl(d({q2},b))
e-cl(Æ)
Æ
|
q3
|
e-cl(d(e-cl(q3),a))
e-cl(d({q3},a))
e-cl(Æ)
Æ
|
e-cl(d(e-cl(q3),b))
e-cl(d({q3},b))
e-cl(Æ)
Æ
|
Hasilnya menjadi
Penggabungan FSA
Bila diketahui L1 adalah bahasa yang diterima
oleh M1 dan L2 adalah bahasa yang diterima oleh M2 maka
1. FSA M3 yang dapat menerima L1+L2
dibuat dengan cara
¨
Tambahkan state awal untuk M3, hubungkan dengan
state awal M1 dan state awal M2 menggunakan transisi e
¨
Tambahkan state akhir untuk M3, hubungkan dengan
state-state akhir M1 dan state-state akhir M2 menggunakan transisi e
2. FSA M4 yang dapat menerima L1L2
dibuat dengan cara
¨
State awal M1 menjadi state awal M4
¨
State-state akhir M2 menjadi state-state akhir
M4
¨
Hubungkan state-state akhir M1 dengan state awal
M2 menggunakan transisi e
Contoh FSA M1 dan M2
FSA M3
FSA M4
PR, Buku firrar
bab 3 nomor 5 dan 6
bab 4 nomor 1 dan 4
PERTEMUAN V
Ekspressi reguler
¨
Bahasa disebut reguler jika terdapat FSA yang
dapat menerimanya.
¨
Bahasa reguler dinyatakan secara sederhana
dengan ekspresi reguler/regular expression (RE).
¨
Contoh penerapan : searching string pada file
¨
RE -> NFA dengan e Move -> DFA
Definisi ekspresi reguler
Jika S merupakan himpunan simbol, maka
1. Æ , l ,
dan a ÎS
adalah ekspresi reguler dasar
2. jika
r dan t masing masing merupakan ekspresi reguler maka komposisi berikut
merupakan ekspresi reguler :
Ekspresi
|
Makna
|
r+t
rt
r*
(r)
|
himpunan string gabungan RÈT
operasi penyambungan string thd himpunan
Kleene closure dari R
r
|
Contoh ekspresi
reguler
¨
(0+1)* : himpunan seluruh string yang dapat
dibentuk dari simbol ‘0’ dan ‘1’
¨
(0+1)*00(0+1)* : himpunan string biner yang
mengandung paling sedikit satu substring ‘00’
¨
(0+1)*00 : himpunan string biner yang diakhiri
dengan ‘00’
Bahasa Reguler
Apabila r adalah RE, maka L(r) adalah bahasa reguler yang dibentuk menggunakan ekspressi reguler r.
Contoh
Tentukan bahasa reguler yang dibentuk oleh r=(aa)*
Jawab
L(r) = L(
(aa)* )
= { l, aa, aaaa, aaaaaa, ... }
=
{ a2n | n ³ 0 }
menyatakan himpunan string a dengan jumlah genap
Tentukan bahasa reguler yang dibentuk oleh r=(aa*)(bb)*b
Jawab
L(r) = L(
(aa)* (bb)*b )
= { a2n b2m+1 |
n,m ³
0 }
Tentukan ekspresi reguler pembentuk bahasa pada S = {0,1}, yaitu
L(r) = { w Î S* | w
memiliki substring ‘00’ }
Jawab
r =
(0+1)*00(0+1)*
Tentukan ekspresi reguler pembentuk bahasa pada S = {a,b}, yaitu
L(r) = { abnw | n³ 3 ,
w Î
{a , b}+ }
Jawab
r =
abbb(a+b)(a+b)*
Latihan :
1. Carilah
seluruh string pada L((a+b)*b(a+ab)*) dengan panjang string kurang dari 4.
2. Tentukan ekspresi reguler pembentuk bahasa pada S = {a,b,c}, yaitu
a. L(r) = { w Î S* | w
memiliki tepat sebuah simbol ‘a’ }
b. L(r) = { w Î S* | w
mengandung tepat 3 buah simbol ‘a’}
c. L(r) = { w Î S* | w
mengandung kemunculan masing masing simbol minimal satu kali}
3. Tentukan ekspresi reguler pembentuk bahasa pada S = {0,1}, yaitu
a. L(r) = { w Î S* | w diakhiri dengan string 01 }
b. L(r) ={ w Î S* | w tidak diakhiri dengan string 01 }
c. L(r) ={ w Î S* | w mengandung simbol ‘0’ sebanyak
genap }
d. L(r) ={ w Î S* | kemunculan string ’00’ pada w
sebanyak kelipatan 3 }
4. Tentukan ekspresi reguler pembentuk bahasa pada S = {a,b}, yaitu L(r) = { w Î S* | |w| mod 3 = 0 }
Sifat Bahasa Reguler
¨ Tertutup terhadap operasi himpunan sederhana
Jika L1 dan L2 adalah bahasa reguler, maka L1ÈL2,
L1 ÇL2, L1L2, ~(L1) dan L1* adalah bahasa reguler juga
¨
Tertutup terhadap homomorphic image.
Jika L1 adalah bahasa
reguler, maka homomorphic image h(L1) adalah bahasa reguler juga.
Dimisalkan S dan G
adalah alfabet, maka fungsi homomorphic
dinyatakan dengan
h
: S
® G
jika w = a1 a2
... an
maka h(w) = h(a1) h(a2
) ... h(an)
Jika L adalah bahasa pada S maka
homomorphic
image bahasa L adalah
h(L)=
{ h(w) | wÎL}
Contoh
Dimisalkan S =
{a,b} dan G
= {a,b,c} dan didefinisikan h(a) = ab
dan h(b) =bbc
homomorphic image bahasa L =
{aa,aba } adalah
h(L)=
{ abab, abbbcab}
Dimisalkan S =
{a,b} dan G
= {b,c,d} dan didefinisikan h(a) = dbcc
dan h(b) =bdc
homomorphic image bahasa L(r)
yang dibentuk dari ekspresi reguler
r =
(a+b*)(aa)*
adalah h(L(r)) yang dibentuk dengan ekspresi reguler
r
= (dbcc + (bdc)*) (dbccdbcc)*
Hubungan RE dan NFA
¨
Setiap RE ada satu NFA dengan e-move
yang ekuivalen
Konversi ekspresi reguler ke FSA
Ekspresi
|
FSA
|
e
|
|
Æ
|
|
a
|
|
r+t
|
|
rt
|
|
r*
|
|
Contoh : Tentukan FSA untuk
ekspresi reguler :
1. 01
2. 0+11
3. 01*+1
4. (0+1*)*
PR
Buku firrar bab V nomor 4 dan 8
PERTEMUAN VI
DFA dan Tatabahasa Reguler
Tatabahasa Linier kiri dan linier kanan
Suatu tatabahasa G (T,N,S,P) disebut linier kiri jika seluruh aturan produksinya berbentuk
A ® xB
A ® x
dengan A, B Î N dan x Î T*
Suatu tatabahasa G (T,N,S,P) disebut linier kiri jika seluruh aturan produksinya berbentuk
A ® Bx
A ® x
dengan A, B Î N dan x Î T*
Tatabahasa reguler bila bersifat linier kiri atau linier
kanan.
Contoh 1
Tatabahasa G = {{S} , {a,b}, S , P } dengan aturan produksi
P adalah S ®
abS |a
adalah tatabahasa linier kanan /reguler
Tatabahasa G = {{S, S1,S2 } , {a,b}, S
, P } dengan aturan produksi P adalah
S ® S1ab S1® S1ab
| S2 S2® a
adalah tatabahasa linier kiri /reguler
Tatabahasa G = {{S, A, B} , {a,b}, S , P } dengan aturan
produksi P adalah
S ® A A ® aB | l B ® Ab
adalah bukan tatabahasa reguler
Konversi DFA ke tatabahasa linier
Setiap
DFA dapat diubah menjadi tatabahasa yang memiliki aturan produksi yang linier.
Aturan pengubahan ini adalah sebagai berikut :
¨
setiap transisi status d(A,a)=B diubah menjadi
aturan produksi A ®
aB
¨
setiap status akhir P diubah menjadi aturan
produksi P®e
Contoh FSA berikut
Tatabahasa linier untuk FSA tersebut yaitu G = ({a,b}, {S,S1,S2,S3},S,
P ) dengan aturan produksi P adalah :
S ® S1
S1 ® aS2
S2 ® bS3
S3 ® e
Konversi tatabahasa linier ke DFA
¨
setiap aturan produksi A ® aB diubah menjadi
transisi status d(A,a)=B
¨
setiap aturan produksi A ® a diubah menjadi d(A,a)=SF
¨
untuk a Î T* dengan |a|>1 dapat
dibuat state tambahan
¨
setiap aturan produksi A ® B diubah menjadi d(A,e)=B
Contoh
tatabahasa G = ({a,b},{V0,V1},
V0, P ) dengan P :
V0
®aV1
V1
®abV0
| b
Mesin FSA nya menjadi
PR / Latihan buku firrar bab 6
nomor 2,3,4,5
Pertanyaan
mendasar tentang bahasa reguler
1.
Apakah terdapat suatu algoritma untuk menentukan diterima atau tidaknya suatu
suatu string pada bahasa L ?
Jawab
: YA, dengan menggunakan FSA.
2.
Apakah terdapat suatu algoritma untuk menentukan suatu bahasa reguler kosong,
finite atau infinite ?
Jawab
: YA
¨
dengan DFA, jika terdapat
lintasan dari simpul start ke simpul Final, maka bahasa tersebut tidak kosong.
¨
Cari simpul simpul yang
membentuk siklus. Jika terdapat lintasan dari simpul start ke simpul Final yang
melalui simpul yang membentuk siklus, maka bahasa tersebut infinite. Jika
tidak, maka bahasa tersebut finite.
Penerapan ekspresi reguler
¨
Digunakan untuk memerinci unit-unit leksikal
sebuah bahasa pemrograman (token).
contoh ekspresi reguler ‘bilangan
real positif’
(0+1+...+9)(0+1+...+9)*.(0+1+...+9)
(0+1+...+9)*
contoh ekspresi reguler ‘bilangan
bulat’
(‘+’ + ’-‘ + l)
(0+1+...+9)(0+1+...+9)*
¨
Editor text
Pumping lemma
Apabila suatu bahasa merupakan bahasa reguler maka akan
dapat diterima oleh mesin DFA M=(Q,S,d,q0,F), dengan sejumlah state n.
Apabila string w dengan |w| ³ n diinputkan dalam DFA,
maka pasti ada simpul k dalam DFA yang dikunjungi lebih dari satu kali.
Apabila string diantara simpul k yang sama tersebut
‘dipompa’, maka sisanya pasti masih diterima oleh DFA tersebut.
Contoh
Bahasa yang menerima ekspresi reguler 0(10)*11
¨
Ambil string wÎL , dengan |w|³ n:
w= 01011
q0 0 q1 1
q2 0 q1
1 q3 1
q4
¨
simpul q1 dikunjungi 2 kali.
¨
string diantara simbol q1 tersebut
‘dipompa’ keluar
q0 0 q1 1 q3 1
q4
¨
string 011 tersebut masih dapat diterima oleh
FSA.
Secara formal
Misal L
adalah sebuah bahasa reguler infinite, maka terdapat sebuah konstanta n dengan
sifat bahwa jika w adalah sebuah string dalam L yang panjangnya lebih besar
atau sama dengan n maka kita bisa menulis w=uvx sedemikian sehingga uvix
Î
L untuk semua i ³
0. dengan |v|³1
dan |uv|£n
.
Notasi matematisnya
Penjelasan
¨
Mengidentifikasi sifat yang harus dimiliki oleh
suatu bahasa reguler.
¨
Cara untuk menentukan apakah sebuah bahasa tidak
reguler
¨
Untuk memperlihatkan bahwa suatu bahasa infinite
tidak reguler, maka kita tunjukkan bahwa untuk nilai n yang cukup besar,
sekurang-kurangnya satu untai yang panjangnya n atau lebih besar gagal untuk
dapat ‘dipompa’.
Contoh :
L = {ai^2 | i³1}
{a1,
a4,a9, a16, ...}
{a
, aaaa , aaaaaaaaa , aaaaaaaaaaaaaaaa, ... }
Suatu string dalam L
harus mempunyai panjang yang berupa nilai kuadrat (1,4,9,16, ..., n2,
...)
Misal bahwa L adalah bahasa reguler.
Perhatikan bahwa terdapat sebuah nilai n sedemikian sehingga
an^2 ÎL,
Menurut pumping lemma dapat kita tuliskan an^2
=uvx, sedemikian hingga
¨
1 £|v|£ n
¨
("i) (uviw ÎL)
karena |v|³1 maka jelas bahwa
|uvw|<|uv2w|<|uv2w|<
...
ambil i=2 maka kita dapatkan
n2
= |uvw| < |uv2w| £ n2 + n < (n+1)2
Jelas
n2 < |uv2w|
< (n+1)2
Panjang |uv2w| bukan merupakan kuadrat sempurna,
karena berada diantara 2 nilai kuadrat sempurna yang berurutan.
berarti uv2w Ï L
Jadi disimpulkan bahwa L
= {ai^2 | i³1}
bukan merupakan bahasa reguler.
PERTEMUAN VII
FSA dengan Output
FSA : accepter, dapat menerima atau tidak.
FSA dengan output : transducer
1. Mesin Moore :output berasosiasi dengan state
2. Mesin Mealy :output berasosiasi dengan transisi
Mesin Moore
M = (Q,S,d,S,D,l)
Q : himpunan state
S : himpunan simbol
input
d : fungsi transisi
S : state awal S ÎQ
D : himpunan output
l : fungsi output untuk
setiap state
Contoh mesin moore untuk memperoleh modulus 3 pada suatu
bilangan biner:
M = (Q,S,d,S,D,l)
Q : q0,q1,q2
S : [0,1]
S : q0
D : [0,1,2]
l(q0) =0
l(q1) =1
l(q2) =2
Prinsip:
jika i diikuti dengan 0, maka
hasilnya 2i
1012 =5 10102 = 2*5 =10
jika i diikuti dengan 1, maka
hasilnya 2i+1
1012=5 10112 = 2*5+1 =11
jika i/3 mempunyai sisa p, maka
untuk input berikutnya bernilai 0 maka
2i/3 mempunyai sisa 2p mod 3
untuk p=0 maka
2p mod 3 = 0
untuk p=1 maka
2p mod 3 = 2
untuk p=2 maka
2p mod 3 = 1
jika i/3 mempunyai sisa p, maka
untuk input berikutnya bernilai 1 maka
(2i+1)/3 mempunyai sisa (2p+1) mod 3
untuk p=0 maka
(2p+1) mod 3 = 1
untuk p=1 maka
(2p+1) mod 3 = 0
untuk p=2 maka
(2p+1) mod 3 = 2
Sehingga
didapat mesin FSA sbb :
Contoh :
input 5 (1012) , state terakhir q2/2 , 5 mod 3 = 2
input 10 (10102) , state terakhir q1/1 , 10 mod 3 = 1
Mesin Mealy
M = (Q,S,d,S,D,l)
Q : himpunan state
S : himpunan simbol
input
d : fungsi transisi
S : state awal S ÎQ
D : himpunan output
l : fungsi output untuk setiap
transisi
Contoh mesin Mealy untuk mendeteksi ekspresi reguler
(0+1)*(00+11)
Jawab
M = (Q,S,d,S,D,l)
Q : q0,q1,q2
S : [0,1]
S : q0
D : [0,1,2]
l(q0,0) =T
l(q0,1) =T
l(q1,0) =Y
l(q1,1) =T
l(q2,0) =T
l(q2,1) =Y
Ekuivalensi mesin Moore dengan mesin Mealy
¨
Mesin Moore ke mesin Mealy
Jml state = jml state sebelum *
jml output
¨
Mesin Mealy ke mesin Moore
Menambah label output pada
transisi
Menghapus label output pada state
Contoh kasus
¨
Tentukan FSA dari rangkaian sirkuit berikut ini.
Asumsi bahwa terdapat waktu yang cukup untuk perambatan sinyal menuju kondisi
yang stabil.
¨
Kelereng dijatuhkan dari A atau B. Percabangan x1,x2 dan x3 menentukan
saluran mana yang akan dilewati kelereng (kiri / kanan). Ketika percabangan
dilewati, kelereng berikutnya akan melewati dengan saluran berbeda. Buatlah FSA
nya
Latihan :
buku Firrar bab 7
PR.
Buatlah mesin Mealy dan Moore untuk proses membaca input
(0+1)* :
¨
Jika input berakhir dengan 101, outputnya A
¨
Jika input berakhir dengan 110, outputnya A
¨
Jika yang lainnya , 8outputnya C
PERTEMUAN VIII
Tata Bahasa Bebas Konteks
Motivasi awal :
deskripsi bahasa alami
<kalimat> ® <subjek> <predikat>
<subjek> ® <kata benda>
<predikat> ® <kata kerja>
<kata benda> ® kucing
<kata kerja> ® berlari
<kata kerja> ® menyapu
Contoh kalimat yang dapat dihasilkan
kucing berlari
kucing menyapu (sintaks yes, semantik no)
Dalam tatabahasa bebas konteks
¨
Ruas kiri dari aturan produksi terdiri dari SATU simbol non terminal
¨
Ruas kanan dapat berupa string yang dibentuk dari simbol terminal dan
non terminal
Contoh
S ®aSb | e
Kalimat-kalimat
yang dibangkitkan dari aturan produksi itu adalah e,ab,aabb,aaabbb,... , anbn
Contoh
A ®0A0
A ®1A1
A®a
Kalimat-kalimat
yang dibangkitkan dari aturan produksi itu adalah a,01a10, 1001a1001 , 110a011 babR
Contoh
S ® aSb | SS |e
Bahasa
yang dihasilkan oleh tatabahasa dengan aturan produksi di atas adalah :
L = {w Î (a + b)* |na(w)
=nb(w) }
Leftmost dan Rightmost
Derivation
Suatu
penguraian /penurunan dikatakan leftmost
derivation bila setiap tahapan
penurunan variabel / non terminal terkiri yang diuraikan. Apabila setiap
tahapan penurunan variabel / non terminal paling kanan yang diuraikan disebut rightmost derivation
Contoh
1
G=({A,B,S}, {a,b},S,P} dengan aturan produksi P :
S ® AB
A® aaA | l
B®Bb | l
Menspesifikasikan
bahasa
L(G) = {a2nbm |
n³0 , m³0}
Leftmost
derivation untuk menghasilkan string aab
S Þ AB Þ aaAB Þ aaB Þ aaBb Þ aab
Righmost
derivation untuk menghasilkan string aab
S
Þ AB Þ ABb Þ aaABb ÞaaAb Þaab
Contoh
2
G=({A,B,S}, {a,b},S,P} dengan aturan produksi P :
S ® aAB
A® bBb
B® A | l
Leftmost
derivation untuk menghasilkan string abbbb
S Þ aAB Þ abBbB Þ abAbB Þ abbBbbB
Þ abbbbB Þ abbbb
Righmost
derivation untuk menghasilkan string aab
S Þ aAB Þ aA Þ abBb Þ abAb Þ abbBbb Þ abbbb
Pohon
urai
Untuk menampilkan penguraian, dapat dilakukan dengan
membentuk pohon urai (sayangnya, urutan penguraian tidak terlihat) .
Contoh
pohon urai pada contoh sebelumnya :
Parsing
dan Keanggotaan
Untuk
menentukan apakah string w berada di L(G), dengan cara secara sistematis
membangun semua kemungkinan penurunan, dan mencocokkan hasilnya apakah ada yang
sama dengan string w. (disebut
exhaustive search parsing)
contoh
menentukan apakah string ab berada pada bahasa yang dibentuk oleh grammar
dengan aturan produksi
S ® SS | aSb | bSa | l
Untuk
penguraian pertama
1. S Þ SS
2. S Þ aSb
3. S Þ bSa
4. S Þ l
Penguraian
nomor 3 dan 4 tidak perlu dilanjutkan. Penguraian 1 membentuk Penguraian 2 membentuk
1a.
S Þ SS Þ SSS 2a. S Þ aSb Þ aSSb
1b.
S Þ SS Þ aSbS 2b. S Þ aSb Þ aaSbb
1c.
S Þ SS Þ bSaS 2c. S Þ aSb Þ abSab
1d.
S Þ SS Þ S 2d.
S Þ aSb Þ ab
Ambiguitas
pada Tatabahasa dan Bahasa
Tatabahasa
bebas konteks G disebut ambigu jika terdapat beberapa w Î L(G) yang mempunyai paling sedikit dua buah
pohon penurunan
Contoh
pada tatabahasa dengan aturan produksi
S ® SS | aSb | l
string
aabb mempunyai 2 pohon penurunan :
Pumping Lemma untuk bahasa
bebas konteks
¨
Jika suatu rangkaian simbol /string yang cukup panjang yang merupakan
sebuah bahasa bebas konteks, maka kita dapat menemukan dua substring yang
jaraknya berdekatan yang jika dipompa, string baru yang diperoleh merupakan
bahasa bebas konteks juga.
¨
Secara formal, lemma diatas dinyatakan dengan
¨
syarat “ kedua lokasi berdekatan” dinyatakan dengan kondisi |vwx| £ n
¨
Jika salah satu v atau x diambil sebagai string kosong, maka lemma
diatas berubah menjadi lemma untuk bahasa reguler
Contoh tatabahasa dengan aturan produksi
S ®uAy
A ® vAx
A ® w
maka aturan derivasinya
S Þ uAy Þ uwy
S Þ uAy Þ uvAxy Þuvwxy
S Þ uAy Þ uvAxy Þ uvvAxxy Þuvvwxxy
sehingga untuk setiap i ³0 , uviwxiy Î L
Sifat sifat tertutup bahasa bebas konteks
¨
Gabungan
dua CFL merupakan CFL juga
Jika diketahui dua buah CFG G1=
(N1,T1,S1,P1) dan G2=(N2,T2,S2,P2)
yang menghasilkan bahasa L1 dan L2 , maka CFG L1 È L2
dapat dibentuk dengan cara :
1. menggabungkan
kedua himpunan dan menambahkan satu simbol variabel baru S
2. menggabungkan
kedua himpunan simbol terminal
3. menggabungkan
kedua himpunan aturan produksi dan menambahkan satu aturan produksi baru
S ® S1|S2
yang digunakan untuk memilih salah satu simbol awal S1 atau S2
dari simbol awal baru S
G3 = (N1ÈN2È{S},T1ÈT2
,S,P1ÈP2 È{S®S1|S2}}
¨
Penyambungan dua CFL merupakan CFL juga
Jika diketahui dua buah CFG G1=
(N1,T1,S1,P1) dan G2=(N2,T2,S2,P2)
yang menghasilkan bahasa L1 dan L2 , maka bahasa L1L2 dapat
dibentuk oleh :
G4 = (N1ÈN2È{S},T1ÈT2
,S,P1ÈP2 È{S®S1S2}}
¨
Klosure Kleene dari CFL adalah CFL juga.
Klosure Kleene dari tatabahasa
G=(N,T,S1,P) adalah
G5 = (N È {S}
, T , S , P È
{S ®
S1S | e
} )
Latihan
G(L1) = ( {S , A , B},
{a,b} , S , P ) dengan P :
S
®
AB | e
A
®
aB
B
®
Sb
G(L2) = ( {S , A , B},
{a,b} , S , P ) dengan P :
S
®
aaB
A
®
bBb | e
B
®
aA
Bagaimanakah :
a. CFG G(L1 È L2)
b. CFG G(L1L2)
c. CFG G(L1*)
¨
Bahasa bebas konteks tertutup terhadap
substitusi
Contoh
La = {0 n1n
| n ³1
} dan Lb = { wwR | w Î (0+2)* }
dihasilkan oleh tatabahasa Ga
dengan aturan produksi
Sa
®
0Sa1 | 01
serta tatabahasa G2
dengan aturan produksi
Sb ® 0Sb0 | 2Sb2 | e
Didefinisikan tatabahasa G dengan aturan produksi
S
®
aSbS | bSaS | e
jika f adalah substitusi f(a)= La
dan f(b) = Lb maka
f(L) adalah bahasa yang
dihasilkan oleh tatabahasa dengan aturan produksi
S
®
SaSSbS | SbSSaS | e
Sa
®
0Sa1 | 01
Sb ® 0Sb0 | 2Sb2 | e
Tatabahasa Bebas Konteks dan Bahasa Pemrograman
¨
Tatabahasa bebas konteks digunakan untuk
mendefinisikan sintaks bahasa pemrograman
¨
Menggunakan notasi BNF (Backus-Naur Form)
¨
variabel / non terminal : <...>
¨
terminal : tanpa tanda
¨
¬ diganti dengan ::=
¨
Contoh statemen if then else
< if_statement> ::= if
<expression>
<then_clause>
<else_clause>
PERTEMUAN IX
PENYEDERHANAAN
TATA BAHASA BEBAS KONTEKS
Tujuan
Melakukan pembatasan sehingga
tidak menghasilkan pohon penurunan yang memiliki kerumitan yang tidak perlu
atau aturan produksi yang tidak berarti.
Contoh 1:
S à AB | a
Aàa
¨
Aturan produksi S à AB tidak berarti
karena B tidak memiliki penurunan
Contoh 2 :
SàA
AàB
BàC
CàD
D à a | A
¨
Memiliki kelemahan terlalu panjang jalannya
padahal berujung pada S à a,
¨
produksi
D à
A juga menyebabkan kerumitan.
Cara Penyederhanaan:
- Penghilangan produksi useless ( tidak berguna )
- Penghilangan produksi unit
- Penghilangan produksi ε
Penghilangan Produksi Useless
Di sini produksi useless didefinisikan sebagai :
·
Produksi yang memuat symbol variabel yang tidak
memiliki penurunan yang akan menghasilkan terminal-terminal seluruhnya.
·
Produksi yang tidak akan pernah dicapai dengan
penurunan apapun dari simbol awal, sehingga produksi itu redundan ( berlebih )
Contoh :
S à aSa | Abd | Bde
A à Ada
Bà BBB | a
Maka
1)
Simbol variabel A tidak memiliki penurunan yang menuju
terminal, sehingga bisa dihilangkan
2)
Konsekuensi no (1), aturan produksi S à
Abd tidak memiliki penurunan
Penyederhanaan menjadi:
SàaSa | Bde
Bà BBB | a
Contoh :
Sà Aa | B
Aàab | D
Bà b | E
Cà bb
Eà aEa
Maka :
1)
Aturan produksi A à D, simbol variabel D
tidak memiliki penurunan.
2)
Aturan produksi C à bb, Penurunan dari
simbol S, dengan jalan manapun tidak akan pernah mencapai C
3)
Simbol variabel E tidak memiliki aturan produksi yang
menuju terminal
4)
Konsekuensi no (3) Aturan produksi B à
E, simbol variabel E tidak memiliki penurunan.
maka produksi yang useless:
A à D
C à bb
E à aEa
B à E
Penyederhanaannya menjadi:
S à Aa | B
A à ab
B à b
Contoh :
S à
aAb | cEB
A à dBE | eeC
B à ff
C à ae
D à h
Analisa :
1) Aturan
produksi S à
cEB, A à
dBE dapat dihilangkan ( E tidak memiliki penurunan)
2) Aturan
produksi D à
h, redundan
Sisa aturan produksi
S à aAb
A à eeC
B à ff
C à ae
Analisis lagi
B
à
ff juga redundan,
Hasil penyederhanaan menjadi:
S à aAb
A à eeC
C à ae
Contoh lain lagi :
S à aB
A à bcD | dAC
B à e | Ab
C à bCb | adF | ab
F à cFB
Analisis
1) Aturan
produksi A à
bcD, variabel D tidak memiliki penurunan
2) Konsekuensi no (1), simbol variabel A tidak
memiliki penurunan yang menuju terminal (tinggal A à dAC)
3) Konsekuensi
no (2), B à Ab tidak memiliki
penurunan
4) Simbol
variabel F tidak memiliki penurunan yang menuju terminal
5) Konsekuensi
no (4), C à
adF tidak memiliki penurunan
Setelah disederhanakan menjadi:
S à aB
B à e
C à bCb | ab
Contoh lain lagi :
S à aBD
B à cD | Ab
D à ef
A à Ed
F à dc
Analisa
1) Aturan
produksi A à
Ed, E tidak memiliki penurunan
2) Aturan
produksi F à
dc, redundan
Sisa aturan produksi:
S à aBD
B à cD | Ab
D à ef
Analisa lagi
B
à
Ab, A tidak memiliki penurunan.
Hasil penyederhanaan:
S à
aBD
B à
cD
D à
ef
Contoh lagi:
S à Abc | ab
A à AAA | ε
Aturan produksi setelah disederhanakan:
S à
Abc | ab
A à
AAA | ε
Ingat A à ε juga harus diperhitungkan
PRINSIP
Setiap kali melakukan penyederhanaan diperiksa lagi aturan
produksi yang tersisa, apakah semua produksi yang useless sudah hilang.
Penghilangan Produksi
Unit
¨
Produksi dimana ruas kiri dan kanan aturan
produksi hanya berupa satu simbol variabel, misalkan: A à B, C à
D.
¨
Keberadaannya membuat tata bahasa memiliki
kerumitan yang tak perlu.
¨
Penyederhanaan dilakukan dengan melakukan
penggantian aturan produksi unit.
Contoh:
S à Sb
S à C
C à D
C à ef
D à dd
Dilakukan penggantian berturutan
mulai dari aturan produksi yang paling dekat menuju ke penurunan
terminal-terminal (‘=>’ dibaca ‘menjadi’):
·
C à D => C à dd
·
S à C => S à dd | ef
Sehingga aturan produksi setelah penyederhanaan:
S à Sb
S à dd | ef
C à dd
C à ef
C à dd
Contoh lain:
S à A
S à Aa
A à B
B à C
B à b
C à D
C à ab
D à b
Penggantian yang dilakukan :
·
C à D => C à b
·
B à C => B à b | ab, karena B à
b sudah ada, maka cukup dituliskan B à ab
·
A à B => A à ab | b
·
S à A => ab | b
Sehingga aturan produksi setelah penyederhanaan:
S à ab | b
S à Aa
A à ab | b
B à ab
B à b
C à b
C à ab
D à b
Contoh lagi:
S à Cba | D
A à bbC
B à Sc | ddd
C à eAn | f | C
D à E | SABC
E à gh
Penggantian yang dilakukan:
·
D à E menjadi D à gh
·
C à C , kita hapus
·
S à D menjadi S à gh | SABC
Sehingga aturan produksi setelah penyederhanaan:
S à Cba | gh | SABC
A à bbC
B à Sc | ddd
C à eA | f
D à gh | SABC
E à gh
Penghilangan Produksi
ε
Produksi ε
adalah produksi dalam bentuk
α à
ε
atau bisa
dianggap sebagai produksi kosong ( empty ). Penghilangan produksi ε dilakukan
dengan melakukan penggantian produksi yang memuat variabel yang bisa menuju
produksi ε, atau biasa disebut nullable.
Prinsip
penggantiannya bisa dilihat kasus berikut:
S à bcAd
A à ε
A
nullable serta A à
ε satu-satunya produksi dari A, maka variabel A bisa ditiadakan, hasil
penyederhanaan tata bahasa bebas konteks menjadi:
S à
bcd
Tetapi bila kasusnya:
S à bcAd
A à bd | ε
A
nullable, tapi A à
ε bukan satu-satunya produksi dari A, maka hasil penyederhanaan:
S à bcAd | bcd
A à bd
Contoh lagi, terdapat tata bahasa bebas konteks:
S à Ab | Cd
A à d
C à ε
Variabel
yang nullable adalah variabel C. Karena
penurunan C à
ε merupakan penurunan satu-satunya dari C, maka kita ganti S à
Cd menjadi S à
d. Kemudian produksi C à ε kita hapus.
Setelah
penyederhanaan menjadi:
S à Ab | d
A à d
Contoh lain lagi:
S à dA | Bd
A à bc
A à ε
B à c
Variabel
yang nullable adalah variabel A. A à
ε bukan penurunan satu-satunya dari A ( terdapat A à bc ), maka kita ganti
S à
dA menjadi S à
dA | d.A à
ε kita hapus.
Setelah penyederhanaan :
S à dA | d | Bd
A à bc
B à c
Contoh tata bahasa bebas konteks:
S à AaCD
A à CD | AB
B à b | ε
C à d | ε
D à ε
Variabel
yang nullable adalah variabel B, C,
D. Kemudian dari A à
CD, maka variabel A juga nullable ( A
à
ε ). Karena D hanya memilki penurunan D à ε, maka kita
sederhanakan dulu:
·
S à AaCD => S à AaC
·
A à CD => A à C
·
D à ε kita hapus
Selanjutnya
kita lihat variabel B dan C memiliki penurunan ε, meskipun bukan satu-satunya
penurunan, maka dilakukan penggantian:
·
A à AB => A à AB | A | B
·
S à AaC => S à AaC | aC | Aa | a
·
B à ε dan C à ε kita hapus
Setelah penyederhanaan:
S à AaC | aC | Aa | a
A à C | AB | A | B
B à b
C à ε
Variabel
yang nullable adalah A, B, C. Dari S à
AB, maka S juga nullable. Kita
lakukan penggantian:
·
A à aCa => A à aa
·
B à bA => B à bA | b
·
B à BB => B à BB | B
·
A à abB => A à abB | ab
·
S à AB => S à AB | A | B | ε
·
C à ε, B à ε, A à ε dihapus
*Perhatikan untuk penggantian S à
AB kita tetap mempertahankan S à ε, karena S merupakan simbol awal. Ini merupakan
satu-satunya perkecualian produksi ε yang tidak dihapus, yaitu produksi ε yang
dihasilkan oleh simbol awal.
Hasil akhir dari penyederhanaan:
S à AB | A | B | ε
A à abB | ab | aa
B à bA | b | BB | B
Contoh tata bahasa bebas konteks:
S à aAb
A à aAb | ε
Hasil penyederhanaan:
S à aAb | ab
A à aAb | ab
Contoh tata bahasa bebas konteks:
S à ABaC
A à BC
B à b | ε
C à D | ε
D à d
Hasil
penyederhanaan:
S à ABaC | BaC | AaC | ABa
| aC | Aa | Ba | a
A à B | C | BC
B à b
C à D
D à d
Prakteknya
ketiga penyederhanaan tersebut dilakukan
bersama pada suatu tata bahasa bebas konteks, yang nantinya menyiapkan tata
bahasa bebas konteks tersebut untuk diubah kedalam suatu bentuk normal Chomsky.
Urutan penghapusan aturan
produksi :
1)
Hilangkan produksi ε
2)
Hilangkan produksi unit
3)
Hilangkan produksi useless
Contoh :
S à AA | C | bd
A à Bb | ε
B à AB | d
C à de
Hilangkan
produksi ε, sehingga menjadi:
S à A | AA | C | bd
A à Bb
B à B | AB | d
C à de
Selanjutnya
penghilangan produksi unit menjadi:
S à
Bb | AA | de | bd
A à
Bb
B à
AB | d
C à
de
Penghilangan
produksi unit bisa menghasilkan produksi useless.
Terakhir
dilakukan penghilangan produksi useless:
S à Bb | AA | de | bd
A à Bb
B à AB | d
Hasil
akhir aturan produksi tidak lagi memiliki produksi ε, produksi unit, maupun
produksi useless.
PERTEMUAN X
BENTUK NORMAL CHOMSKY
Pengertian Bentuk
Normal Chomsky
Bentuk normal Chomsky / Chomsky Normal Form (CNF) merupakan salah satu bentuk normal yang
sangat berguna untuk tata bahasa bebas konteks ( CFG ). Bentuk normal Chomsky dapat dibuat dari sebuah tata bahasa bebas
konteks yang telah mengalami penyederhanaan yaitu penghilangan produksi useless, unit, dan ε. Dengan kata lain,
suatu tata bahasa bebas konteks dapat dibuat menjadi bentuk normal Chomsky dengan syarat tata bahasa bebas kontesk
tersebut:
·
Tidak memiliki produksi useless
·
Tidak memiliki produksi unit
·
Tidak memiliki produksi ε
Aturan produksi dalam bentuk normal Chomsky ruas kanannya tepat
berupa sebuah terminal atau dua variabel. Misalkan:
A à
BC
A à
b
B à
a
C à
BA | d
Pembentukan Bentuk Normal Chomsky
Langkah-langkah
pembentukan bentuk normal Chomsky secara umum sebagai berikut:
·
Biarkan aturan produksi yang sudah dalam bentuk normal Chomsky
·
Lakukan penggantian aturan produksi yang ruas
kanannya memuat simbol terminal dan panjang ruas kanan > 1
·
Lakukan penggantian aturan produksi yang ruas
kanannya memuat > 2 simbol variabel
·
Penggantian-penggantian tersebut bisa dilakukan
berkali-kali sampai akhirnya semua aturan produksi dalam bentuk normal Chomsky
·
Selama dilakukan penggantian, kemungkinan kita
akan memperoleh aturan-aturan produksi baru, dan juga memunculkan simbol-simbol
variabel baru
Bisa dilihat tahapan-tahapan
tersebut pada gambar 10.1
Tahapan-tahapan pembentukan bentuk normal
Chomsky
Contoh,
tata bahasa bebas konteks ( kita anggap tata bahasa bebas konteks pada bab ini
sudah mengalami penyederhanaan ):
S à
bA | aB
A à
bAA | aS | a
B à
aBB | bS | b
Aturan produksi yang sudah dalam bentuk normal Chomsky:
A à
a
B à
b
Dilakukan
penggantian aturan produksi yang belum bentuk
normal Chomsky (‘=>’ bisa dibaca berubah menjadi):
S à bA => S à P1A
S à aB => S à P1B
A à bAA => S à P1AA =>
A à
P1P3
A à aS => A à P2S
B à aBB => B à P2BB =>
B à
P2P4
B à bS => B à P1S
Terbentuk aturan produksi dan simbol variabel baru:
P1 à b
P2 à a
P3 à AA
P4 à BB
Hasil akhir aturan produksi dalam brntuk normal Chomsky :
A à
a
B à
b
S à
P1A
S à
P2B
A à
P1P3
A à
P2S
B à
P2P4
B à
P1S
P1 à
b
P2 à
a
P3 à
AA
P4 à
BB
Contoh, tata bahasa bebas konteks:
S à
aB | CA
A à
a | bc
B à
BC | Ab
C à
aB | b
Aturan produksi yang sudah dalam bentuk normal Chomsky :
S à
CA
A à
a
B à
BC
C à
b
Penggantian
aturan produksi yang belum dalam bentuk
normal Chomsky:
S à aB => S à P1B
A à bc => S à P2P3
B à Ab => B à A P2
C à aB => C à P1B
Terbentuk aturan produksi dan simbol variabel baru:
P1 à a
P2 à b
P3 à c
Hasil akhir aturan produksi dalam bentuk normal Chomsky :
S à
CA
A à
a
B à
BC
C à
b
S à
P1B
S à
P2P3
B à
A P2
C à
P1B
P1 à
a
P2 à
b
P3 à
c
Contoh, tata bahasa bebas konteks :
S à
aAB | ch | CD
A à
dbE | eEC
B à
ff | DD
C à
ADB | aS
D à
i
E à
jD
Aturan produksi yang sudah dalam bentuk normal Chomsky :
S à
CD
B à
DD
D à i
Penggantian aturan produksi:
S à aAB => S à P1P2
S à ch => S à P3P4
A à dbE => A à P5P6
A à eEC => A à P8P9
B à ff => B à P10P10
C à ADB => C à AP11
C à aS => C à P1S
E à jD => E à P12D
Terbentuk aturan produksi baru:
P1 à a
P2 à AB
P3 à c
P4 à h
P5 à d
P6 à P7E
P7 à b
P8 à e
P9 à EC
P10 à f
P11 à DB
P12 à j
Hasil akhir dalam bentuk
normal Chomsky:
S à
CD
B à
DD
D à i
D à i
S à
P1P2
S à
P3P4
A à
P5P6
A à
P8P9
B à
P10P10
C à
AP11
C à
P1S
E à
P12D
P1 à
a
P2 à
AB
P3 à
c
P4 à
h
P5 à
d
P6 à
P7E
P7 à
b
P8 à
e
P9 à
EC
P10 à
f
P11 à
DB
P12 à
j
Algoritma CYK untuk Tata Bahasa Bebas Konteks
Algoritma
CYK merupakan algoritma parsing dan
keanggotaan ( membership) untuk tata
bahasa bebas konteks. Algortima ini diciptakan oleh J. Cocke, DH. Younger, dan
T. Kasami. Syarat untuk penggunaan algortima ini adalah tata bahasa harus
berada dalam bentuk normal Chomsky . Obyektif dari
algortima ini adalah untuk menunjukkan apakah suatu string dapat diperoleh dari
suatu tata bahasa.
Algoritma
CYK sebagai berikut:
begin
1) for i:= 1 to n do
2) Vi1 :=
{A| A à a aturan produksi
dimana simbol ke- i adalah a };
3) for j:= 2 to n do
4) for i:= 1 to (n-j+1) do
begin
5) Vij:=Ø;
6) for k:=1 to (j – 1) do
7) Vij:= Vij υ (
A | A à BC adalah suatu
produksi, dimana B di Vik dan C di Vi+k,j-k }
end
end
Penjelasan:
·
n =
panjang untai yang akan diperiksa, missal : untuk untai ‘ada’, n = | ada | =3
·
i akan menyatakan kolom ke-
·
j akan menyatakan baris ke-
·
tahapan no (1) dan (2) untuk mengisi table baris
pertama kolom 1 – n
·
no (3),
interasi dari baris ke- 2 sampai n
·
no (4), interasi untuk mengisi kolom 1 sampai ( n – baris + 1) pada suatu baris.
·
no (5) inisialisasi Vij dengan Ø
·
no (6)
dan no (7), interasi untuk memeriksa mana saja yang menjadi anggota Vij
Kita lihat contoh kasus, dimana
terdapat tata bahasa bebas konteks ( simbol awal S ):
S à AB | BC
A à BA | a
B à CC | b
C à AB | a
Periksalah
apakah untai ‘baaba’ termasuk kedalam bahasa tersebut
Pertama –
tama kita akan membuat tabel untuk Vij ( Vkolom,baris )
sebagai berikut :
|
b
|
a
|
a
|
b
|
a
|
||
|
|
|
i à
|
|
|
||
|
1
|
2
|
3
|
4
|
5
|
||
1
|
|
|
|
|
|
||
2
|
|
|
|
|
|
||
3
|
|
|
|
|
|
||
4
|
|
|
|
|
|
||
5
|
|
|
|
|
|
Tabel
diatas kita gunakan unruk mempermudah kita dalam menyelesaikan persoalan, i
akan menyatakan kolom, j akan
menyatakan baris.
Kita
ketahui n = 5. Dari Algoritma langkah
(1) dan (2) kita bisa mengisi baris pertama pada tabel, sebagai berikut:
·
Untuk V11, kita periksa variabel yang
bisa menurunkan ‘b’, dari B à b kita isi V11= {B}
·
Untuk V21, kita periksa variabel yang
bisa menurunkan ‘a’, dari A à a dan C à a kita isi V21{A,C}
·
Untuk V31, kita periksa varibel yang
bisa menurunkan ‘a’, dari A à a dan C à a kita isi V31={A,C}
·
Untuk V41, kita periksa variabel yang
bisa menurunkan ‘b’, dari B à b kita isi V41={B}
·
Untuk V51, kita periksa variabel yang
bisa menurunkan’a’, dari A à a dan C à A kita isi V51={A,C}
Dari hasil tersebut kita bisa tabel :
|
b
|
a
|
a
|
b
|
a
|
||
|
|
|
i à
|
|
|
||
|
1
|
2
|
3
|
4
|
5
|
||
1
|
B
|
A,C
|
A,C
|
B
|
A,C
|
||
2
|
|
|
|
|
|
||
3
|
|
|
|
|
|
||
4
|
|
|
|
|
|
||
5
|
|
|
|
|
|
Selanjutnya kita akan mengisi baris ke-2 sampai n sebagai berikut
Pada baris
ke -2 ( k =1 )
·
Untuk V12, periksa Vik- Vi+k, j-k,
berarti V11-V21,
yaitu B-A,C, variabel yang bisa
menurunkan BA atau BC adalah S dan A, maka V12 kita isi {S, A}
·
Untuk V22, periksa Vik
– Vi+k,
j-k,
berarti V21-V31,
yaitu A,C-A,C, variabel yang bisa menurunkan AA, AC, CA, atau CC adalah B maka V22
kita isi {B}
·
Untuk V32, periksa Vik-Vi+k,
j-k,
berarti V31-V41 yaitu A, C-B, variabel yang bisa menurunkan
AB atau CB adalah S dan C, maka V12 kita isi {S, C}
·
Untuk V42,
periksa Vik-Vi+k, j-k berarti V41-V51,
yaitu A,C-B, variabel yang bisa menurunkan AB atau CB adalah S dan C, maka V12
kita isi {S,A}
Dari hasil tersebut kita bisa
mengisi tabel:
|
b
|
a
|
a
|
b
|
a
|
||
|
|
|
i à
|
|
|
||
|
1
|
2
|
3
|
4
|
5
|
||
1
|
B
|
A,C
|
A,C
|
B
|
A,C
|
||
2
|
S,A
|
B
|
S,C
|
S,A
|
|
||
3
|
|
|
|
|
|
||
4
|
|
|
|
|
|
||
5
|
|
|
|
|
|
Pada
baris ke –3 (k = 1 sampai 2):
- Untuk V13, periksa Vik-Vi+k, j-k, berarti V11-V22 & V12-V31, yaitu B-B & S,A-A,C, variabel yang bisa menurunkan BB, SA,SC,AA, atau AC adalah tidak ada, maka V13 kita isi Æ
- Untuk V23, periksa Vik-Vi+k, j-k, berarti V21-V32 & V22-V41, yaitu A,C-S,C & B-B, variabel yang bisa menurunkan AS, AC, CS, CC, atau BB adalah B , maka V23 kita isi {B}
- Untuk V33, periksa Vik-Vi+k, j-k, berarti V31-V42 & V32-V51, yaitu A,C-S,A & S,C-A,C variabel yang bisa menurunkan AS, AA, CS, CA, SA, SC, CA, atau CC adalah B, maka V33 kita isi {B}
Dari hasil
tersebut kita bsa mengisi tabel:
|
b
|
a
|
a
|
b
|
a
|
||
|
|
|
i à
|
|
|
||
|
1
|
2
|
3
|
4
|
5
|
||
1
|
B
|
A,C
|
A,C
|
B
|
A,C
|
||
2
|
S,A
|
B
|
S,C
|
S,A
|
|
||
3
|
Æ
|
B
|
B
|
|
|
||
4
|
|
|
|
|
|
||
5
|
|
|
|
|
|
Pada baris ke –4 ( k = 1 sampai 3):
- Untuk V14, periksa Vik-Vi+k, j-k, berarti V11-V23 & V12-V32 & V13-V41, yaitu B-B & S,A-S,C & Æ-B, variabel yang bisa menurunkan BB, SS, SC, AS AC adalah tidak ada, maka V14 kita isi Æ
- Untuk V24, periksa Vik-Vi+k, j-k, berarti V21-V33 & V22-V42 & V23-V51, yaitu A,C-B & B-S,A & B-S,A & B-A,C, variabel yang bisa menurunkan AC, AB, BS, BA, BC adalah S, C, A, maka V24 kita isi {S,A,C}
Dari hasil
tersbut kita bisa mengisi tabel:
|
b
|
a
|
a
|
b
|
a
|
||
|
|
|
i à
|
|
|
||
|
1
|
2
|
3
|
4
|
5
|
||
1
|
B
|
A,C
|
A,C
|
B
|
A,C
|
||
2
|
S,A
|
B
|
S,C
|
S,A
|
|
||
3
|
Æ
|
B
|
B
|
|
|
||
4
|
Æ
|
S,A,C
|
|
|
|
||
5
|
|
|
|
|
|
Pada baris ke –5 ( k = 1
sampai 4 )
- Untuk V15, periksa Vik-Vi+k, j-k, berarti V11-V24 & V12-V33 & V13-V42 & V14-V51 yaitu B-S,A,C & S,A-B & Æ-S,A & Æ-A,C, variabel yang bisa menurunkan BA, BC, SA, SC, SB, atau AB adalah A,S,C maka V15 kita isi {S,A,C}
Dari hasil tersbut kita bisa
mengisi tabel:
|
b
|
a
|
a
|
b
|
a
|
||
|
|
|
i à
|
|
|
||
|
1
|
2
|
3
|
4
|
5
|
||
1
|
B
|
A,C
|
A,C
|
B
|
A,C
|
||
2
|
S,A
|
B
|
S,C
|
S,A
|
|
||
3
|
Æ
|
B
|
B
|
|
|
||
4
|
Æ
|
S,A,C
|
|
|
|
||
5
|
S,A,C
|
|
|
|
|
Perhatikan
, syarat suatu untai dapat diturunkan dari simbol awal, V1n memuat simbol awal.
Terlihat pada tabel, simbol awal S termuat di V15, maka untai
‘baaba’ dapat diturunkan oleh tata bahasa tersebut.
Kita bisa
mencoba-coba untuk membuat pohon penurunan dari untai ‘baaba’,
Kita lihat
untuk contoh lain, terdapat tata bahasa bebas konteks:
S à
AB | b
A à
BA | a
B à
AS | b
Periksalah
apakah untai ‘aaab’ termasuk ke dalam bahasa tersebut
Pertama-tama
kita akan membuat tabel untuk Vij ( Vkolom, baris) sebagai berikut:
|
a
|
a
|
a
|
b
|
||
|
|
|
i à
|
|
||
|
1
|
2
|
3
|
4
|
||
1
|
|
|
|
|
||
2
|
|
|
|
|||
3
|
|
|
|
|
||
4
|
|
|
|
|
Kita
ketahui n = 4. Dari algoritma langkah (1) dan(2) kita bisa mengisi baris
pertama pada tabel, sebagai berikut:
- Untuk V11, kita periksa variabel yang bisa menurunkan ‘a’, dari A à a kita isi V11 = {A}
- Untuk V21, kita periksa variabel yang bisa menurunkan ‘a’, dari A à a kita isi V21 = {A}
- Untuk V31, kita periksa variabel yang bisa menurunkan ‘a’, dari A à a kita isi V31 = {A}
- Untuk V41, kita periksa variabel yang bisa menurunkan ‘b’, dari B à b dan S à b kita isi V41 = {S,B}
Dari haisl tersebut kita bisa
mengisi tabel:
|
a
|
a
|
a
|
b
|
||
|
|
|
i à
|
|
||
|
1
|
2
|
3
|
4
|
||
1
|
A
|
A
|
A
|
S,B
|
||
2
|
|
|
|
|||
3
|
|
|
|
|
||
4
|
|
|
|
|
Selanjutnya
kita akan mengisi baris ke –2 sampai n sebagai berikut:
Pada baris
ke –2 (k = 1) :
- Untuk V12, periksa Vik-Vi+k, j-k, berarti V11-V21, yaitu A-A, variabel yang bisa menurunkan AA adalah tidak ada, maka V12 kita isi Æ
- Untuk V22, periksa Vik-Vi+k, j-k, berarti V21-V31 ,yaitu A-A, variabel yang bisa menurunkan AA adalah tidak ada, maka V22 kita isi Æ
- Untuk V32, periksa Vik-Vi+k, j-k, berarti V31-V41 ,yaitu A,S-B, variabel yang bisa menurunkan AS atau AB adalah S dan B, maka V32 kita isi {S,B}
Dari hasil tersebut kita bisa
mengisi tabel:
|
a
|
a
|
a
|
b
|
||
|
|
|
i à
|
|
||
|
1
|
2
|
3
|
4
|
||
1
|
A
|
A
|
A
|
S,B
|
||
2
|
Æ
|
Æ
|
S,B
|
|||
3
|
|
|
|
|
||
4
|
|
|
|
|
Pada baris
ke –3 (k = 1 sampai 2)
- Untuk V13, periksa Vik-Vi+k, j-k, berarti V11-V22 & V12-V31, yaitu A-Æ & Æ-A, variabel yang bisa menurunkannya adalah tidak ada, maka V13 kita isi Æ
- Untuk V23, periksa Vik-Vi+k, j-k, berarti V21-V32 & V22-V41, yaitu A-SB & Æ-SB, variabel yang bisa menurunkan AS atau AB adalah S dan B, maka V23 kita isi {S,B}
Dari hasil tersebut kita bisa
mengisi tabel:
|
a
|
a
|
a
|
b
|
||
|
|
|
i à
|
|
||
|
1
|
2
|
3
|
4
|
||
1
|
A
|
A
|
A
|
S,B
|
||
2
|
Æ
|
Æ
|
S,B
|
|||
3
|
Æ
|
S,B
|
|
|
||
4
|
|
|
|
|
Pada baris
ke –4 (k = 1 sampai 3):
- Untuk V14, periksa Vik-Vi+k, j-k, berarti V11-V23 & V12-V32 & V13-V41, yaitu A-SB & Æ-SB, variabel yang bisa menurunkan AS atau AB adalah S dan B, maka V14 kita isi {S,B}
Dari hasil
tersebut kita bisa mengisi tabel:
|
a
|
a
|
a
|
b
|
||
|
|
|
i à
|
|
||
|
1
|
2
|
3
|
4
|
||
1
|
A
|
A
|
A
|
S,B
|
||
2
|
Æ
|
Æ
|
S,B
|
|||
3
|
Æ
|
S,B
|
|
|
||
4
|
S,B
|
|
|
|
Terlihat
pada tabel, simbol awal S termuat di V14, maka untai ‘aaab’ dapat
diturunkan oleh tata bahasa tersebut.
|
PERTEMUAN XI
PENGHILANGAN REKURSIF KIRI
Aturan Produksi Rekursif
Aturan Produksi yang rekursif memilki ruas kanan
(hasil produksi) yang memuat simbol variabel pada ruas kiri. Sebuah aturan
produksi dalam bentuk:
A à
βA
merupakan aturan produksi yang
rekursif kanan
β=(VÈT)* atau kumpulan
simbol variabel dan terminal
Contoh
aturan produksi yang rekursif kanan:
S à
dS
B à
adB
Produksi
dalam bentuk:
A à
Aβ
Merupakan aturan produksi yang
rekursif kiri, contohnya:
S è
Sd
B à
Bad
Produksi
yang rekursif kanan menyebabkan pohon penurunan tumbuh ke kanan, sebaliknya
Produksi yang rekursif kiri menyebabkan pohon penurunan tumbuh ke kiri. Bisa
dilihat pohon penurunanpada gambar 11.1 dari tata bahasa bebas konteks dengan
aturan produksi:
S à
aAc
A à
Ab | ε
S
Gambar 11.1 Pohon
penurunan sebuah CFG yang rekursif kiri
Dalam
banyak penerapan tata bahasa, rekursif kiri tak diinginkan. Untuk menghindari
penurunan yang bisa mengakibatkan loop kita perlu menghilangkan sifat
rekursif kiri dari aturan produksi. Penghilangan rekursif kiri disini
memungkinkan suatu tata bahasa bebas konteks nantinya diubah ke dalam bentuk
normal Greibach.
Tahapan Penghilangan Rekursif
Kiri
Langkah-langkah
penghilangan rekursif kiri:
§
Pisahkan aturan produksi yang rekursif kiri dan
yang tidak, misal:
Aturan produksi yang rekursif kiri:
A à
Aα1 | Aα2 | Aα3 | ....... Aαn
Aturan produksi yang tidak rekursif kiri
(termasuk produksi ε):
A à
β1 | β2 | β3 | ........ βm
- Dari situ kita bisa tentukan α1, α2, .... αn, dan β1, β2, .... βm dari setiap aturan produksi yang memiliki simbol ruas kiri yang sama
§
Lakukan penggantian aturan produksi yang
rekursif kiri, menjadi sebagai berikut:
1)
A à β1Z | β2Z | .... βmZ
2)
Z à α1 |
α2 | α3 | .... αn
3)
Z à α1Z | α2Z | α3Z |
.... αnZ
Penggantian
diatas dilakukan untuk setiap aturan produksi dengan simbol ruas kiri yang
sama. Bisa muncul simbol variabel baru Z1, Z2 dan
seterusnya, sesuai banyaknya variabel yang menghasilkan produksi yang rekursif
kiri.
- Hasil akhir berupa aturan produksi pengganti ditambah dengan aturan produksi semula yang tidak rekursif kiri.
Tahapan-tahapan
tersebut bisa dilihat pada Gambar berikut
Gambar 11.2 Tahapan
penghilangan rekursif kiri
Contoh, tata bahasa bebas
konteks:
S à
Sab | aSc |dd | ff | Sbd
Pertama-tama
kita lakukan pemisahan aturan produksi
Aturan produksi yang rekursif
kiri:
S à
Sab | Sbd
Dari situ kita tentukan:
Untruk simbol ruas kiri S: α1=ab,
α2=bd
Aturan produksi yang tidak
rekursif kiri:
S à
aSc | dd | ff
Dari situ kita dapatkan:
Untuk simbol ruas kiri S: β1=aSc,
β2=dd, β3=ff
Kita
lakukan penggantian aturan produksi yang rekursif kiri:
Untuk yang memiliki simbol ruas
kiri S:
S à Sab | Sbd, digantikan
oleh:
i.
S à aScZ1 | dd Z1 | ffZ1
ii.
Z1 à ab | bd
iii.
Z1 à abZ1 | bd Z1
Hasil akhir
setelah penghilangan rekursif kiri adalah:
S à
aSc | dd | ff
S à
aScZ1 | dd Z1 | ffZ1
Z1 à
ab | bd
Z1 à
abZ1 | bd Z1
*Pada kasus diatas S adalah
satu-satunya simbol variabel yang menghasilkan produksi rekursif kiri.
Contoh
lain, terdapat tata bahasa bebas konteks:
S à
Sab | Sb | cA
A à
Aa | a | bd
Pertama-tama
kita lakukan pemisahan aturan produksi
Aturan produksi yang rekursif
kiri:
S à
Sab | Sb
A à
Aa
Dari situ kita tentukan:
Untuk simbol ruas kiri S: α1=
ab, α2 =b
Untuk simbol ruas kiri A: α1
= a
Aturan produksi yang tidak
rekursif kiri:
S à cA
A à a | bd
Dari situ kita dapatkan
Untuk simbol ruas kiri S: β1
= cA
Untuk simbol ruas kiri A: β1 = a, β2 =
bd
Kita
lakukan penggantian aturan produksi yang rekursif kiri:
Untuk yang memiliki simbol ruas
kiri S:
S à Sab | Sb, digantikan
oleh:
i.
S à cAZ1
ii.
Z1 à ab | b
iii.
Z1 à abZ1 | bZ1
Untuk yang
memiliki simbol ruas kiri A :
A à Aa, digantikan oleh:
i.
A à a Z2 | bdZ2
ii.
Z2 à a
iii.
Z2 à a Z2
Hasil akhir
setelah penghilangan rekursif kiri adalah:
S à
cA
A à
a | bd
S à
cAZ1
Z1 à
ab | b
Z1 à
abZ1 | bZ1
A à
a Z2 | bdZ2
Z2 à
a
Z2 à
a Z2
*Perhatikan bahwa penghilangan
rekursif kiri memunculkan simbol variabel baru, dan aturan produksi baru yang
rekursif kanan.
Contoh
lain, terdapat tata bahasa bebas konteks:
S à
Sa |aAc | c | ε
A à
Ab | ba
Pertama-tama
kita lakukan pemisahan aturan produksi
Aturan produksi yang rekursif
kiri:
S à
Sa
A à
Ab
Dari situ kita tentukan:
Untuk simbol ruas kiri S: α1
= a
Untuk simbol ruas kiri A: α1
= b
Aturan
produksi yang tidak rekursif kiri:
S à
aAc | c | ε
A à
ba
Dari situ kita dapatkan
untuk simbol ruas kiri S:β1
= aAc, β2= c, β3 = ε
untuk simbol ruas kiri A: β1
= ba
*Perhatikan produksi ε termasuk
produksi yang tidak rekursif kiri
Kita
lakukan penggantian aturan produksi yang rekursif kiri:
Untuk yang memilki simbol ruas
kiri S:
S à Sa, digantikan oleh:
i.
S à aAcZ1 | cZ1 | Z1
ii.
Z1 à a
iii.
Z1 à a Z1
Untuk yang memiliki simbol ruas
kiri A:
A à Ab, digantikan oleh:
i.
A à ba Z2
ii.
Z2 à b
iii.
Z2 à bZ2
Hasil akhir
setelah penghilangan rekursif kiri adalah:
S à
aAc | c | ε
S à
aAcZ1 | cZ1 | Z1
A à
ba
A à
ba Z2
Z1 à
a
Z1 à
a Z1
Z2 à
b
Z2 à
b Z2
PERTEMUAN
12
BENTUK
NORMAL GREIBACH
Pengerian
Bentuk Normal Greibach
Bentuk normal Greibach merupakan
bentuk normal yang memiliki banyak konsekuensi teoritis dan prkatis. Dalam bentuk
normal Greibach kita membatasi
posisi munculnya terminal-terminal dan variabel-variabel. Suatu tata bahasa
bebas konteks (CFG) dikatakan dalam bentuk normal Greibach / Greibach Normal
Form, selanjutnya kita sebut sebagai
GNF, jika setiap aturan produksinya ada dalam bentuk:
A à
aα
a:simbol
terminal (tunggal), a ε T
α:
rangkaian simbol-simbol variabel (V*)
Atau dengan kata lain, suatu tata bahasa
bebas konteks dalam bentuk normal Greibach bila hasil produksinya (ruas
kanan) diawali dengan satu simbol terminal, slanjutnya bisa diikuti oleh
rangkaian simbol variabel. Contoh tata bahasa bebas konteks dalam bentuk bentuk normal Greibach:
S à a | aAB
A à
aB
B à
cS
Untuk dapat diubah ke dalam bentuk
normaol Greibach, tata bahasa semula haru memenuhi syarat:
- Sudah dalam bentuk normal Chomsky
- Tidak bersifat rekursif kiri
- Tidak menghasilkan ε
Terdapat dua
cara pembentukan bentuk normal Greibach , yaitu melalui substitusi dan
perkalian matriks. Pada bagian berikutnya kita membahasa kedua cara tersebut.
12.2. Pembentukan Bentuk
Normal Greibach dengan Substitusi
Secara
umum langkah-langkah untuk mendapatkan bentuk normal Greibach :
1.
Tentukan urutan simbol-simbol variabel yang ada
dalam tata bahasa. Misalkan terdapat m variabel dengan urutan A1,
A2, ...., Am
2.
Berdasarkan urutan simbol yang ditetapkan pada langkah
(1) seluruh aturan produksi yang ruas kanannya diawali dengan simbol variabel
dapat dituliskan dalam bentuk
Ah à
Ai γ
dimana h <> i
(rekrusif kiri sudah dihilangkan), γ bisa berupa simbol-simbol variabel
- Jika h < i, aturan produksu ini sudah benar ( tidakperlu diubah)
- Jika h > i, aturan produksi belum benar. Lakukan substitusi berulang-ulang terhadap Ai (ganti Ai pada produksi ini dengan ruas kanan produksi dari variabel Ai ) sehingga suatu saat diperoleh produksi dalam bentuk
Ah à
Ap γ (dimana h £ p )
i)
Jika h = p , lakukan penghilangan
rekursif kiri
ii)
Jika h <
p, aturan produksi sudah benar
3.
Jika terjadi penghilangan rekursif kiri pada tahap
(2b), sejumlah simbol variabel baru yang muncul dari operasi ini dapat
disisipkan pada urutan variabelsemula dimana saja asalkan ditempatkan tidak
sebelum Ah (di kiri)
4.
Setelah langkah (2) & (3) dikerjakan maka aturan-aturan
produksi yang ruas kanannya dimulai simbol variabel sudah berada dalam urutan
yang benar
Ax à
Ay g
( di mana x < y )
Produksi-produksi
yang lain ada dalam bentuk:
Ax à
a g
( a = simbol terminal )
Bx à
g
( B2
= simbol variabel baru yang akan muncul sebagai akibat dari operasi
penghilangan rekursif kiri )
5.
Bentuk normal Greibach diperoleh dengan cara melakukan substitusi
mundur mulai dari variabel Am, lalu Am-1, Am-2,
..... Dengan cara ini aturan produksi dalam bentuk Ax à
Ay g
dapat diubah sehinga ruas kanannya dimulai dengan simbol terminal.
6.
Produksi dalam bentuk Bx à g juga
dapat diubah dengan cara substitusi seperti pada langkah (5)
Contoh (tata
bahasa bebas konteks sudah dalam bentuk normal Chomsky dan memenuhi
syarat untuk diubah ke bentuk normal Greibach), simbol awal adalah S:
S à CA
A à a | d
B à b
C à DD
D à AB
Kita
tentukan urutan simbol variabel, misalnya S, A, B, C, D
(S<A<B<C<D).
*Perhatikan urutan tersebut boleh
anda tentukan sendiri, buatlah urutan sedemikian sehingga memudahkan untuk
proses selanjutnya
Kita
periksa aturan produksi yang simbol pertama pada ruas kanan adalah simbol
variabel, apakah sudah memenuhi ketentuan urutan variabel:
§
S à CA ( sudah memenuhi aturan karena S<C)
§
C à DD (sudah memenuhi karena C<D)
§
D à AB (tidak memenuhi, karena D>A)
Yang belum
memenuhi urutan yang telah kita tentukan adalah: D à AB, karena ruas kiri
> simbol pertama pada ruas kanan. Maka kita lakukan sibstitusi pada simbol
variabel A, aturan produksi menjadi:
D à
aB | dB
Setelah semua
aturan produksi sudah memenuhi ketentuan urutan variabel, kita lakukan
substitusi mundur pada aturan produksi yang belum dalam bentuk normal
Greibach (‘=>’ dibaca ‘menjadi’):
§
C à DD => C à aBD | dBD
§
S à CA => S à aBDA | dBDA
*Perhatikan substitusi mundur
dimulai dari aturan produksi yang memiliki ruas kiri dengan urutan variabel
paling akhir ( kasus di atas:S<A<B<C<D, maka C lebih dulu
disubstitusikan daripada S )
Hasil
akhir aturan produksi yang sudah dalam bentuk normal Greibach :
S à aBDA | dBDA
A à a | d
B à b
C à aBD | dBD
D à aB | dB
*Perhatikan : setiap substitusi
kita lakukan pada simbol variabel pertamapada ruas kanan ( pada aturan produksi
yang belum bentuk normal Greibach tentunya ).
Prinsipnya:
- Biarkan aturan produksi yang sudah dalam bentuk normal Greibach
- Tentukan pengurutan simbol variabel, berdasarkan kondisi aturan produksi yang ada buatlah urutan sedemikian sehingga memudahkan untuk proses selanjutnya. Mulailah terlebih dahulu dari seimbol awal.
- Lakukan perubahan pada aturan produksi yang belum memenuhi ketentuan urutan tersebut dan bila perlu selama proses itu bisa dilakukan substitusi dan penghilangan rekursif kiri
- Lakukan substitusi mundur sedemikian rupa sehingga semua aturan produksi akan diawali dengan tepat sebuah simbol terminal. Proses substitusi mundur dimulai dari aturan produksi dengan urutan paling akhir.
- Lakukan substitusi mundur juga pada aturan produksi baru yang muncul sebagai hasil penghilangan rekursif kiri.
Contoh lain
(simbol awal A):
A à BC
B à CA | b
C à AB | a
Kita tentukan urutan simbol:
A,B,C ( A<B<C )
A à BC ( sudah memenuhi
karena A<B)
B à CA (sudah memenuhi
karena B<C)
C à AB (padahal C > A
sehingga harus diubah)
Pengubahan C à
AB:
C à AB => C à
BCB => C à
CACB | bCB
Untuk C à CACB lakukan
penghilangan rekursif kiri menjadi
§
C à bCBZ1 | aZ1
§
Z1 à ACB
§
Z1 à ACBZ1
Kita lihat
seluruh hasil produksi dari variabel C, sudah dalam bentuk normal Greibach:
C à bCBZ1 | aZ1
| bCB | a
Setelah
semua aturan produksi sudah memenuhi ketentuan urutan variabel, kita laukan
substitusi mundur:
B à CA => B à
bCBZ1A | aZ1A | bCBA | aA
A à BC => A à
bCBZ1AC | aZ1AC | bCBAC | aAC | bC
Selanjutnya
lakukan pula substitusi pada aturan produksi dengan variabel baru yang
terbentuk (pada contoh ini Z1):
§
Z1 à ACB => Z1
à
bCBZ1ACCB | aZ1ACCB | bCBACCB | aACCB | bCCB
§
Z1 à ACBZ1 =>
Z1 à
bCBZ1ACCBZ1 | aZ1ACCBZ1 | bCBACCBZ1
| aACCBZ1 | bCCBZ1
Hasil akhir
aturan produksi dalam bentuk bentuk normal Greibach:
A à bCBZ1AC |
aZ1AC | bCBAC | aAC | bC |
B à bCBZ1A | aZ1A
| bCBA | aA | B
C à bCBZ1 | aZ1
| bCB | a
Z1 à
bCBZ1ACCB | aZ1ACCB | bCBACCB | aACCB | bCCB
Z1 à
bCBZ1ACCBZ1 | aZ1ACCBZ1 | bCBACCBZ1
| aACCBZ1 | bCCBZ1
ada ebook nya gg gan ? http://guruinformatika.blogspot.com/
ReplyDelete