Analisis Sintaksis
Definisi Analisis Sintaks
Pengelompokkan token-token ke dalam class syntax (bentuk sintaks),
seperti procedure, statement, dan expression.
Grammar : sekumpulan aturan-aturan untuk mendefinisikan bahasa sumber
Definisi Analisis Sintaks
Proses pendeteksian atau pemeriksaan urutan kemunculan token disebut
dengan istilah Parsing.
Parsing adalah konstruksi atau pembentukan Pohon Sintaks untuk suatu
Pohon Sintaks
Pohon Sintaks berguna untuk menggambarkan bagaimana memperoleh
suatu string (untai) dengan cara menurunkan simbol-simbol non-terminal
Contoh 1
Misal terdapat sebuah kalimat
Contoh 2
Misal terdapat aturan tata bahasa bebas
konteks dengan aturan produksi :
S AB A aA | a B bB | b
Teknik Penurunan
Proses penurunan/parsing bisa dilakukan dengan cara :
1. Penurunan terkiri (leftmost derivation), simbol variabel
terkiri yang diperluas lebih dulu.
2. Penurunan terkanan (rightmost derivation), simbol variabel
Contoh 3
Misal terdapat tata bahasa
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 Parser)
Bottom 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.
Parsing dengan Brute Force (Rekursif Kiri)
Aturan produksi dalam bentuk :
A A
dengan = (V T)* atau kumpulan simbol variabel dan terminal
Contoh :
S Sd
Parsing dengan Brute Force (Rekursif Kiri)
Dalam banyak penerapan tata bahasa, rekursif kiri tak dinginkan
Untuk menghindari penurunan yang bisa mengakibatkan looping, perlu
Contoh 4
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
Contoh 4 (lanjutan)
Aturan produksi (P) yang dicobakan adalah :
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
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 …. ndan 1, 2…. mdari setiap aturan produksi yang memiliki simbol 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
Contoh 5
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
Contoh 5 (Lanjutan)
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
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, maka harus
diubah dulu sehingga tidak rekursif kiri, Karena rekursif kiri akan
Parsing dengan Recursive Descent Parser
Salah satu cara untuk mengaplikasikan bahasa bebas konteks untuk
melakukan analisa sintaksis suatu source code
Pada tahap ini, simbol terminal maupun simbol non-terminal (variabel)
sudah bukan sebuah karakter, tetapi berupa besaran leksikal sebagai
simbol terminalnya dan besaran sintaks sebagai simbol non-terminal
Parsing dengan Recursive Descent Parser
Ciri dari RDP yang menonjol secara rekursif menurunkan semua variabel
dari awal sampai bertemu terminal dan tidak pernah mengambil token
secara mundur.
Ciri lain dari RDP adalah sangat bergantung pada algoritma scan dalam
Contoh 6
Apabila t_ASS (:=) diartikan oleh scanner sebagai t_COL (:) dan t_E (=), maka parser tidak dapat mengenali bahwa itu sebenarnya adalah t_ASS,
Untuk itu, apabila ingin menggunakan RDP, maka disarankan untuk
Contoh 7
Sebuah grammar memiliki aturan produksi sebagai berikut :
<program> ::= t_PROG t_ID t_SEMICOL <block> t_DOT
<block> ::= t_BEGIN <statement> {t_SEMICOL <statetment>} t_END
<statement> ::= t_ID t_ASS <simple_exp> | t_IF <exp> t_THEN <statement> |
t_IF <exp> t_THEN <statement> t_ELSE <statement>
<exp> ::= <simple_exp> t_EQ <simple_exp> | <simple_exp> t_LT
<simple_exp> | <simple_exp> t_GT <simple_exp>
Latihan
Lakukan parsing dengan metode brute force, untuk mendapatkan string
‘adssfd’ dari :
S aAd | Ba | cd
A b | c | Bf