Pohon Penurunan
Tata Bahasa Bebas Konteks
Parsing
Ambiguitas
Penyederhanaan Tata Bahasa Konteks
S Pohon atau Tree merupakan suatu graf
terhubung yang tidak sirkuler.
A B
Sebuah Pohon memiliki sebuah simpul
a A b B (node) atau vertex yang disebut akar
(root), dan dari root tersebut memiliki
a b B lintasan ke setiap simpul.
b Pohon Penurunan (Parse Tree) = Pohon
Sintaks (Syntax Tree) = Pohon Derivasi
(Derivation Tree)
Digunakan untuk memvisualkan cara memperoleh suatu untai (string) dengan
cara menurunkan simbol-simbol variabel menjadi simbol-simbol terminal.
Setiap simbol variabel diturunkan menjadi terminal, sampai tidak ada yang
belum tergantikan.
Tata Bahasa Bebas Konteks = Context Free Grammar (CFG)
Suatu tata bahasa yang tidak memiliki pembatasan pada hasil
produksinya. Contoh:
ab
Simbol dibaca ‘menurunkan’
Batasannya hanyalah ruas kirinya saja (a), yang disebut simbol
variabel.
Contoh aturan produksi yang termasuk CFG:
B cDeFG
D BcDe
Proses penurunan atau parsing
bisa dilakukan dengan cara:
S Penurunan terkiri (left-most
A B derivation)
Simbol variabel terkiri yang
a A b B
dikerjakan/diperluas terlebih dahulu
a b B Penurunan terkanan (right-most
b derivation)
Simbol variabel terkanan yang
dikerjakan/diperluas terlebih dahulu
S
a A S
Contoh:
Terdapat CFG: S b A a
S aAS | a a b a
A SbA | ba
Untuk memperoleh string ‘aabbaa’, dapat dilakukan dengan cara:
1. Dengan penurunan terkiri (left-most derivation)
S aAS aSbAS aabAS aabbaS aabbaa
2. Dengan penurunan terkanan (right-most derivation)
S aAS aAa aSbAa aSbbaa aabbaa
Terjadi bila terdapat lebih dari satu pohon penurunan yang
berbeda untuk memperolah suatu string.
Contoh, terdapat CFG:
S SbS | ScS | a
Untuk memperoleh string ‘abaca’, dapat diperoleh dengan
menggunakan 2 pohon penurunan.
CFG : S SbS | ScS | a
String : abaca
Cara pertama: Cara kedua:
S SbS SbScS SbSca S ScS SbScS abScS
Sbaca abaca abacS abaca
S S
S b S S c S
a S c S S b S a
a a a a
Melakukan pembatasan sehingga tidak Contoh 2:
menghasilkan pohon poenurunan SA
dengan kerumitan yang tidak perlu AB
atau aturan produksi yang tidak BC
berarti. CD
Da|A
Contoh 1:
S AB | a Rumit! Karena,
Aa Memiliki jalur yang terlalu panjang,
padahal ujungnya adalah S a.
Produksi D A juga menyebabkan
Aturan produksi S AB tidak berarti
kerumitan.
karena B tidak memiliki penurunan.
Penghilangan Produksi Useless
Produksi yang memuat simbol
Cara Penyederhanaan: variabel yang tidak memiliki
1. Penghilangan produksi penurunan yang akan
useless (tidak berguna) menghasilkan terminal-
2. Penghilangan produksi unit terminal seluruhnya.
3. Penghilangan produksi ɛ Produksi yang tidak akan
pernah dicapai dengan
penurunan apapun dari simbol
awal, sehingga produksi itu
redundan (berlebih).
Contoh 1:
S aSa | Abd | Bde
A Ada
B BBB | a Penyederhanaan menjadi:
Maka: S aSa | Bde
Simbol variabel A tidak memiliki
B BBB | a
penurunan yang menuju
terminal, sehingga bisa
dihilangkan.
Konsekuensi no 1, aturan
produksi S Abd tidak
memiliki penurunan.
Contoh 2: Aturan produksi C bb, penurunan dari
simbol S, dengan jalan manapun tidak akan
S Aa | B pernah mencapai C.
A ab | D Simbol variabel E tidak memiliki aturan
Bb|E produksi yang menuju terminal.
C bb Konsekuensi no (3) aturan produksi B
E, simbol variabel E tidak memiliki
D aEa penurunan.
Maka:
Aturan produksi A D, simbol Produksi useless: Penyederhanaan menjadi:
variabel D tidak memiliki penurunan. AD S Aa | B
Aturan produksi C bb, C bb A ab
penurunan dari simbol S, dengan D aEa Bb
jalan manapun tidak akan pernah BE
mencapai C.
Latihan:
Hilangkan produksi useless pada CFG berikut,
dan tentukan hasil penyederhanannya Jawab:
1. S aAb | cEB 1. Hasil penyederhanaannya:
A dBE | eeC
S aAb
Bff
C ae A eeC
Dh C ae
2. Hasil penyederhanaannya:
2. S aB
A bcD | dAC S aB
B e | Ab Be
C bCb | adF | ab
F cFB
Produksi Unit adalah produksi dimana ruas kiri dan kanan aturan
produksi hanya berupa satu simbol variabel, misal: A B, C D.
Kondisi tersebut membuat tata bahasa memiliki kerumitan yang tidak
perlu.
Penyederhanaan dilakukan dengan melakukan penggantian aturan
produksi unit.
Contoh 1: Solusi 1
CFG: S A Penggantian yang dilakukan:
S Aa S A => S ab | b
AB A B => A ab | b
BC B C => B b | ab, S ab | b
Bb karena B b sudah S Aa
CD A ab | b
ada, cukup ditulis B ab
C ab B ab Bb
Db Cb
C D => C b
Sederhanakan dengan C ab
menghilangkan produksi unitnya!
Hasil penyederhanaannya: Db
Solusi 2
Contoh 2:
Penggantian yang dilakukan:
CFG: S Cba | D
D E => D gh
A bbC C C, dihapus
B Sc | ddd D E => D gh
C eAn | f | C S D => S gh | SABC,
D E | SABC Hasil penyederhanaannya:
S Cba | gh | SABC
E gh
A bbc
Sederhanakan dengan B Sc | ddd
menghilangkan produksi unitnya! C eA | f
D gh | SABC
E gh
Latihan: Solusi:
Penggantian yang dilakukan:
CFG: S Sb S C => S dd | ef
SC C D => C dd
CD
C ef
Hasil penyederhanaan:
D dd S Sb
Sederhanakan dengan menghilangkan S dd | ef
produksi unitnya! C dd | ef
D dd
Produksi Ɛ (nullable) adalah Prinsip penggantiannya bisa dilihat
produksi kosong yang simbolkan kasus berikut:
dengan: S bcAd
ΑƐ AƐ
Penghilangan produksi Ɛ dilakukan Pada kasus tersebut, A
menghasilkan nilai kosong, dan
dengan melakukan penggantian kosong merupakan satu-satunya
produksi yang memuat variabel hasil produksi dari A.
yang bisa menuju produksi Ɛ, atau Dengan demikian, maka bisa
biasa disebut nullable. dituliskan:
S bcd
Contoh kasus 1:
Apabila kasusnya adalah: S Ab | Cd
S bcAd Ad
A bd | Ɛ CƐ
Pada kasus tersebut, karena Ɛ Perhatikan C Ɛ.
bukan satu-satunya produksi A, Karena Ɛ adalah satu-satunya
maka hasil penyederhanaannya: produksi dari C, maka S Cd
diganti dengan S d.
S bcAd
Hasilnya:
A bd
S Ab | d
Ad
Contoh kasus 3:
Contoh kasus 2:
S AaCD
S dA | Bd A CD | AB
A bc Bb|Ɛ
AƐ Cd|Ɛ
Bc DƐ
Hasil penyederhanaan: Hasil penyederhanaan:
S dA | d | Bd S AaC | aC | Aa | a
A bc A C | AB | A | B
Bc Bb
Cd
Penghilangan
Penghilangan Penghilangan Simplified
CFG Produksi
Produksi Ɛ Produksi Unit CFG
Useless
Urutan:
1. Hilangkan produksi Ɛ
2. Hilangkan produksi unit
3. Hilangkan produksi useless
(2) Hasil penghilangan produksi unit:
Contoh kasus 1: S AA | de | bd
S AA | C | bd A Bb
B AB | d
A Bb | Ɛ
C de
B AB | d Penghilangan produksi unit bisa
C de memunculkan produksi useless
(1) Hasil penghilangan produksi Ɛ: (3) Hasil penghilangan produksi useless:
S AA | de | bd
S AA | C | bd
A Bb
A Bb B AB | d
B B | AB | d Hasilnya, CFG yang telah disederhanakan
C de telah terbebas dari produksi null,
produksi unit dan produksi useless.
Fauzi Adi Rafrastara