Anda di halaman 1dari 14

MEET #4-5 TEKNIK KOMPILASI

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
Ab
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 :
AA
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  A1 | A2 | A3 | …. | An
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

Anda mungkin juga menyukai