Pertemuan 12 Bentuk Normal untuk Grammar Bebas Konteks Teori Bahasa dan Otomata (KOM208) SKS: 3(3-0)
TIK dan Waktu Penyajian Tinjauan Instruksional Khusus: Mahasiswa akan dapat menjelaskan bentuk normal untuk tata bahasa bebas konteks . Waktu penyajian: 1 x 150 menit
Bentuk normal Chomsky Setiap CFL (tanpa ε) di-generate oleh sebuah CFG dengan semua produksinya dapat ditunjukkan memiliki bentuk A BC atau A a, dimana A, B, C adalah variabel dan a adalah terminal. Bentuk ini dinamakan bentuk normal Chomsky. Hal ini dapat ditunjukkan dengan terlebih dahulu membuat penyederhanaan berikut: Mengeliminasi useless symbols, variabel-variabel atau terminal-terminal yang tidak muncul dalam penurunan string terminal dari start symbol. Mengeliminasi ε-productions, yang berbentuk A ε untuk variabel A. Mengeliminasi unit production, yang memiliki bentuk AB untuk variabel A dan B.
Mengeliminasi Useless Symbol Simbol X dikatakan useful untuk grammar G = (V,T,P,S) jika terdapat penurunan dengan bentuk S * X * w, dimana w adalah dalam T*. X dapat berada dalam V atau T, dan bentuk sentensial X dapat berada pada awal atau akhir penurunan. Jika X not useful maka dikatakan useless. Penghilangan useless symbol dari grammar tidak akan merubah bahasa yang di-generate.
Mengeliminasi Useless Symbol Identifikasi sebuah simbol dapat menjadi useful: X dikatakan generating jika X * w untuk string terminal w. Perhatikan bahwa setiap terminal adalah generating, karena w dapat menjadi terminal, yang diturunkan oleh nol langkah. X dikatakan reachable jika terdapat penurunan S * X, untuk dan Sebuah symbol yang useful adalah generating dan reachable.
Contoh 1 Perhatikan grammar S AB | a A b Semua simbol kecuali B adalah generating; a dan b me-generate dirinya sendiri; S men-generate a, dan A men-generate b. Jika B dieliminasi, maka produksi S AB harus dieliminasi. Sehingga grammar menjadi: S a
Contoh 1 (lanjutan) Hanya S dan a yang reachable dari S. Dengan mengeliminasi A dan b, produksi yang tertinggal: S a. Produksi tersebut dengan sendirinya merupakan grammar yang memiliki bahasa {a}. Perhatikan bahwa jika eliminasi dimulai dengan uji reachability, ditentukan bahwa grammar S AB | a A b adalah reachable. Jika kemudian simbol B dieliminasi karena alasan non-generating, grammar yang diperoleh masih memiliki useless symbol, A dan b.
Teorema Misal G = (V,T,P,S) adalah CFG, dan asumsikan bahwa L(G) ; yaitu G memiliki sedikitnya satu string. Misal G1 = (V1,T1,P1,S) adalah grammar yang diperoleh dengan langkah berikut: Pertama mengeliminasi nongenerating symbol dan semua produksi yang melibatkan satu atau lebih simbol-simbol tersebut. Misalkan G2=(V2,T,P2,S) adalah grammar baru yang dihasilkan. Perhatikan bahwa S haruslah generating, karena kita asumsikan bahwa L(G) memliki sedikitnya satu string, sedemikian sehingga S tidak dieliminasi. Kedua, eliminasi semua simbol yang tidak reachable dalam grammar G2. Maka G1 tidak memiliki useless symbol dan L(G1) = L(G).
Komputasi Generating Symbol Misalkan G = (V,T,P,S) adalah grammar. Komputasi dari generating symbol dari G dilakukan induksi berikut: Basis: setiap simbol dari T adalah generating; simbol tersebut men-generate dirinya sendiri. Induksi: Anggap terdapat produksi A , dan setiap simbol telah diketahui merupakan simbol generating. Maka A adalah generating. Perhatikan bahwa aturan ini termasuk kasus dimana = ε, semua variabel yang memiliki ε sebagai badannya adalah generating.
Contoh 2 Perhatikan grammar S AB | a A b Dari basis diperoleh bahwa a dan b adalah generating. Dari induksi, digunakan A b untuk menyimpulkan bahwa A adalah generating, dan produksi S a untuk menyimpulkan bahwa S adalah generating. Produksi S AB tidak dapat digunakan, karena B tidak ditetapkan merupakan simbol generating. Dengan demikian, himpunan dari generating symbol adalah {a,b,A,S}.
Komputasi Reachable Symbol Misalkan G = (V,T,P,S) adalah grammar. Komputasi dari reachable symbol dari G dilakukan induksi berikut Basis: S adalah reachable Induksi: Anggap bahwa kita telah menemukan bahwa variabel A adalah reachable. Maka untuk semua produksi dengan A sebagai head-nya, semua simbol dari body produksi tersebut juga reachable.
Contoh 3 Perhatikan grammar S AB | a A b Dari basis, diperoleh bahwa S adalah reachable. Karena S memiliki badan produksi AB dan a, maka A, B, dan a adalah reachable. B tidak memiliki produksi, tetapi A memiliki A b. Dengan demikian b adalah reachable. Sehingga himpunan reachable symbol adalah {S,A,B,a,b}.
Mengeliminasi ε-production Sebuah variabel A adalah nullable jika A * ε. Jika A adalah nullable, maka jika A muncul dalam body dari produksi, katakanlah B CAD, A dapat (atau tidak dapat) menurunkan ε. Terdapat 2 versi produksi, yaitu tanpa A dalam body (B CD), yang terkait dengan kasus dimana A telah digunakan untuk menurunkan ε, dan produksi yang lain, yaitu B CAD (A tetap ada).
Mengeliminasi ε-production Misalkan G = (V,T,P,S) adalah CGF. Kita dapat menemukan semua simbol nullable dari G dengan induksi berikut. Dapat ditunjukkan tidak ada simbol nullable kecuali yang ditemukan oleh induksi tersebut. Basis: Jika A ε adalah produksi dari G, maka A adalah nullable. Induksi: Jika terdapat produksi B C1C2…CK dimana Ci adalah nullable, maka B adalah nullable. Perhatikan bahwa setiap Ci haruslah menjadi sebuah variabel yang menjadi nullable, sehingga kita hanya perlu memperhatikan produksi dengan body semua variabel.
Konstruksi Grammar tanpa ε-production Misalkan G = (V,T,P,S) adalah CFG. Tentukan semua nullable symbol dari G. Grammar baru G1 = (V,T,P1,S), yang memiliki produksi P1 ditentukan sebagai berikut: untuk setiap produksi A X1X2…Xk dari P, dimana k 1, anggap bahwa m dari k para Xi adalah nullable symbol. Grammar baru G1 akan memiliki 2m versi dari produksi, dimana nullable para Xi, dalam semua kombinasi adalah present atau absent. Terdapat satu pengecualian: jika m = k, yaitu semua simbol adalah nullable, maka kita tidak memasukkan kasus dimana semua para Xi adalah absent. Perhatikan juga bahwa jika sebuah produksi dari bentuk A ε dalam P, kita tidak mengikutkan produksi tersebut dalam Pi.
Contoh 4 Perhatikan grammar S AB A aAA | ε B aBB | ε A dan B adalah nullable symbol, karena memiliki produksi dengan ε sebagai badannya. Selanjutnya, S adalah nullable, karena produksi S AB memiliki body yang hanya terdiri dari nullable symbol. Dengan demikian ketiga variabel tsb adalah nullable.
Contoh 4 (lanjutan) Konstruksi grammar G1 dilakukan sebagai berikut Perhatikan produksi S AB, semua simbol dari body adalah nullable, sehingga terdapat 4 cara yang dapat dipilih berdasarkan present atau absent untuk A dan B. Tetapi pemilihan dimana keduanya absent tidak digunakan, sehingga terdapat 3 produksi: S AB | A | B
Contoh 4 (lanjutan) Perhatikan produksi A aAA. Simbol pada posisi ke dua dan ketiga adalah nullable, sehingga terdapat 4 pilihan untuk absent/present dari simbol-simbol tersebut. Dalam kasus ini, semua pilihan boleh digunakan, karena simbol nonnullable a akan ada dalam setiap kasus. Produksi-produksi yang dihasilkan: A aAA | aA | aA | a. Karena dua produksi ditengah sama, produksi-produksi yang dihasilkan menjadi A aAA | aA | a
Contoh 4 (lanjutan) Dengan demikian produksi-produksi dalam G1: Cara yang sama dilakukan untuk menghasilkan produksi B : B bBB | bB | b Dengan demikian produksi-produksi dalam G1: S AB | A | B A aAA | aA | a B bBB | bB | b
Teorema Jika grammar G1 dikonstruksi dari G dengan konstruksi untuk mengeliminasi ε-production, maka L(G1) = L(G) – {ε}
Mengeliminasi Unit Production Sebuah unit production adalah produksi dengan bentuk A B, dimana A dan B adalah variabel. Produksi-produksi ini dapat useful. Sebagai contoh, dalam pembahasan sebelumnya, unit production E T dan T F digunakan untuk membuat grammar tidak ambigu untuk ekspresi aritmatika sederhana. Produksi-produksi untuk memperoleh ekspresi tersebut adalah I a | b | Ia | Ib | I0 |I1 F I | (E) T F | T * F E T | E + T
Mengeliminasi Unit Production Unit production dapat memperumit pembuktian dan memperbanyak langkah penurunan. Unit production dapat dihilangkan, sehingga diperoleh produksi E a | b | Ia | Ib | I0 |I1 | (E) | T * F Cara yang dilakukan adalah memperluas unit production sampai mereka tidak muncul lagi. Langkah ini dapat gagal jika terdapat cycle dari unit production, misalnya: A B, B C dan C A.
Teknik mengeliminasi Unit Production Pertama melibatkan penemuan semua pasangan dari variabel A dan B sedemikian sehingga A * B menggunakan serangkaian unit production saja. Perhatikan bahwa A * B mungkin benar walaupun tidak ada unit production yang terlibat. Contoh misal ada produksi A BC dan C ε. Setelah setiap pasangan demikian dapat ditemukan, kita dapat mengganti rangkaian langkah-langkah penurunan A B1 B2...… Bn dengan sebuah produksi yang menggunakan nonunit production Bn secara langsung dari A; bahwa A .
Teknik mengeliminasi Unit Production Pasangan (A,B) sedemikian sehingga A* B menggunakan hanya unit production, dinamakan unit pair. Definisi unit pair adalah Basis: (A,A) adalah unit pair untuk variabel A. Bahwa A * A dengan nol langkah. Induksi: Anggap telah ditentukan bahwa (A,B) adalah unit pair, dan B C adalah produksi, dimana C adalah variabel, maka (A, C) adalah unit pair.
Contoh 5 Perhatikan grammar untuk ekspresi sederhana berikut: I a | b | Ia | Ib | I0 |I1 F I | (E) T F | T * F E T | E + T Dari basis diperoleh unit pair (E,E), (T,T), (F,F) dan (I,I). Untuk langkah induktif, kita dapat membuat inferensi berikut: Dari (E,E) dan produksi E T diperoleh unit pair (E,T). Dari (E,T) dan produksi T F diperoleh unit pair (E,F). Dari (E,F) dan produksi F I diperoleh unit pair (E,I). Dari (T,T) dan produksi T F diperoleh unit pair (T,F). Dari (T,F) dan produksi F I diperoleh unit pair (T,I). Dari (F,F) dan produksi F I diperoleh unit pair (F,I).
Langkah-langkah eliminasi unit production Diberikan CFG G = (V,T,P,S), konstruksi CFG G1 = (V,T,P1,S) dilakukan melalui langkah berikut: Temukan semua unit pair dari G Untuk setiap unit pair (A,B), tambahkan ke P1 semua produksi A , dimana B adalah non unit production dalam P. Mungkin saja A = B (P1 mengadung semua non unit production dalam P). -- Hapus semua unit production
Contoh 6 Pair Produksi (E,E) E E + T (E,T) E T * F (E,F) E (E) (E,I) E a | b | Ia | Ib | I0| I1 (T,T) T T * F (T,F) T (E) (T, I) T a | b | Ia | Ib | I0| I1 (F,F) F (E) (F,I) F a | b | Ia | Ib | I0| I1 (I,I) I a | b | Ia | Ib | I0| I1 Tabel berikut merupakan hasil dari langkah 2 dalam konstruksi CFG G1 dari grammar dalam Contoh 5:
Contoh 6 (lanjutan) Grammar yang dihasilkan adalah E E + T | T * F | (E) | a | b | Ia | Ib | I0| I1 T T * F | (E) | a | b | Ia | Ib | I0| I1 F (E) | a | b | Ia | Ib | I0| I1 I a | b | Ia | Ib | I0| I1 Grammar ini tidak memiliki unit production dan ekspresi yang di-generate sama dengan yg di-generate oleh grammar sebelumnya (menggandung unit production).
Teorema Jika grammar G1 dikonstruksi dari grammar G dengan algoritme untuk mengeliminasi unit production, maka L(G1) = L(G). Jika G adalah CFG yang me-generate bahasa yang mengandung sedikitnya satu string selain ε, maka terdapat CFG G1 yang lain sedemikian sehingga L(G1) = L(G) – {ε}, dan G1 tidak memiliki ε-production, unit production atau useless symbol.
Bentuk Normal Chomsky Setiap CFL tak kosong tanpa ε memiliki sebuah grammar G dimana semua produksinya adalah salah satu dari dua bentuk sederhana berikut: A BC, dimana A, B, dan C adalah variabel A a, dimana A adalah variabel dan a adalah terminal. G tidak memiliki useless symbol. Grammar demikian dinamakan ada dalam bentuk Chomsky Normal Form (CNF).
Mengkonversi grammar ke dalam bentuk CNF Mulai dengan pernyataan bahwa grammar yang akan dibentuk tidak memiliki ε-production, unit production atau useless symbol (Teorema 2). Setiap produksi dalam grammar demikian memiliki bentuk A a (diperbolehkan oleh CNF), atau memiliki body dengan panjang 2 atau lebih.
Langkah mendapat grammar dalam bentuk CNF Susun semua body dari produksi dengan panjang 2 atau lebih yang hanya berisi variabel-variabel. Pisahkan body-body produksi yang memiliki panjang lebih dari 3 atau lebih ke dalam produksi-produksi secara bertingkat, masing-masing dengan sebuah body yang terdiri dari 2 variabel.
Langkah mendapat grammar dalam bentuk CNF Dalam langkah 1: untuk setiap terminal a yang muncul dalam body dengan panjang 2 atau lebih, buat variabel baru, katakanlah A. Variabel ini hanya memiliki satu produksi, A a. Gunakan A menggantikan a dimanapun a muncul dalam body dengan panjang 2 atau lebih. Sampai langkah ini, setiap produksi memiliki body berupa sebuah single terminal atau sedikitnya dua variabel dan bukan terminal. Dalam langkah 2: pisahkan produksi A B1B2..Bk, untuk k 3, ke dalam kelompok produksi dengan dua variabel dalan setiap body-nya. Gunakan n-2 variabel baru, C1,C2,…Ck-1. Produksi asal digantikan oleh k-1 produksi A B1C1, C1 B2C2,…, Ck-3 Bk-2Ck-2, Ck-2 Bk-1Bk
Contoh 7 Konversikan grammar ke dalam CNF. E E + T | T * F | (E) | a | b | Ia | Ib | I0| I1 T T * F | (E) | a | b | Ia | Ib | I0| I1 F (E) | a | b | Ia | Ib | I0| I1 I a | b | Ia | Ib | I0| I1 ke dalam CNF.
Contoh 7- Langkah 1 Terdapat 8 terminal: a,b,0,1, +, *, (, dan ), masing-masing muncul dalam body yang bukan single terminal. Selanjutnya gunakan 8 variabel baru dan produksi: A a B b Z 0 O 1 P + M * L ( R ) Ganti semua terminal dalam body selain single terminal dengan variabel yang sesuai. Sehingga diperoleh grammar: E EPT | TMF | LER | a | b | IA | IB | IZ | IO T TMF | LER | a | b | IA | IB | IZ | IO F LER | a | b | IA | IB | IZ | IO I a | b | IA | IB | IZ | IO A a B b Z 0 O 1 P + M * L ( R ) Semua produksi dalam bentuk CNF kecuali yang memiliki body dengan panjang 3, yaitu EPT, TMF, dan LER.
Contoh 7- Langkah 2 Beberapa variabel baru diperkenalkan dan pergantian produksi dilakukan sebagai berikut: Untuk EPT, digunakan variabel baru C1, dan ganti produksi E EPT dengan E E C1 dan C1 PT. Untuk TMF, digunakan variabel baru C2, dan ganti produksi E TMF dan T TMF dengan E T C2, T T C2 dan C2 MF. Untuk LER, digunakan variabel baru C3, dan ganti produksi E LER, T LER dan F LER dengan E LC3, T LC3, F LC3 dan C3 ER.
Contoh 7- Langkah 2 Dengan demikian, final grammar dalam CNF E EC1 | TC2 | LC3 | a | b | IA | IB | IZ | IO T TC2 | LC3 | a | b | IA | IB | IZ | IO F LC3 | a | b | IA | IB | IZ | IO I a | b | IA | IB | IZ | IO A a B b Z 0 O 1 P + M * L ( R ) C1 PT C2 MF C3 ER
Teorema Jika G adalah CFG yang memiliki bahasa yang mengandung sedikitnya satu string selain ε, maka terdapat grammar G1 dalam CNF, sedemikian sehingga L(G1) = L(G) – {ε}.
Daftar Pustaka John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman. 2001. Introduction to Automata Theory, Languange, and Computation. Edisi ke-2. Addison-Wesley.