Pertemuan 13 Bentuk Normal untuk CFG

Download Report

Transcript Pertemuan 13 Bentuk Normal untuk CFG

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 terminalterminal yang tidak muncul dalam penurunan string terminal dari
start symbol.
– Mengeliminasi ε-productions, yang berbentuk A  ε untuk variabel
A.
– Mengeliminasi unit production, yang memiliki bentuk AB 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
Ab
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 nongenerating, 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 headnya, 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)
– 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
• Tabel berikut
merupakan hasil
dari langkah 2
dalam
konstruksi CFG
G1 dari
grammar dalam
Contoh 5:
Pair
(E,E)
Produksi
EE+T
(E,T)
(E,F)
(E,I)
ET*F
E  (E)
E  a | b | Ia | Ib | I0| I1
(T,T)
(T,F)
(T, I)
TT*F
T  (E)
T  a | b | Ia | Ib | I0| I1
(F,F)
(F,I)
(I,I)
F  (E)
F  a | b | Ia | Ib | I0| I1
I  a | b | Ia | Ib | I0| I1
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
1. Jika grammar G1 dikonstruksi dari grammar G
dengan algoritme untuk mengeliminasi unit
production, maka L(G1) = L(G).
2. 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
1. Susun semua body dari produksi dengan
panjang 2 atau lebih yang hanya berisi
variabel-variabel.
2. 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
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.