Pertemuan 11 Parse tree dan Aplikasinya

Download Report

Transcript Pertemuan 11 Parse tree dan Aplikasinya

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
– 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:
1. Setiap node interior diberi label sebuah variabel
dalam V.
2. 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
3. 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.
E
E
I
+
E
Contoh 9
• Parse tree berikut
adalah parse tree
untuk grammar
palindrom.
P
0
P
0
1
P
1

Hasil dari Sebuah Parse Tree
• Jika leaf-leaf dari parse tree dirangkai 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 parse tree adalah
– Hasil adalah sebuah string terminal. Bahwa,
semua leaf diberi label sebuah terminal atau .
– Root diberi label oleh start symbol.
Hasil dari Sebuah
Parse Tree
• Tree dengan ketentuan tsb adalah
parse tree yang memiliki hasil
adalah string-string dalam bahasa
dari grammar tertentu.
• Bahasa dari sebuah grammar
adalah himpunan dari hasil-hasil
dari parse tree yang memiliki start
symbol pada root dan sebuah
string terminal sebagai hasil.
E
E
I
*
E
(
E
)
E
+
E
a
I
I
a
Parse tree yang menujukkan bahwa
a*(a+b00) adalah dalam bahasa dari
grammar dalam Contoh 3 (Bab Grammar
Bebas Konteks)
I
I
b
0
0
Inferensi, Penurunan dan
Pohon Penurunan
Diberikan sebuah grammar G=(V,T,P,S), penyataanpernyataan berikut adalah ekuivalen:
1. Prosedur inferensi rekursif menentukan bahwa string
terminal w adalah dalam bahasa dari variabel
*
2. A  w
*
3.
4.
Aw
lm
*
Aw
rm
5. Terdapat sebuah pohon penurunan dengan root A
dan hasil w
Pembuktian Ekuivalensi
Parse tree
Leftmost
derivation
derivation
Rightmost
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.
Dari Inferensi ke Tree (2)
Bukti: induksi pada banyaknya langkah yang
digunakan untuk menentukan bahwa w
adalah dalam bahasa A.
Basis:
Produksi Aw.
Root: A
Hasil: w
A
w
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
A
x1
x2
xk
…
w1
w2
w3
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: EI Ib  ab
• Untuk string-string  dan , penurunan berikut
benar: E  I  Ib  ab
Dari Tree ke Penurunan (3)
Contoh:
Diketahui penuruan EE+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
*
Aw
lm
dalam grammar.
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 Aw adalah sebuah
produksi.
Sehingga leftmost deriavtion
berikut terdiri dari satu langkah
Aw
lm
A
w
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.
A
x1
x2
xk
…
w1
w2
w3
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:
*
Ai  wi
lm
Dari Tree ke Penurunan (8)
• Nyatakan w=w1w2…wk.
• Konstruksi leftmost derivation dari w adalah sebagai
berikut:
• Mulai dengan langkah
A  X 1X 2.. Xk
lm
• Untuk setiap i=1, 2, …, k kita tunjukkan bahwa
*
A  w1w 2...wiXi  1Xi  2..Xk
lm
• 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 ekpresiekspresi 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 tree untuk E + E * E
Gambar a
Gambar b
E
E
E
+
E
E
*
E
E
E
*
+
E
E
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
parse tree, 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 parse tree yang berbeda.
• Masing-masing parse tree tersebut memiliki root yang
diberi label S dan hasil w.
• Jika setiap string memiliki paling banyak satu parse tree
dalam grammar, maka grammar tersebut dikatakan tidak
ambigu (unambiguous).
Contoh 10 (lanjutan)
• Parse tree yang menghasilkan string a + a * a
E
E
Gambar b
Gambar a
E
*
E
+
E
I
a
E
+
E
I
E
*
a
I
I
I
I
a
a
a
a
E
E
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 parse tree 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 megenerate 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)
E
• Grammar tsb
memungkinkan hanya
satu parse tree untuk
string a + a * a, yaitu
E
+
T
T
T
*
F
F
I
I
a
I
a
a
F
Leftmost Derivation dan
Ambiguitas
• Penurunan dapat tidak unik walaupun
grammar tidak ambigu.
• Dalam sebuah grammar yang tidak ambigu,
leftmost derivation dan rightmost derivation
akan unik.
Contoh 12
• Perhatikan parse tree dalam Gambar a dan b pada
Contoh 10, yang menghasilkan E + E * E.
• Leftmost derivation dari kedua parse tree 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 parse tree
yang berbeda jika dan hanya jika w memiliki
dua leftmost derivation yang berbeda dari S.
Bukti dapat dilihat pada buku rujukan.
Inherent Ambiguity
• Sebuah CFL L dikatakan inherently ambiguous jika
semua grammar-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 leftmost
derivation, 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
S
S
C
A
a
a
A
B
b
c
b
c
B
a
C
d
d
a
D
d
d
b
D
c
b
c
Daftar Pustaka
• John E. Hopcroft, Rajeev Motwani, Jeffrey D.
Ullman. 2001. Introduction to Automata
Theory, Languange, and Computation. Edisi
ke-2. Addison-Wesley.