#4 Analisa Sintaks (Brute Force Parsing)
#4 Analisa Sintaks (Brute Force Parsing)
ANALISA SINTAKS
(PARSER)
Dewi Widyawati, S.Kom., M.Kom
ANALISA SINTAKS
• Parsing merupakan tahapan yang berguna untuk memeriksa urutan
kemunculan token.
• Parsing adalah konstruksi atau pembentukan Pohon Sintaks untuk suatu
kalimat (ekspresi).
• Pohon Sintaks menggambarkan bagaimana memperoleh suatu string dengan
cara menurunkan simbol non-terminal (variabel) menjadi simbol terminal.
• Proses penurunan atau parsing bisa dilakukan dengan cara :
• Penurunan terkiri (leftmost derivation): simbol variabel terkiri yang
diperluas terlebih dulu
• Penurunan terkanan (rightmost derivation): simbol variabel terkanan
yang diperluas terlebih dulu
Contoh 1
Misal terdapat tata bahasa bebas konteks dengan
aturan produksi:
S AB
A aA| a
B bB| b
Untuk mendapatkan penurunan “aabbb”
Dengan penurunan terkiri: S AB aAB aaB
aabB aabbB aabbb
Dengan penurunan terkanan: S AB AbB
AbbB Abbb aAbbb aabbb
METODE PARSING
Proses parsing merupakan tahapan analisis sintaksis yang berguna untuk
memeriksa urutan kemunculan token. Di dalam mengimplementasikan
sebuah metode parsing ke dalam program perlu diperhatikan tiga hal:
Rentang waktu eksekusi
Penanganan kesalahan
Penanganan kode
Metode parsing bisa digolongkan sebagai berikut:
1. Top down. Penelusuran dari root/puncak menuju ke leaf/daun (simbol
awal sampai simbol terminal). Metode top down sendiri meliputi:
a. Backtrack/backup: Brute Force
b. No backtrack: Recursive Descent Parser
2. Bottom Up. Penelusuran dari leaf/daun menuju ke root/puncak.
Pembahasan berikutnya adalah metode top down parsing dan buttom up.
PARSING DENGAN BRUTE FORCE
Metode ini memilih aturan produksi dari paling kiri
Kemudian melakukan expand semua non terminal pada aturan
produksi sampai yang tertinggal adalah simbol terminal.
Bila terjadi kesalahan (string tidak sesuai) maka akan dilakukan
backtrack.
Algoritma ini membangun pohon parsing yang top down, yaitu
mencoba segala kemungkinan yang ada secara satu persatu.
Contoh 2
Contoh suatu bahasa dengan aturan produksi:
S aAd | aB
Ab
B ccd | ddc
Misal ingin dilakukan parsing untuk string: ‘accd’ tahapan yang terjadi bisa
dilihat pada gambar berikut :
ATURAN PRODUKSI REKURSIF
Aturan produksi yang memiliki ruas kanan (hasil produksi) yang
memuat simbol variabel pada ruas kiri.
Ada 2 macam :
1. Rekursif kanan
2. Rekursif kiri
REKURSIF KANAN
Produksi yang rekursif kanan menyebabkan pohon penurunan tumbuh ke
kanan.
Aturan produksi dalam bentuk :
A A
dengan = (V T)* atau kumpulan simbol variabel dan terminal
Contoh :
S dS
B adB
REKURSIF KIRI
Produksi yang rekursif kiri menyebabkan pohon penurunan tumbuh ke kiri.
Bisa dilihat pohon penurunan pada gambar berikut.
Aturan produksi dalam bentuk :
AA
dengan = (V T)* atau kumpulan simbol variabel
dan terminal.
Contoh :
S Sd
B Bad
Dalam banyak penerapan tata bahasa, rekursif kiri
tak diinginkan. Untuk menghindari penurunan yang bisa mengakibatkan
looping kita perlu menghilangkan sifat rekursif kiri dari aturan produksi.
PENGHILANGAN REKURSIF KIRI
Pisahkan aturan produksi yang rekursif kiri dan tidak, misal :
Rekursif kiri : A A1 | A2 | A3 | …. | An
Bukan Rekursif kiri : A 1 | 2 | 3 | …. | m
Lalu tentukan 1 , 2 …. n dan 1 , 2 …. m dari setiap aturan produksi
yang memiliki symbol ruas kiri yang sama.
Lakukan penggantian aturan produksi yang rekursif kiri.
1. A 1Z | 2Z | …. | mZ
2. Z 1 | 2 | …. | n
3. Z 1Z | 2Z | …. | nZ
Hasil akhir berupa aturan produksi ditambah dengan aturan produksi semula
yang tidak rekursif kiri.
Contoh 3
Tata bahasa bebas konteks :
S Sab | aSc | dd | ff | Sbd
Langkah Pengilangan rekursif kiri
1. Pisahkan
Rekursif kiri : S Sab | Sbd => 1 = ab, 2 = bd
Bukan Rekursif kiri : S aSc | dd | ff => 1 = aSc, 2 = dd, 3 = ff
Contoh 3 lanjutan
2. Lakukan pergantian 3. Hasil akhir yang didapat
S aScZ | ddZ | ffZ S aSc | dd | ff
Z ab | bd S aScZ | ddZ | ffZ
Z abZ | bdZ Z ab | bd
Z abZ | bdZ
Kelemahan Metode Brute Force
Mencoba untuk semua aturan produksi yang ada sehingga menjadi lambat
(rentang waktu eksekusi tidak jelas).
Mengalami kesukaran untuk melakukan pembetulan kesalahan.
Memakan banyak memori, karena perlu mencatat (backup) lokasi
backtrack.
Grammar yang memiliki Rekursif Kiri tidak bisa diperiksa, sehingga
harus diubah dulu sehingga tidak rekursif kiri, Karena rekursif kiri akan
mengalami Loop yang terus-menerus.
Latihan
Lakukan parsing dengan metode brute force, untuk mendapatkan string
‘adssfd’ dari :
S aAd | Ba | cd
A b | c | Bf
B aef | dss