Istiqomah, S.Kom [Teknik Kompilasi UNIKOM 2013] Analisis Sintaksis Istiqomah, S.Kom [Teknik Kompilasi UNIKOM 2013]
Analisis Sintaks (Parsing) 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 (variable) menjadi simbol terminal.
Contoh 1 Misal terdapat aturan tata bahasa bebas konteks dengan aturan produksi : S AB A aA | a B bB | b
Metode Parsing Top Down Metode ini melakukan penelusuran dari root/puncak menuju leaf/daun (S - T). Meliputi : Backtrack/backup (Brute Force) & No Backtrack (Recursive Descent Factor) Bottom Up Metode ini melakukan penulusuran dari leaf/daun menuju ke root/puncak. (T-S)
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 Misal : S aAd | aB A b | c B ccd | ddc Lakukan parsing untuk String ‘accd’
Contoh 3 Terdapat grammar/tata bahasa G = {V, T, S, P} V = {“E”, “T”, “F”} Simbol non-terminal T = {“i”, “*”, “/”, “+”, “-” } Simbol terminal S = “E” Simbol awal String yang diinginkan adalah i*i Tentukan aturan produksi yang bisa diterima.
Contoh 3 (lanjutan) Aturan produksi (P) yang dicobakan adalah : E T | T + E | T – E T F | F * T | F / T F i diterima E T | E + T | E – T T F | T * F | T / F F i diterima, walaupun rekursif kiri E E + T | E – T | T T F * T | F / T | F F i tidak diterima, karena rekursif kiri menyebabkan looping.
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 Aturan produksi dalam bentuk : A A dengan = (V T)* atau kumpulan simbol variabel dan terminal Contoh : S dS B adB
Rekursif Kiri Aturan produksi dalam bentuk : A A dengan = (V T)* atau kumpulan simbol variabel dan terminal Contoh : S Sd B Bad
Rekursif Kiri Dalam banyak penerapan tata bahasa, rekursif kiri tak dinginkan Untuk menghindari penurunan yang bisa mengakibatkan looping, perlu dihilangkan 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 4 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 4 (lanjutan) S aScZ | ddZ | ffZ Z ab | bd Z abZ | bdZ 2. Lakukan pergantian S aScZ | ddZ | ffZ Z ab | bd Z abZ | bdZ 3. Hasil akhir yang didapat S aSc | dd | ff S aScZ | ddZ | ffZ 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
Latihan Lakukan penghilangan rekursif kiri dari : A Abc | cd | Afg | Ai | d