420 likes | 769 Views
Session 11 Parse Tree, Application of Parse Tree, and Ambiguity. Teori Bahasa dan Otomata ( KOM208 ) SKS: 3(3-0). TIK, Subtopik dan Waktu Penyajian. Tinjauan Instruksional Khusus : Mahasiswa akan dapat menjelaskan cara kerja dan aplikasi parse tree . Subtopik : Pembuatan parse tree
E N D
Session 11Parse Tree, Application of Parse Tree, and Ambiguity Teori Bahasa dan Otomata (KOM208) SKS: 3(3-0)
TIK, Subtopik dan Waktu Penyajian • Tinjauan Instruksional Khusus: • Mahasiswa akan dapat menjelaskan cara kerja dan aplikasi parse tree. • Subtopik: • Pembuatan parse tree • Inferensi dan penurunan • Aplikasi tata bahasa bebas konteks • Ambiguitas dalam tata bahasa dan bahasa • Waktu penyajian: 2 x 150 menit
Parse Tree • Parse tree dikonstruksi sebagai berikut, misal Grammar G = (V,T,P,S). Parse tree untuk G adalah tree dengan kondisi-kondisi berikut: • Setiap node interior diberi label sebuah variabel dalam V. • Setiap daun/leaf diberi label oleh sebuah variabel, sebuah terminal atau . Jika leaf diberi label , maka leaf tersebut haruslah merupakan anak satu-satunya dari parent-nya.
Parse Tree • Jika sebuah node interior diberi label A, dan anak-anaknya diberi label berturut-turut X1, X2,..., Xk dari kiri, maka A X1, X2,..., Xk adalah produksi dalam P. Satu-satunya perkalian dari para X dapat menjadi adalah jika perkalian tersebut merupakan label dari satu-satunya anak (child), dan A adalah produksi dari G.
Contoh 8 • Parse tree berikut menujukkan penurunan I+E dari E. Root diberi label variabel E. • Produksi yang digunakan pada root adalah E E+E karena terdapat 3 anak dari root yang berturut-turut mempunyai label E, + dan E dari kiri. • Pada anak paling kiri dari root, produksi digunakan, karena terdapat satu anak dari node tersebut, diberi label I.
Contoh 9 • Parse tree berikut adalah parsetree untuk grammar palindrom.
Hasil dari Sebuah ParseTree • Jika leaf-leaf dari parsetreedirangkai dari kiri, akan diperoleh sebuah string, yang dinamakan hasil dari tree. • String-string tersebut diturunkan dari variabel root. • Hal-hal yang harus diperhatikan berkaitan dengan hasil dari sebuah parsetree adalah • Hasil adalah sebuah string terminal. Bahwa, semua leaf diberi label sebuah terminal atau . • Root diberi label oleh startsymbol.
Hasil dari Sebuah ParseTree • Tree dengan ketentuan tsb adalah parsetree yang memiliki hasil adalah string-string dalam bahasa dari grammar tertentu. • Bahasa dari sebuah grammar adalah himpunan dari hasil-hasil dari parsetree yang memiliki startsymbol pada root dan sebuah string terminal sebagai hasil. Parsetree yang menujukkan bahwa a*(a+b00) adalah dalam bahasa dari grammar dalam Contoh 3 (Bab Grammar Bebas Konteks)
Inferensi, Penurunan dan Pohon Penurunan Diberikan sebuah grammar G=(V,T,P,S), penyataan-pernyataan berikut adalah ekuivalen: 1. Prosedur inferensi rekursif menentukan bahwa string terminal w adalah dalam bahasa dari variabel 2. 3. 4. • Terdapat sebuah pohon penurunan dengan root A dan hasil w
Pembuktian Ekuivalensi Parse tree Leftmost derivation Rightmost derivation derivation Recursive inference
Dari Inferensi ke Tree (1) Teorema: Misalkan G=(V,T,P,S) adalah sebuah CFG. Jika prosedur inferensi rekursif menyatakan bahwa string terminal w adalah dalam bahasa dari variabel A, maka terdapat sebuah pohon penurunan dengan root A dan hasil w.
A w Dari Inferensi ke Tree (2) Bukti: induksi pada banyaknya langkah yang digunakan untuk menentukan bahwa w adalah dalam bahasa A. Basis: Produksi Aw. Root: A Hasil: w
A x1 x2 xk … w1 w2 w3 Dari Inferensi ke Tree (3) Induksi: • Misalkan w=w1w2…wk • Misalkan kesimpulan bahwa hasil w ada dalam bahasa A diperoleh setelah n+1 langkah. subtree
Dari Inferensi ke Tree (4) • Jika Xi adalah sebuah terminal, maka wi = Xi; yaitu wi terdiri dari hanya 1 terminal dari produksi. • Subtree: wi • Jika Xi adalah sebuah variabel, maka wi adalah sebuah string yang sebelumnya disimpulkan ada dalam bahasa Xi. • Terdapat beberapa tree dengan root Xi dan hasil wi. • Tree ini ditempelkan ke node untuk Xi • Hasilnya adalah hasil dari subtree dirangkai dari kiri ke kanan, yaitu string w=w1w2…wk.
Dari Tree ke Penurunan (1) • Mengkonstrukai leftmost derivation atau rightmost derivation dari sebuah pohon penurunan. • Penurunan dari string dari sebuah variabel dapat diletakan dalam penurunan lain
Dari Tree ke Penurunan (2) Contoh: • Perhatikan kembali CFG yang merepresentasikan ekspresi dalam bahasa pemrograman dengan operator + dan *. • Terdapat penurunan: EI Ib ab • Untuk string-string dan , penurunan berikut benar: E I Ib ab
Dari Tree ke Penurunan (3) Contoh: Diketahui penuruan EE+E E+(E) Penuruan ab dari E adalah E+(E) E+(I) E+(Ib) E+(ab)
Dari Tree ke Penurunan (4) Teorema: Misal G=(V,T,P,S) adalah sebuah CFG, dan anggap terdapat sebuah pohon penurunan dengan root yang diberi label variabel A dan dengan hasil w, dimana w adalah dalam T*. Maka terdapat sebuah leftmost derivation dalam grammar.
A w Dari Tree ke Penurunan (5) Bukti: induksi pada ketinggian (height) dari tree. Basis: • Height dari tree = 1; tree dengan root A dan children membaca w dari kiri ke kanan • Karena tree ini adalah parse tree, maka Aw adalah sebuah produksi. • Sehingga leftmost deriavtion berikut terdiri dari satu langkah
A x1 x2 xk … w1 w2 w3 Dari Tree ke Penurunan (6) Induksi: • Jika height dari tree adalah n, n>1. • Tree memiliki root A dan children X1, X2, … Xk dari kiri.
Dari Tree ke Penurunan (7) • Jika Xi adalah sebuah terminal, definisikan wi menjadi string yang terdiri dari Xi. • Jika Xi adalah sebuah variabel, maka Xi adalah root dari subtree dengan sebuah hasil adalah terminal, yang dinamakan wi. • Hipotesis induksi: terdapat leftmost derivarion:
Dari Tree ke Penurunan (8) • Nyatakan w=w1w2…wk. • Konstruksi leftmost derivation dari w adalah sebagai berikut: • Mulai dengan langkah • Untuk setiap i=1, 2, …, k kita tunjukkan bahwa • Ketika i=k, hasil adalah leftmost derivation dari w dari A.
Ambiguitas dalam Grammar • Tidak semua grammar dapat menyatakan struktur yang unik untuk setiap string dalam sebuah bahasa. • Kadang-kadang, grammar dapat dirancang ulang agar dapat memberikan struktur yang unik untuk setiap string dalam sebuah bahasa.
Contoh 10 • CFG untuk ekspresi sederhana: E I | E + E | E * E | (E) I a | b | Ia | Ib | I0 | I1 • Produksi-produksi E E + E, E E * E ekpresi-ekspresi sederhana dapat di-generate dalam beberapa cara. • Sebagai contoh, bentuk sentential E + E * E memiliki dua penurunan dari E, yaitu: 1. E E + E E + E *E 2. E E * E E + E *E
Parse treeuntuk E + E * E Gambar a Gambar b
Contoh 10 (lanjutan) • Grammar tsb memberikan dua struktur yang berbeda untuk string atau terminal-terminal yang diturunkan dengan mengganti 3 ekspresi dalam E + E * E dengan identifier. • Contoh: string a + b memiliki beberapa penurunan yang berbeda, yaitu: 1. E E + E I + E a + E a + I a + b 2. E E + E E + I I + I I + b a + b
Ambiguitas • Ambiguitas disebabkan karena adanya dua atau lebih parsetree, bukan karena banyaknya penurunan. • CFG G = (V, T, P, S) dikatakan ambigu jika terdapat sedikitnya satu string w dalam T* dimana kita dapat menentukan dua parsetree yang berbeda. • Masing-masing parsetree tersebut memiliki root yang diberi label S dan hasil w. • Jika setiap string memiliki paling banyak satu parsetree dalam grammar, maka grammar tersebut dikatakan tidak ambigu (unambiguous).
Contoh 10 (lanjutan) • Parsetree yang menghasilkan string a + a * a Gambar b Gambar a
Menghilangkan Ambiguitas dari Grammar (1) • Penyebab ambiguitas dalam grammar pada Contoh: • Gambar a mengelompokkan operator * sebelum operator +. Sedangkan Gambar b mengelompokkan + di depan *. • Tetapkan hanya struktur dalam Gambar a yang legal dalam grammar yang tidak ambigu.
Menghilangkan Ambiguitas dari Grammar (2) • Urutan operator-operator yang serupa dapat dikelompokkan dari kiri atau dari kanan. • Sebagai contoh, jika para * dalam Gambar diganti oleh para +, maka akan diperoleh dua parsetree yang berbeda untuk string E + E + E. • Walaupun dalam penjumlahan dan perkalian berlaku hukum asosiatif, untuk menghilangkan ambiguitas ditetapkan pengelompokkan dari kiri.
Menghilangkan Ambiguitas dari Grammar (3) • Untuk menghilangkan ambiguitas, diperkenalkan variabel-variabel berikut: • Faktor: sebuah ekspresi yang tidak dapat dipecah dari operator yang berdekatan, a * atau a +. Faktor-faktor berupa: • Identifier • Ekspresi yang diberi tanda kurung. • Term: sebuah ekspresi yang tidak dapat dipisahkan dari operator +. Dalam Contoh 1, term adalah product dari satu atau lebih faktor. • Ekspresi. Dalam Contoh 1, ekspresi adalah penjumlahan satu atau lebih term.
Contoh 11 • Berikut grammar yang tidak ambigu yang me-generate bahasa yang sama dengan bahasa yang di-generate oleh grammar dalam Contoh 10: I a | b | Ia | Ib | I0 | I1 F I | (E) T F | T * F E T | E + T • Dalam grammar tersebut, F, T dan E berturut-turut menyatakan faktor, term, dan ekspresi.
Contoh 11 (lanjutan) • Grammar tsb memungkinkan hanya satu parsetree untuk string a + a * a, yaitu
LeftmostDerivation dan Ambiguitas • Penurunan dapat tidak unik walaupun grammar tidak ambigu. • Dalam sebuah grammar yang tidak ambigu, leftmostderivation dan rightmostderivation akan unik.
Contoh 12 • Perhatikan parsetree dalam Gambar a dan b pada Contoh 10, yang menghasilkan E + E * E. • Leftmostderivation dari kedua parsetree tersebut: • E (lm) E + E (lm) I + E (lm) a + E (lm) a + E * E (lm) a + I * E (lm) a + a * E (lm) a + a * I (lm) a + a * a • E (lm) E * E (lm) E + E * E (lm) I + E * E (lm) a + E * E (lm) a + I * E (lm) a + a * E (lm) a + a * I (lm) a + a *a
Teorema • Untuk setiap grammar G = (V, T, P, S) dan string w dalam T*, w memiliki dua parsetree yang berbeda jika dan hanya jika w memiliki dua leftmostderivation yang berbeda dari S. Bukti dapat dilihat pada buku rujukan.
Inherent Ambiguity • Sebuah CFL L dikatakan inherently ambiguous jika semuagrammar-grammarnya adalah ambigu. • Jika satu grammar untuk L adalah tidak ambigu, maka L adalah sebuah bahasa yang tidak ambigu. • Bahasa dari ekspresi-ekspresi yang di-generate oleh grammar dalam Contoh 1 adalah bahasa tidak ambigu. • Walaupun grammarnya ambigu, terdapat grammar yang lain untuk bahasa yang sama yang tidak ambigu, yaitu grammar dalam Contoh 11.
Contoh 13 • Perhatikan bahasa berikut: L = {anbncmdm | n 1, m 1} {anbmcmdn | n 1, m 1} • Bahasa L berisi string-string dalam a+b+c+d+ sedemikian sehingga: • Terdapat sama banyak para a dan para b dan sama banyak para c dan para d, atau • Terdapat sama banyak para a dan para d dan sama banyak para b dan para c.
Contoh 13 (lanjutan) • L adalah sebuah CFL. Grammar untuk L adalah: S AB | C A aAb | ab B cBd | cd C aCd | aDd D bDc | bc • Grammar di atas adalah grammar yang ambigu.
Contoh 13 (lanjutan) • String aabbccdd memiliki dua leftmostderivation, yaitu: • S (lm) AB (lm) aAbB (lm) aabbB (lm)aabbcBd (lm) aabbccdd • S (lm) C (lm) aCd (lm)aaDdd (lm) aabDcdd (lm) aabbccdd
Contoh 13 (lanjutan) • Parse tree untuk aabbccdd
Daftar Pustaka • John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman. 2001. Introduction to Automata Theory, Languange, and Computation. Edisi ke-2. Addison-Wesley.