PENGERTIAN AUTOMATA
Teori otomata mempelajari tentang mekanisme komputer abstrak atau mesin abstrak. Jauh sebelum ada komputer, tahun 1930, Alan Turing mempelajari mesin abstrak yang punya kemampuan seperti komputer sekarang, dikenal dengan nama Mesin Turing. Tujuan Turing adalah menggambarkan secara jelas apa yang dapat dan yang tidak dapat dilakukan mesin komputing. Kemudian pada tahun 1940 an dan 1950-an, ditemukan mesin abstrak yang lebih sederhana, yaitu finite automata. Automata ini, asalnya diperuntukkan untuk membentuk fungsi kecerdasan, berubah secara drastis untuk keperluan lain yang sangat beragam. Tahun 1950-an juga Chomsky mempelajari tentang tata bahasa formal, yang sangat berguna untuk pengembangan compiler. Semua pengembangan teori ini secara langsung melahirkan ilmu-ilmu komputer yang sekarang ini. Beberapa konsepnya, seperti Finite Automata dan grammar, digunakan untuk perancangan dan pembuatan bermacam software penting, seperti Pascal dan C. Konsep lainnya, seperti Mesin Turing, membantu kita memahami apa yang dapat kita harapkan dari perangkat lunak kita.
DAN
OTOMATA
Ilmu komputer mempunyai dua komponen utama, pertama : model dan gagasan mengenai komputasi, dan kedua adalah teknik rekayasa untuk perancangan sistem komputasi, yang meliputi perangkat keras dan perangkat lunak. Teori Bahasa dan Otomata merupakan bagian dari komponen pertama. Finite State Automata dan ekspresi regular awalnya dikembangkan berdasarkan pemikiran jaringan syaraf tiruan (neural network) dan rangkaian switch (switching circuit). Finite State Automata sangat berguna dalam perancangan lexica l analyzer, yang merupakan bagian dari sebuah compiler. FSA dan ekspresi regular juga digunakan dalam perancangan text editor, pattern-matching, sejumlah pemrosesan teks, dan program file-searching serta sebagai konsep matematis untuk aplikasi lain. Mengapa mempelajari teori? Teori memberikan konsep dan prinsip yang menolong untuk memahami perilaku dari suatu disiplin ilmu. Bidang ilmu komputer meliputi topik yang sangat luas, dimana sebagian besar mempunyai prinsip yang umum. Untuk mempelajari prinsip dasar inilah diperlukan pemodelan secara abstrak dari komputer. Model ini memiliki fungsi-fungsi yang penting dan umum untuk dapat diterapkan pada perangkat keras maupun perangkat lunak. Beberapa gagasan yang diutarakan memiliki penerapan yang penting. Misalkan pada compiler.
KONSEP BAHASA
Simbol. Simbol merupakan elemen unik terkecil dari bahasa. Dalam sebuah bahasa terdapat sejumlah berhingga simbol-simbol. Abjad / Alfabet. Merupakan himpunan dari simbol-simbol yang digunakan dalam suatu bahasa. Biasanya dinotasikan dengan . Misalkan = {0,1}. String / word / kata / untai. Adalah barisan berhingga dari simbol-simbol dalam suatu alfabet. Misalkan : = {0,1} maka 01, 00, 111 merupakan string yang dibentuk berdasarkan alfabet . Dalam pembahasan, seringkali suatu untai/string dinyatakan dengan suatu variabel, yang biasanya berupa huruf kecil. Contoh : w = 01; x = aba, dst. Panjang String. Suatu string disusun dari sejumlah n simbol, dengan n 0. Banyaknya simbol yang menyusun sebuah string disebut panjang string, yang disimbolkan dengan | x|. contoh : x = aba , maka |x| = 3. Untai hampa. Sebuah string dengan panjang nol (n=0) disebut untai hampa dan dinotasikan dengan . Untai hampa () merupakan untai yang dibentuk berdasarkan abjad apa saja. Sehingga merupakan himpunan bagian dari sembarang himpunan. Bahasa. Bahasa merupakan himpunan string/kata dari alfabet bahasa itu. Misal untuk
- 1 = {0,1} maka L1 = {00,01,11,111} merupakan bahasa yang dibentuk berdasarkan abjad 1 . - 2 = {a,b} maka L2 = {a, ab, aab, aaab, } merupakan bahasa berdasarkan abjad 2 Misalkan suatu abjad dan w adalah untai yang dibentuk berdasarkan abjad . Jika terdapat L yang merupakan bahasa berdasar abjad dan jika w ada di dalam L, kita tuliskan w L, yang berarti w elemen dari L. Bahasa kosong. Merupakan bahasa yang tidak terdiri dari untai apapun. Dinotasikan dengan {} atau . Bahasa Universal. Adalah bahasa yang terdiri dari semua kata yang dapat dibentuk berdasarkan suatu abjad . Misalkan = {1} maka bahasa universal, dinotasikan *, adalah * = {, 1, 11, 111, 1111, }
OPERASI
PADA
STRING
Perangkaian (Concatenation). Jika w dan z adalah untai, perangkaian w dengan z merupakan untai yang diperoleh dengan merekatkan z ke w. Contoh : w = abang dan z = none maka wz atau w.z = abangnone. Panjang kata wz, |wz| = |w| + |z|=9. Sebarang kata jika dirangkai dengan , tidak akan merubah kata tersebut. w = w=w. Jadi merupakan identitas (identity) terhadap operasi perangkaian. Pangkat (Exponentiation). Misalkan w merupakan sebuah kata, untuk n bilangan asli, didefinisikan : ; n = 0 w n = n 1 ww ; n > 0 Misalkan , = {0,1} dan w = 110, diperoleh : w0 = w1 = w.w0 = 110. = 110 w2 = w.w1 = 110.110 = 110110 w3 = w.w2 = 110.110110 = 110110110
Sama Dengan (Equal). Jika w dan z adalah untai, dikatakan w sama dengan z jika keduanya terdiri dari simbol-simbol yang sama dan panjangnya sama, dinotasikan w = z. Awalan (prefix). Jika w dan x adalah kata, maka x merupakan awalan dari w jika untuk suatu untai y, berlaku w = xy. Contoh w = 121 dan x = 12, maka x merupakan awalan dari w, dimana dalam hal ini y = 1. Subuntai (substring). Sebuah untai w merupakan subuntai dari untai lain z jika terdapat untai-untai x dan y, sehingga berlaku z = xwy. Pembalikan (reversal / transpose). Transpose dari sebuah untai w, yaitu wR, didefinisikan sebagai :
Materi Kuliah Teori Bahasa Dan Otomata Author : Fajar Astuti H, S.Kom
w; w = wR = R y a; w = ay , a , y * Contoh : w = able, wR = (able)R = (ble)R a = (le)Rba = (e)R lba = ()Relba = . elba = elba
Jadi, jika misalkan A = {ab,a} berdasarkan abjad = {a,b} maka : A0 = { } A1 = A.A0 = {ab,a}{} = {ab,a} A2 = A.A1 = {ab,a}{ab,a} = {abab,aba,aab,aa} A3 = A.A2 = {ab,a}{abab,aba,aab,aa} = {ababab,ababa,abaab,abaa,aabab,aaba, aaab,aaa} Gabungan (Union). Jika A dan B adalah bahasa berdasarkan abjad maka gabungan dari A dan B, A B, terdiri dari semua kata yang muncul sekurang-kurangnya sekali di dalam A dan B. A B = {x | x A atau xB} Irisan (intersection). Irisan dari bahasa A dan B terdiri dari kata-kata yang muncul di A sekaligus di B. Dinotasikan sebagai : A B, A B = {x | x A dan x B} Selisih (Difference). Jika A dan B bahasa berdasarkan abjad , didefinisikan selisih antara bahasa-bahasa tersebut sebagai : A B = {x | x A dan x B}
Komplemen. Komplemen dari suatu bahasa A berdasarkan abjad didefinisikan sebagai : A = * A . Subbahasa (sublanguage). Jika A dan B bahasa berdasarkan abjad , dan jika semua untai di A juga merupakan untai di B maka A disebut subbahasa dari B. (A B) Equal. Dua bahasa A dan B dikatakan sama atau equal, A = B, jika kedua bahasa tersebut secara persis mempunyai untai-untai yang sama. Pembalikan (Transpose/Reversal). Pembalikan dari suatu bahasa A dapat didefinisikan sebagai : AR = { xR | x A } Contoh : A = { dog, bog} maka AR = {god, gob}. Kleene Closure / Star Closure. Jika A sebuah bahasa maka penutup kleene dari bahasa A didefinisikan sebagai : A* =
n =0
An .
Contoh : A = {a} maka A* = {,a,aa,aaa,} Positive Closure / Plus Closure. Jika A sebuah bahasa maka penutup kleene dari bahasa A didefinisikan sebagai : A+ =
n =1
An .
SOAL-SOAL
1. Misalkan A = {the,my} dan B = {horse,house,hose} merupakan bahasa-bahasa berdasarkan alfabet bahasa inggris. Carilah A.B, A.A 2. Misalkan A = {,a}. Carilah An untuk n = 0,1,2,3. Berapa banyaknya elemen An untuk sembarang n? 3. Misalkan A = {}. Carilah A*. 4. Misalkan A = {,ab} dan B = {cd}. Tentukan untai-untai dalam A*B. 5. Misalka A = {a,b} Carilah A* 6. Misalkan A = {}, B = {aa,ab,bb}, C = {,aa,ab} , dan D = {}. Carilah AB, AC, AD, BD dan AB, BC, CD, AD. Misalkan F sebarang bahasa carilah FD dan FD. 7. Misalkan bahasa S = {a,b} dan S* merupakan star closure dari bahasa S. Ada berapa kata di S* yang punya panjang 2? Panjang 3? Panjang n?
8. Misalkan bahasa S = {aa,b} dan S* merupakan star closure dari bahasa S. Ada berapa kata di S* yang punya panjang 4? Panjang 5? Panjang 6? (Jelaskan secara umum) 9. Misalkan bahasa S = {ab,ba} dan S* merupakan star closure dari bahasa S. Tuliskan semua kata di S* yang panjangnya kurang atau sama dengan 7. Mungkinkan ada kata dalam S* yang mempunyai substring aaa atau bbb? 10. Misalkan bahasa S = {a, ab,ba} dan S* merupakan star closure dari bahasa S. Apakah string abbba ada di S*? Tuliskan semua kata di S* yang panjangnya kurang atau sama dengan 6!
REFERENCE
[1] Hopcroft,John E; Motwani, Rajeev; Ullman, Jeffrey D.; Introduction to Automata Theory, Language and Computation; Second Edition; Addison-Wesley, 2001. [2] [3] Kelley, Dean; Otomata dan Bahasa Formal, Sebuah Pengantar; PT. Prenhallindo, 1999 Cohen, Daniel I.A; Introduction to Computer Theory; John Wiley & Sons, Inc, 1991.
BAB II
Materi Kuliah Teori Bahasa Dan Otomata Author : Fajar Astuti H, S.Kom
BAHASA REGULER
EKSPRESI REGULAR
Ekspresi Regular (Regular Expression), disingkat RE, didefinisikan sebagai berikut: (1) merupakan ekspresi regular untuk bahasa regular (2) merupakan ekspresi regular untuk bahasa regular {} (3) a merupakan ekspresi regular untuk bahasa singleton {a} (4) Jika r ekspresi regular untuk bahasa regular A dan s sebuah ekspresi regular untuk bahasa regular B, maka - r + s merupakan ekspresi regular untuk bahasa A B - rs merupakan ekspresi regular untuk bahasa A.B - r* merupakan ekspresi regular untuk bahasa A* Contoh 2: BAHASA REGULAR RE {} {a} a {a,b} a+b {ab} ab {a,aa} a+aa {a}* a* {a,b}* (a+b)* {,ab}* (+ab)*
Teorema Misalkan r,s dan t merupakan ekspresi regular berdasar abjad yang sama, maka berlaku : (1) r + s = s + r (2) r + = + r = r (3) r + r = r (4) (r + s) + t = r + (s + t) (5) r. = .r = r (6) r. = .r = (7) (rs)t = r(st) (8) r (s + t) = rs + rt dan (r + s) t = rt + st (9) r* = r** = r* r* = ( + r)* = r* (r + ) = (r + ) r* = + rr* (10) (r+s)* = (r* + s*)* = (r* s*)* = (r* s)* r* = r* (sr*)*
r (sr)* = (rs)* r (r* s)* = + (r + s)*s (rs*)* = + r(r+s)* s (r+)*(r+)+s = sr* rr* = r*r = r+
Seperti halnya dalam operasi aritmatik, untuk menghilangkan ambiguitas saat menggunakan notasi +, * dan concat, maka diperlukan suatu hirarki penulisan notasi. Hirarki tertinggi adalah *, kemudian concat, dan terakhir +. Tanda kurung berperan untuk mengelompokkan suatu subekspresi sebagai satu entitas ekspresi seperti halnya penulisan formula aritmatika. Misalkan : aa*(b+ba*)*b Berikut ini contoh penulisan ekspresi regular dari pendefinisian bahasa regular : Contoh 3: Jika = {a,b} dan L adalah bahasa berdasarkan abjad yang semua string didalamnya mempunyai panjang genap. (termasuk L, dimana panjangnya nol) Setiap string yang panjangnya genap merupakan hasil operasi concat dari string dengan panjang 2 atau dapat dituliskan : L = {aa + ab + ba + bb}* dimana dapat dinyatakan dengan ekspresi regular (aa+ab+ba+bb)* = (a(a+b) + b(a+b))* = ((a+b)(a+b))* Contoh 4: Jika = {a,b} dan L adalah bahasa berdasarkan abjad yang semua string didalamnya diakhiri dengan double a. Sembarang string berdasarkan abjad dapat dituliskan L1 = {a,b}*, dan kemudian diconcat dengan L2 = {aa} , sehingga menjadi L1.L2 = {a,b}*{aa}. Jika dituliskan dalam ekspresi regular : (a+b)*(aa)
a b
q 0
q 1
b
q 2
a , b
FINITE AUTOMATA
DAN
BAHASA REGULAR
RE=(ab)*
Dalam definisi suatu FA terdapat sejumlah status akhir. Apabila sebuah string masukan membawa status FA mulai dari status awal ke salah satu status akhir maka string tersebut diterima atau dikenali oleh FA tersebut. Dan sebuah bahasa L dikatakan diterima oleh sebuah FA jika semua string elemen bahasa L diterima oleh FA tersebut. Contoh 6 : Perhatikan FA pada contoh 5, string ab diterima oleh FA tersebut karena jika kita mulai dari status awal q0 membaca input a, kita akan menuju status q1. Kem udian dari q1 membaca b, menuju status q0. Disini pembacaan inpu selesai, dan berhenti di status akhir (final state). Sehingga ab diterima oleh FA tersebut. Contoh 7 : String aab tidak diterima oleh FA pada contoh 5. Mengapa? String apa saja yang diterima oleh FA tesebut? Bahasa apa yang diterima oleh FA tersebut?
a b
q0
q1
b
q2
(3)
a b
q0
q1
a
q2
(5)
= = {a,b} s = s = [q0] Qmula-mula = {[q0],[q1],[q2]} (q0,a) = {q1} (q0,a) = [q1] (q0,b) = {} (q0,b) = [ ] (state baru) (q1,a) = {} (q1,a) = [ ] (q1,b) = {q0,q2} (q1,b) = [q0, q2] (state baru) (q2,a) = {q0} (q2,a) = [q0] (q2,b) = {} (q2,b) = [ ] maka Q = {[q0],[q1],[q2], [],[q0, q2]} ( [] , a) = [] ( [] , b) = [] ( [q0, q2], a ) = (q0,a) (q2,a) = {q1} {q0} = {q0,q1} [q0,q1] ( [q0, q2], b ) = (q0,b) (q2,b) = {} {} = {} [] ( [q0, q1], a ) = (q0,a) (q1,a) = {q1} {} = {q1} [q1] ( [q0, q1], b ) = (q0,b) (q1,b) = {} {q0,q2} = {q0,q2}
Tidak ada state baru. (6) F = {[q0], [q0,q2],{qo,q1}} Maka kita mendapatkan sebuah DFA M = (Q,,s,F,) dengan Q = {[q0], [q1], [q2], [], [q0,q1], [q0,q2]}, = {a,b}, s = [q0], F = {[q0], [q0,q2], [qo,q1]}, dan : a [q1] [] [q0] [] [q0,q1] [q1] b [] [q0,q2] [] [] [] [q0,q2]
q 1
-CLOSER
Untuk sebuah state q Q dari NFA M=(Q,,s,F,) dengan transisi-, didefinisikan penutup- (-closer) dari q dimana : -cl(q) = {p | p Q dan p dapat dicapai dari q tanpa input apapun} sedangkan
cl (q
k =1
ik
Setiap state punya tran sisi- ke state itu sendiri, meskipun tidak digambarkan.
Eliminasi Transisi-
Jika NFA M=(Q,,s,F,) dengan transisi-, maka terdapat NFA lain M=(Q,,s,F,) tanpa transisi- yang mendefinisikan bahasa yang sama dimana :
dan
q 0
q 1
Dari gambar diatas kita dapat menentukan bahwa = {a,b}, F = {q1} dan d(q0,a) = {} -cl(q0) = {q0, q1} d(q0,b) = {q0} -cl(q1) = {q1} d(q1,a) = {q1} d(q1,b) = {} Maka : (1) (q0,a) -cl(q0) = {q0, q1} d({q0, q1},a) = d(q0,a) d(q1,a) = {} {q1} = {q1} -cl(q1) = {q1} maka (q0,a) = {q1}
(2) (q0,b) -cl(q0) = {q0, q1} d({q0, q1},b) = d(q0,b) d(q1,b) = {q0} {} = {q0} -cl(q0) = {q0, q1} maka (q0,b) = {q0, q1} (3) (q1,a) -cl(q1) = {q1} d(q1,a) = {q1} -cl(q1) = {q1} maka (q1,a) = {q1} (4) (q1,b) -cl(q1) = {q1} d(q1,b) = {} -cl({}) = {} maka (q1,a) = {} (5) F = {q1} {q0, q1} = {q0, q1}
Jadi NFA tanpa transisi- adalah :
b a, b
q0 q0 q1
(2) RE :
FA :
(3) RE : r FA :
r
(4) RE : r1 + r2
FA :
r 1
r 2
(5) RE : r1.r2
FA :
r 1 r 2
(6) RE : r1*
FA :
r 1
Jika diketahui RE sebuah bahasa regular L, maka kita dapat membentuk sebuah DFA yang menerima bahasa L dengan langkah-langkah : (1) Bentuklah NFA dengan transisi- dari RE tersebut (2) Eliminasi transisi- dari NFA di langkah (1) (3) Rubah NFA yang diperoleh di langkah (2) menjadi DFA Sebaliknya jika terdapat sebuah FA M = (Q,,s,F,) yang menerima bahasa L, maka kita dapat menentukan RE dari bahasa L dimana jika qj (qi,) dan maka terdapat persamaan :
Ai = A j | q j ( qi , )
dan A0 = L(M)
a b
A0 A1
Kita dapatkan persamaan : A0 = aA0 + bA1 ..(1) A1 = .(2) Persamaan (2) disubstitusikan ke persamaan (1) sehingga : A0 = aA0 + b. A0 = aA0 + b (3) Menurut lemma Arden, persamaan (3) ekivalen dengan : A0 = a*.b RE yang mendefinisikan bahasa L, didapatkan dari A0. Jadi RE : a*b
a b
1
b b b a
2 3
b a b
7 6
a b
Tabel perbandingan : a
(1,4) (2,5) (3,6) (2,7) (1,4) (3,6) (2,7) (3,6)
b
(2,5) (1,4) (3,6) (1,4)
MINIMIZE DFA
Misalkan M = (Q,,s,F,) adalah sebuah DFA dengan n buah state, maka terdapat DFA lain M= (Q,,s,F,) yang mempunyai < n buah state, yang menerima bahasa yang sama dengan M. Untuk mendapatkan M yang jumlah statenya lebih minimum digunakan algoritma sebagai berikut : (1) Buat sebuah partisi yang mula-mula berisi dua kelas/grup. Kelas pertama berisi state akhir dan kelas kedua beranggotakan state-state yang bukan state akhir. (2) Untuk setiap grup dalam dipecah (split) menjadi subgrup-subgrup dimana state s dan t akan terletak dalam grup yang sama jika dan hanya jika dari state s dan t dengan input a akan menuju ke state yang terletak di grup yang sama (3) Proses berhenti jika sudah tidak ada lagi grup yang dapat dipecah. Contoh 13 : Minimalkan jumlah state dari DFA berikut :
a a
A B
b a
C
b
D
b b
E
SOAL-SOAL
1.Tentukan RE dari bahasa regular berdasarkan = {a,b} berikut : (a) L = {abia | i 0 } (b) L = {(aa)i | i 0 }
(c) L = {(ab)ia | i 0 } (d) L = {aibj | i,j 0 } (e) Bahasa yang semua string didalamnya diakhiri dengan double b (f) Bahasa yang terdiri dari sebarang untai (g) Bahasa yang semua stringnya terdiri dari simbol b saja dengan panjang string ganjil. (h) Bahasa yang terdiri dari sebarang untai dengan panjang string genap. 2.Tentukan bahasa apa yang didefinisikan oleh RE berikut ini : (a) ab* (b) b*aa (c) (a+b)(a+b) (d) (a+b)*ab(a+b)*
GRAMMAR REGULAR
Definisi Adl sebuah grammar G = (N,T,S,P) dengan produksi P berbentuk :
NONTERMINAL
Atau
SEMIWORD
NONTERMINAL
WORD
Semiword : barisan terminal yang diakhiri dengan satu nonterminal (terminal)(terminal)(terminal)(Nonterminal) Word : barisan terminal (terminal)(terminal)(terminal) Contoh 2 : Grammar regular : A aaB | bbC B bB | b C cc | c Ekivalensi FA dengan grammar regular Misalkan M adalah sebuah FA dimana M = (,Q,s,F,) menerima bahasa L. Maka terdapat sebuah grammar G =(N,T,S,P) yang menerima bahasa L yang sama dimana : 1. N = Q 2. T = 3. S = s 4. P : Produksi (P) Transisi ( ) (X,a) = Y X aY F = {X} X Contoh 3: Diketahui FA = ({S,M,F},{a,b},S,{S,M},}
b a a,b b a
M aF | bS | F aF | bF Ekivalensi Grammar regular dengan FA Jika G = (N,T,S,P) adalah sebuah grammar regular, maka terdapat NFA M=(,Q,s,F,) yang menerima bahasa yang sama dengan bahasa yang didefinisikan oleh G. Dimana : 1. = T 2. Qmula-mula = N {f} ; f sebuah state baru. 3. s = S 4. F = {f} 5. : jika produksi berbentuk : A a1a2anB (semiword) maka ditambahkan (n-1) state baru : q1,q2,,qn-1 dengan transisi : (A,a1)=q1; (q1,a2)=q2; (qn-1,an) = B
a1 A q1 a2 an-1 qn-1 an B
jika produksi berbentuk : A a1a2an (word) maka ditambahkan (n-1) state baru : q1,q2,,qn-1 dengan transisi : (A,a1)=q1; (q1,a2)=q2; (qn-1,an) = f
a1 A q1 a2 an-1 qn-1 an f
Contoh 4 : Tentukan FA dari grammar G = ({S,A,B},{a,b},S,P) dengan P : S aB | bA | A abaS B babS FA yang ekivalen terdiri dari : = T = {a,b}; Qmula-mula = N {f} = {S,A,B,f} s=S F = {f} : Produksi S aB S bA S A abaS
B babS
(q3,a) = q4 (q4,b) = S
a A
a A a
A
Grammar Ambiguous Adalah grammar dengan lebih dari satu parse tree untuk input yang sama. Contoh 8 : Tentukan parse tree dari grammar : S SbS | ScS | a untuk input abaca. Derivasi untuk input abaca : S SbS abS abScS abacS abaca Atau S ScS SbScS abScS abacS abaca Sehingga parse tree untuk input tersebut : S S a b S a S S S a Menentukan CFG dari RE b c S a S a S c S a
RE
a a+b ab a* r1 + r2 r1r2 r1* Contoh 9 : Tentukan CFG dari RE : 1. RE : aa + bb CFG : S X | Y X aa
CFG
S Sa Sa|b S ab S aS | SX|Y S XY S XS |
atau S aS | bS |
Y X/b 3. Menambahkan produksi baru : Produksi yang mengandung nonterminal nullable S Xb S aYa XY YX Maka grammar tanpa produksi- adalah : S a | Xb | aYa | b | aa XY Y X/b
Produksi baru Sb S aa -
Produksi unit (Unit Production) Jika A dan B nonterminal, maka produksi unit adalah produksi yang berbentuk : Satu Nonterminal Satu Nonterminal (A B) Jika G grammar yang mengandung produksi unit maka terdapat grammar G yang tidak mengandung produksi unit dan menerima bahasa yang sama dengan G yang dapat diperoleh dengan aturan eliminasi (Elimination Rule) yaitu : 1. Jika A B sebuah produksi unit dan terdapat produksi yang dimulai dari B yaitu B s1 | s2 | Maka pada grammar ditambahkan produksi : A s1 | s2 | 2. Jika A,B Nonterminal dan terdapat proses derivasi yang dimulai dari A dan berakhir di B : A X1 X2 B Dimana X1,X2 : Nonterminal dan terdapat produksi yang dimulai B : B s1 | s2 | Maka ditambahkan produksi : A s1 | s2 | 3. Hapus semua produksi unit Contoh 10 : Tentukan grammar yang tidak mengandung produksi unit yang ekivalen dengan grammar berikut : S A | bb AB|b BS|a Jawab : 1. Menentukan produksi unit Produksi unit Bukan produksi unit SA S bb AB Ab BS Ba 2. Menambahkan produksi baru Produksi baru
SA S A B AB A B S BS B S A
Sb Sa Aa A bb B bb Bb
Jadi grammar yang tidak mengandung produksi unit : S bb | b | a A b | a | bb B a | bb | b S A | bb AB|b BS|a Jika G adalah sebuah CFG dapat dirubah menjadi CFG lain yang ekivalen dan mempunyai produksi berbentuk : Nonterminal rangkaian Nonterminal Atau Nonterminal satu terminal Dengan cara : Mengganti setiap terminal dengan nonterminal baru. Misalkan produksi berbentuk : N a1a2a3 Dimana a1,a2,a3 adalah terminal, maka setiap terminal diganti dengan nonterminal baru misal X1,X2,X3, N X1X2X3 Menambahkan produksi baru, dari tiap nonterminal baru ke terminal yang digantikan : X1 a1 ; X2 a2 ; X3 a3
Contoh 11 : Rubah CFG berikut menjadi bentuk Nonterminal rangkaian nonterminal ; atau Nonterminal satu terminal. S X | YaY | aSb | b X YY | b Y aY | aaX Jawab : Produksi yang dirubah Produksi pengganti Produksi baru S YaY S YAY Aa S aSb S ASB Aa;Bb Y aY Y AY Aa Y aaX Y AAX Aa Jadi CFG baru yang didapat adalah sbb :
S X | YAY | ASB | b X YY | b Y AY | AAX Aa Bb Jika G adalah sebuah CFG dapat dirubah menjadi CFG lain yang ekivalen dan mempunyai produksi berbentuk : Nonterminal dua Nonterminal Atau Nonterminal satu terminal Dengan cara : Mengganti rangkaian Nonterminal pada posisi kedua dan seterusnya dengan sebuah nonterminal baru. Misal terdapat produksi : N X1X2X3; dimana X1,X2,X3 : Nonterminal maka produksi tsb dirubah menjadi : N X1R1 Menambah produksi baru dari nonterminal baru ke rangkaian Nonterminal yang digantikan, yaitu R1 X2X3
Contoh 12 : Rubah CFG berikut menjadi bentuk Nonterminal dua Nonterminal atau Nonterminal satu terminal S YAY | ASB | b X YY | b Y AY | AAX Aa Bb Jawab : Produksi yang diganti Produksi pengganti Produksi baru S YAY S YR1 R1 AY S ASB S AR2 R2 SB Y AAX Y AR3 R3 AX Jadi CFG baru yang diperoleh : S YR1 | AR2 | b X YY | b Y AY | AR3 R1 AY R2 SB R3 AX A a Bb S YAY | ASB | b X YY | b Y AY | AAX
Aa Bb Definisi Chomsky Normal Form (CNF) Adalah sebuah CFG yang mempunyai produksi berbentuk : Satu Nonterminal Dua Nonterminal Atau Satu Nonterminal satu terminal
a.
b.
c.
Langkah langkah merubah CFG menjadi CNF 1. Jika terdapat produksi-, hilangkan dengan replacement rule 2. Jika terdapat produksi unit, hilangkan dengan elimination rule 3. Rubah menjadi bentuk : Satu Nonterminal rangkaian Nonterminal ;atau Satu Nonterminal satu terminal 4. Rubah menjadi bentuk : Satu Nonterminal Dua Nonterminal ;atau Satu Nonterminal satu terminal Contoh 13 : Tentukan CNF dari CFG berikut : S AB AB B aB | Bb | Langkah-langkahnya : 1. Menghapus produksi- Nonterminal nullable adalah A dan B karena: B A B Menghapus produksi- sehingga menjadi : S AB AB B aB | Bb Menambah produksi baru : Produksi yang mengandung Produksi baru nonterminal nullable S AB SB SA AB B aB Ba B Bb Bb Jadi CFG1 baru : S AB | B | A AB B aB | Bb | a | b 2. Menghapus produksi unit dari CFG1
a.
Menentukan produksi unit Produksi Unit SA SB AB Menambah produksi baru : S A B atau SB AB Jadi CFG2 baru : S AB | aB | Bb | a | b A aB | Bb | a | b B aB | Bb | a | b
b.
3. Merubah CFG2 menjadi bentuk rangkaian Nonterminal Produksi yang diganti Produksi pengganti Produksi baru S aB S XB Xa S Bb S BY Yb A aB A XB Xa A Bb A BY Yb B aB B XB Xa B Bb B BY Yb Jadi CNF yang didapat : S AB | XB | BY | a | b A XB | BY | a | b B XB | BY | a | b X->a Y->b
REJECT
Contoh 14 :
START
PUSH a
READ 1
b b b, POP1 a
READ 2
a REJECT REJECT
Input Tape aaabbb aaabbb aabbb aabbb abbb abbb bbb bbb bb bb b b
Ekivalensi PDA dan FA Jika diketahui sebuah FA M = (,Q,s,F,) maka terdapat sebuah PDA tanpa stack yang menerima bahasa yang sama Contoh 15: Tentukan PDA dari FA berikut : b B a a A PDA :
START
A A
Read A
Read B
ACCEPT
b b a
Nondeterministik PDA Adalah suatu PDA dimana pada state percabangan terdapat transisi keluar dengan input yang sama ke state yang berbeda. Ekivalensi CFG dan PDA Jika L adalah bahasa yang didefinisikan oleh sebuah CFG, maka ada PDA yang menerima bahasa L tersebut. Adapun cara merubah CFG menjadi PDA sebagai berikut : 1. CFG dirubah ke bentuk CNF 2. Jika X1 sebuah start simbol maka :
START
PUSH X1
POP
PUSH Xj
POP
B AB | a | b a
START PDA : REA D
a
REA D
b
REA D
A
PUSH S
B
POP
B B
PUSH B
REA D
ACCEPT
S
PUSH B
A
PUSH B
PUSH A
PUSH B
PUSH A
PUSH a
REA D
POP
ACCEPT
b
PUSH b
- PDA2 :
START
REA D
ACCEPT
PUSH a
REA D
POP
ACCEPT
b
PUSH b
Jika L1 dan L2 adalah CFL maka L1L2 juga sebuah CFL Dengan grammar Jika G1 sebuah CFG yang mendefinisikan L1 dan G2 adalah CFG yang mendefinisikan bahasa L2, maka terdapat CFG yang mendefinisikan bahasa L1L2 dimana : S S1S2 G1 (dengan subscript 1 di setiap nonterminal) G2 (dengan subscript 2 di setiap nonterminal) Contoh 19: - L1 dinyatakan dengan CFG1 sbb : S aSa | bSb | a | b | - L2 dinyatakan dengan CFG2 sbb : S aSb | - maka L1L2 dinyatakan dengan CFG sbb : S S1S2 S1 aS1a | bS1b | a | b |
S2 aS2b | Dengan PDA Jika PDA1 menerima bahasa L1 dan PDA2 menerima bahasa L2 maka terdapat sebuah PDA yang menerima bahasa L1L2 dimana : PDA1 diakhiri dengan : PDA2 diakhiri dengan:
ACCEPT START
Contoh 20 : - PDA1 :
START
REA D
ACCEPT
- PDA2 :
START
a
PUSH a
REA D
a
POP
a
ACCEPT
b
PUSH b
PUSH a
REA D
POP
ACCEPT
PUSH b
Jika L1 adalah CFL maka L1* juga sebuah CFL Dengan grammar Jika G1 sebuah CFG yang mendefinisikan L1, maka terdapat CFG yang mendefinisikan bahasa L1* dimana : S S1S G1 (dengan subscript 1 di setiap nonterminal) Contoh 21: - L1 dinyatakan dengan CFG1 sbb : S aSa | bSb | a | b | - maka L1* dinyatakan dengan CFG sbb : S S1S S1 aS1a | bS1b | a | b |
(b,b,R) 2 3
(,,R)
HALT 4
(a,a,R) (b,b,R) Cara kerja mesin turing diatas menerima kata aba State Tape START 1 aba 2 aba 3 aba 3 aba HALT 4 aba
(b,b,R)
Soal soal
1. Dari CFG berikut : S aS | bb Tunjukkan bahwa CFG tersebut mendefinisikan bahasa a*bb 2. Dari CFG berikut : S XYX X aX | bX | Y bbb Tunjukkan bahwa CFG tersebut mendefinisikan bahasa (a+b)*bbb(a+b)* 3. Dari CFG berikut : S aX X aX | bX | Tentukan bahasa apa yang didefinisikan CFG diatas ? 4. Dari CFG berikut : S XaXaX X aX | bX | Tentukan bahasa apa yang didefinisikan CFG diatas ? 5. Tentukan CFG untuk tiap-tiap bahasa berikut : (i) ab* (ii) a*b* (iii) (baa + abb)* 6. Gambarkan parse tree untuk masing-masing CFG berikut : CFG 1 : S aSb | ab CFG 2 : S aS | bS | a CFG 3 : S aS | aSb | X X aXa | a CFG 4 : S aAS | a A SbA | SS | ba
CFG 5 : S aB | bA A a | aS | bAA B b | bS | aBB Untuk input : ab, aaaa, aabb, abaa, abba, baaa, abab, bbaa, baab. 7. Tunjukkan bahwa CFG berikut ambigious dengan menemukan sebuah input yang mempunyai dua parse tree yang berbeda. (i) S SaSaS | b (ii) S aSb | S b | Sa | a (iii) S aaS | aaaS | a (iv) S aS | aSb | X X Xa | a 8. Tentukan CFG untuk bahasa regular berikut ini untuk = {a,b}: (i) bahasa yang didefinisikan dengan RE : (aaa + b)* (ii) bahasa yang didefinisikan dengan RE : (a+b)*(bbb+aaa)(a+b)* (iii) bahasa yang semua katanya diakhiri dengan b. (iv) bahasa yang semua katanya punya panjang kata ganjil. (v) Bahasa yang semua katanya terdiri dari a saja dengan panjang ganjil atau b saja dengan panjang genap. 9. Tentukan RE dan FA dari bahasa yang didefinisikan oleh CFG berikut : (i) S aX | bS | a | b X aX | a (ii) S bS | aX | b X bX | aS | a (iii) S aaS | abS | baS | bbS | (iv) S aB | bA | A aS B bS (v) S aB | bA A aB | a B bA | b (vi) S aS | bX | a X aX | bY | a Y aY | a (vii) S aS | bX | a X aX | bY | bZ | a Y aY | a Z aZ | bW W aW | a (viii) S bS | aX X bS | aY Y aY | bY | a | b 10. Untuk tiap-tiap CFG berikut tentukan CFG lain yang tidak mengandung produksi hampa. (-production) (i) S aX | bX Xa|b| (ii) S aX | bS | a | b
X aX | a | S aS | bX X aX | (iv) S XaX | bX X XaX | XbX | 11. Untuk tiap-tiap CFG berikut tentukan CFG lain yang tidak mengandung produksi unit (i) S aX | Yb XS Y bY | b (ii) S AA A B | BB B abB | b | bb (iii) S AB AB B aB | Bb | 12. Rubah CFG berikut ke dalam bentuk CNF (i) S SS | a (ii) S aSa | Ssa | a (iii) S aXX X aS | bS | a (iv) EE+E EE*E E (E) E7 (v) S ABABAB Aa| Bb| (vi) S SaS | SaSbS | SbSaS | (vii) S AS | SB A BS | SA | a B SS | b (viii) S X XY YZ Z aa (ix) S SS | A A SS | AS | a 13. Tentukan leftmost derivation untuk kata abba dari grammar berikut : S AA A aB B bB | 14. Tentukan leftmost derivation untuk kata abbabaabbbabbab dari CFG : S SSS | aXb X ba | bba | abb 15. Rubah FA berikut menjadi PDA : (i) a (iii)
Materi Kuliah Teori Bahasa Dan Otomata Author : Fajar Astuti H, S.Kom
a b b a b b
a (ii) b a a b b b a a
16. Dari PDA berikut ini periksalah apakah input string berikut diterima oleh PDA tersebut : (i) abb (ii) abab (iii) aabb (iv) aabbbb
START
ACCEPT
READ 1
a
PUSH a
b
REJECT
READ 2
REJECT
b
REJECT START
READ 3
a,
REJECT
ACCEPT
a,b
READ 1
b
READ 4
PUSH a
b b,
POP
POP
ACCEPT
READ 2
REJECT
a
READ 3
POP2
a b
a,b
Tentukan apakah kata-kata berikut diterima oleh PDA tersebut : (i) aaabbb (ii) aaabab (iii) aaabaa (iv) aaaabb 18. Rancanglah sebuah PDA yang menerima bahasa : (i) L = {anb2n | n 1} (ii) L = {a2nbn | n 1} (iii) L = {an+1bn | n 1} (iv) L = {anbn+1 | n 1} 19. Tentukan PDA yang menerima bahasa yang sama dengan CFG berikut : (i) S aSbb | abb (ii) S SS | a | b (iii) S XaaX X aX | bX | (iv) S aS | aSbS | a (v) S XY X aX | bX | a Y Ya | Yb | a (vi) S Xa | Yb X Sb | b Y Sa | a 20. Tentukan CFG yang mendefinisikan bahasa-bahasa berikut untuk = {a,b} : (i) bahasa yang terdiri dari semua kata yang dimulai dengan a atau berbentuk anbn untuk n 1 (ii) bahasa yang terdiri dari semua kata yang dimulai dengan b atau berbentuk anbn untuk n 1 (iii) bahasa yang semua katanya berbentuk anbnambm dimana n,m 1 (iv) bahasa yang semua katanya berbentuk axbyaz dimana n,m 1 dan x+z =y (v) bahasa yang semua katanya berbentuk anb2namb2m dimana n,m 1 21. (i) Tentukan CFG untuk bahasa
L = a(bb)* (ii) Tentukan CFG untuk bahasa L* 22. Dari TM berikut ini :
(a,a,L) (b,b,L) 7 (#,#,R) (b,#,R) (a,a,R),(b,b,R) (a,a,L),(b,b,L) 6 (b,#,L),(a,#,L) 5 (,,L) (#,#,L)
2
START1
(a,a,R) (b,b,R)
(a,a,R) (b,b,R)
Tentukan apakah input string berikut diterima oleh TM tersebut : (i) aaa (iii) baaba aba (iv) ababb
1. Tentukan CFG dari a*bb 2. Tentukan CFG dari (a+b)*bbb(a+b)* 3. Hilangkan produksi dibawah ini S -> aB/A/aAbB B -> aSb/bA/ A -> B/aS/bAaB 4. Tentukan RG dari FA dibawah ini
a a
A B
b a
C
b
D
b b
E