Penyederhanaan CFG (edisi 1) 1/8 Lecture Notes Teori Bahasa dan Automata Penyederhanaan Context Free Grammar Thompson Susabda Ngoen Pendahuluan Context Free Grammar (CFG) terdiri atas sejumlah production yang berbentuk A α dengan α berupa sejumlah simbol terminal dan non-terminal. Selain contex-free grammar terdapat jenis grammar lain yang disebut context-sensitive grammar (CSG). Perbedaannya dengan CFG adalah pada bentuk production. Bagian head production (simbol di kiri tanda panah) CFG selalu berupa satu simbol non terminal. Bagian head production CSG boleh terdiri atas sejumlah simbol. Production berikut milik sebuah CFG 1. P 0P0 2. P 1P1 3. P 0 4. P 1 5. P ε Derivasi yang dapat dibentuk diantaranya P 1P1 10P01 101P101 101101 sentential form 1P1 diturunkan dari sentential form P berdasarkan production 2. sentential form 10P01 diturunkan dari sentential form 1P1 berdasarkan production 1. Production berikut milik sebuah CSG 1. P 0P0 2. 0P 01P1 3. P 0 4. P 1 5. P ε Derivasi yang dapat dibentuk diantaranya P 0P0 01P10 01110 Production nomor 2, 0P 01P1, menyatakan simbol P boleh diderivasi dengan 1P1 hanya jika P berada di dalam konteks tertentu yaitu di sebelah kiri P terdapat simbol 0. Jadi P tidak free diderivasi menjadi 1P1, maksudnya tidak bisa membentuk derivasi P 1P1 11P11 1111 Sepaham dengan namanya, production pada CFG mempunyai susunan body (simbolsimbol di kanan tanda panah) yang bebas, tidak ada ketentuan tentang jenis dan jumlah simbol pembentuk body suatu production. Terlalu bebasnya bentuk production CFG akan merepotkan implementasi. Eliminasi Useless Production Apakah semua production suatu CFG memang berguna (usefull)? Simbol X pada grammar G = (V,T, P, S) disebut berguna jika terdapat derivasi S αxβ w dengan w terdiri atas simbol terminal. Dua persyaratan harus dipenuhi X untuk dianggap berguna: 1. generating, yaitu X w maksudnya X dapat menghasilkan minimum satu buah string 2. reachable, yaitu S αxβ Maksudnya dimulai dari start symbol harus bisa dihasilkan derivasi yang mengandung X
Penyederhanaan CFG (edisi 1) 2/8 Apakah production berikut usefull? 1. S asa 2. S Abd 3. S Bde 4. A Ada 5. B BBB 6. B a Uji generating dengan menggunakan production 6 diperoleh B a, artinya B generating dengan menggunakan production 3 diperoleh S Bde pada derivasi berikut kita akan menggantikan simbol B karena B generating maka S generating dengan menggunakan production 4 diperoleh A Ada Adada jika derivasi ini diteruskan maka tidak akan menghasilkan string karena simbol A tidak bisa diganti dengan simbol terminal, A tidak generating, Production yang mengandung A dibagian head atau body dibuang, diperoleh 1. S asa 3. S Bde 5. B BBB 6. B a Uji reachable S Bde artinya B reachable dari S 1. S asa 2. S Bde 3. B BBB 4. B a Apakah production berikut usefull? 1. S Aa 2. S B 3. A ab 4. A D 5. B b 6. B E 7. C bb 8. E aea Uji generating dengan menggunakan production 3 diperoleh A ab, artinya A generating dengan menggunakan production 5 diperoleh B b, artinya B generating dengan menggunakan production 7 diperoleh C bb, artinya C generating dengan menggunakan production 2 diperoleh S B, karena B generating maka S juga generating tidak tedapat production dengan D sebagai head, D tidak generating dengan menggunakan production 8 diperoleh E aea aaeaa jika derivasi ini diteruskan maka tidak akan menghasilkan string karena simbol E tidak bisa diganti dengan simbol terminal, E tidak generating, 1. S Aa 2. S B 3. A ab 5. B b 7. C bb
Penyederhanaan CFG (edisi 1) 3/8 Uji reachable S Aa A reachable dari S S B B reachable dari S Tidak terdapat derivasi S αcβ sehingga C tidak reachable dari S Dengan demikian production yang usefull adalah 1. S Aa 2. S B 3. A ab 4. B b Eliminasi ε-production Di dalam CFG mungkin terdapat ε-production, production berbentuk A ε. Production ini bermanfaat untuk membentuk empty string atau untuk mengakhiri suatu pengulangan. Production di bawah ini 1. P 0P0 2. P 1P1 3. P 0 4. P 1 5. P ε menggunakan P ε untuk membentuk empty string (P ε) dan mengakhiri pengulangan pada P 0P0 00. Jika sebuah language L mempunyai grammar CFG maka L {ε} mempunyai CFG yang tidak mengandung ε-production. Menghilang ε-production pada CFG diawali dengan mendeteksi variabel yang nullable. Sebuah simbol non terminal atau variabel A disebut nullable jika A ε. Apabila A muncul pada body production misalnya B CAD maka production ini diubah menjadi dua versi, satu dengan A dan yang lain tanpa A. Hilangkan ε-production di bawah ini 1. S aab 2. A aab 3. A ε Contoh string yang dihasilkan dari production di atas: 1) S aab ab production 1, 3 2) S aab aaabb aabb production 1, 2, 3 3) S aab aaabb aaaabbb aaabbb production 1, 2, 2, 3 Dengan menggunakan production 3 diperoleh A ε, artinya A nullable Apakah S nullable? S aab ab, artinya S tidak nullable Pada production S aab terdapat sebuah simbol nullable yaitu A, Bentuk dua production: S aab S ab Pada production A aab terdapat sebuah simbol nullable yaitu A, Bentuk dua production: A aab A ab
Penyederhanaan CFG (edisi 1) 4/8 1. S aab 2. S ab 3. A aab 4. A ab Contoh string yang dihasilkan dari keempat production tersebut: 1) S ab production 2 2) S aab aabb production 1, 4 3) S aab aaabb aaabbb production 1, 3, 4 Hilangkan ε-production di bawah ini 1. S ABaC 2. A BC 3. B b ε 4. C D ε 5. D d Contoh string yang dihasilkan dari production di atas: 1) S ABaC BCBaC CBaC BaC ac a production 1, 2, 3b, 4b, 3b, 4b 2) S ABaC BCBaC bcbac production 1, 2, 3a bdbac bdbac bdac bda production 4a, 5, 3b, 4b Dengan menggunakan production 3 diperoleh B ε, artinya B nullable Dengan menggunakan production 4 diperoleh C ε, artinya C nullable Dengan menggunakan production 2 diperoleh A BC Karena B dan C nullable maka A juga nullable D dan S tidak nullable Production S ABaC mengandung 3 simbol nullable maka akan terbentuk 2 3 production: S ABaC BaC AaC ABa ac Ba Aa a Production A BC mengandung 2 simbol nullable, akan terbentuk 2 2 production: A BC B C Salah lagi mana? A ε, tidak digunakan 1. S ABaC 2. S BaC 3. S AaC 4. S ABa 5. S ac 6. S Ba 7. S Aa 8. S a 9. A BC 10. A B 11. A C 12. B b 13. C D 14. D d Contoh string yang dihasilkan keempat production tersebut: 1) S a production 8 2) S Aa BCa bca bda bda production 7, 9, 12, 13, 14
Penyederhanaan CFG (edisi 1) 5/8 Eliminasi unit Production Production berikut menghasilkan expression bahasa pemrograman 1. E T E + T 2. T F T * F 3. F I (E) 4. I a b String b * (a + b) diperoleh dari derivasi: E T T * F F * F I * F b * F b * (E) b * (E + T) b * (T + T) b * (F + T) b * (I + T) b * (a + T) b * (a + F) b * (a + I) b * (a + b) Derivasinya cukup panjang dan parse tree-nya cukup panjang. Penyebabnya adalah unit production. Unit production ialah production berbentuk A B, pada contoh di atas berupa E T T F F I Apabila unit production dihilangkan maka derivasi akan lebih singkat dan parse tree akan lebih pendek. Variabel A membentuk unit pair (A,A). Jika (A,A) adalah unit pair dan A B adalah production maka terbentuk unit pair (A,B). Jika (A,B) adalah unit pair dan B C adalah production maka terbentuk unit pair (A,C). Unit pair (X,Y) dan production Y α membentuk production X α (E, E) dan E T membentuk unit pair (E, T) (E, T) dan T T * F membentuk production E T * F (E, T) dan T F membentuk unit pair (E, F) (E, F) dan F (E) membentuk production E (E) (E, F) dan F I membentuk unit pair (E, I) (E, I) dan I a b membentuk production E a b (T, T) dan T F membentuk unit pair (T, F) (T, F) dan F (E) membentuk production T (E) (T, F) dan F I membentuk unit pair (T, I) (T, I) dan I a b membentuk production T a b (F, F) dan F I membentuk unit pair (F,I) (F, I) dan I a b membentuk production F a b 1. E E + T T * F ( E ) a b 2. T T * F ( E ) a b 3. F ( E ) a b 4. I a b String b * (a + b) diperoleh dari derivasi: E T * F b * F b * (E) b * (E + T) b * (a + T) b * (a + b)
Penyederhanaan CFG (edisi 1) 6/8 Hilangkan unit production di bawah ini 1. S Aa B 2. A a bc B 3. B A bb Contoh string yang dihasilkan: 1) S Aa Ba bba production 1a, 2c, 3b 2) S B A bc production 1b, 3a, 2b Unit production: S B B A A B (S, S) dan S B membentuk unit pair (S, B) (S, B) dan B bb membentuk production S bb (S, B) dan B A membentuk unit pair (S, A) (S, A) dan A a bc membentuk production S a bc (B, B) dan B A membentuk unit pair (B. A) (B, A) dan A a bc membentuk production B a bc (A, A) dan A B membentuk unit pair (A, B) (A, B) dan B bb membentuk production A bb Jika dikumpulkan semua maka hasilnya 1. S Aa a bb bc 2. A a bb bc 3. B a bb bc Contoh string yang dihasilkan: 1) S Aa bba production 1a, 2b 2) S bc production 1c Chomsky Normal Form Kita telah melakukan penyederhaan production CFG dengan mengeliminasi simbol yang tidak berguna, ε-production, dan unit production. Ketiga proses ini tidak menjamin terbentuknya production yang seragam, misalnya bagian body tidak lebih dari dua simbol. Chomsky Normal Form (CNF) adalah bentuk production A BC A a dengan A, B, dan C berjenis simbol non terminal dan a simbol terminal. CFG yang tidak mengandung ε-production dapat diubah sehingga semua production-nya berbentuk CNF, dengan cara: 1. apabila body mengandung simbol terminal dan panjang body lebih dari satu maka gunakan variabel pembantu untuk menggantikan simbol terminal. S abcd diuraikan menjadi S ABCD A a C c 2. uraikan body yang panjangnya tiga atau lebih menjadi sejumlah production yang panjangnya masing-masing dua dengan bantuan variabel baru. S ABCD diuraikan menjadi S AE E BF F CD
Penyederhanaan CFG (edisi 1) 7/8 Ubah production berikut menjadi CNF 1. S ABa 2. A aab 3. B Ac Ubah simbol terminal 1. S ABa menjadi S ABC (1a) C a (1b) 2. A aab menjadi A CCD (2a) D b (2b) 3. B Ac menjadi B AE (3a) E c (3b) Ubah body yang panjang lebih dari dua 1a. S ABC menjadi S AF F BC 2a. A CCD menjadi A CG G CD 1. S AF 2. F BC 3. C a 4. A CG 5. G CD 6. D b 7. B AE 8. E c Ubah production berikut menjadi CNF 1. E E + T T * F ( E ) a b 2. T T * F ( E ) a b 3. F ( E ) a b 4. I a b Ubah simbol terminal 1a. E E + T menjadi E EPT (a) P + 1b. E T * F menjadi E TMF (b) M * 1c. E (E) menjadi E LER (c) L ( R ) Ubah body yang panjangnya lebih dari dua (a). E EPT menjadi E EC 1 C 1 PT
Penyederhanaan CFG (edisi 1) 8/8 (b). E TMF menjadi E TC 2 C 2 MF (c). E LER menjadi E LC 3 C 3 ER 1. E EC 1 TC 2 LC 3 a b 2. T TC 2 LC 3 a b 3. F LC 3 a b 4. I a b 5. P + 6. M * 7. L ( 8. R ) 9. C 1 PT 10. C 2 MF 11. C 3 ER Referensi Hopcroft, E. John, Rajeev Motwani, Jeffrey D. Ullman, (2001), Introduction to Automata Theory, Languages, and Computation, 2 nd edition, Addison-Wesley Linz, P., (1990), An Introduction to Formal Languages and Automata, D.C. Heath and Co. Martin, J. C. (1991), Introduction to Languages and the Theory of Computation, McGraw-Hill