Anda di halaman 1dari 30

Analisis Sintaksis

Istiqomah, S.Kom [Teknik Kompilasi UNIKOM 2014]


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
 Grammar dipakai oleh analisis sintaksis untuk menentukan struktur dari
program sumber.
Definisi Analisis Sintaks

 Proses pendeteksian atau pemeriksaan urutan kemunculan token disebut


dengan istilah Parsing.
 Parsing adalah konstruksi atau pembentukan Pohon Sintaks untuk suatu
kalimat (ekspresi).
Pohon Sintaks

 Pohon Sintaks berguna untuk menggambarkan bagaimana memperoleh


suatu string (untai) dengan cara menurunkan simbol-simbol non-terminal
(variable) menjadi simbol terminal.
Contoh 1

 Misal terdapat sebuah kalimat


The cat sat on the mat
Contoh 2

Misal terdapat aturan tata bahasa bebas


konteks dengan aturan produksi :

S  AB
A  aA | a
B  bB | b

String yang dihasilkan adalah ‘aabbb’


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


terkanan yang diperluas lebih dulu.
Contoh 3

Misal terdapat tata bahasa  Penurunan Kiri  Penurunan Kanan


bebas konteks : S  aAS S  aAS
S  aAS | a
» S  aSbAS » S  aAa
A  SbA | ba » S  aabAS » S  aSbAa

» S  aabbaS » S  aSbbaa

» S  aabbaa » S  aabbaa
Contoh 3 (lanjutan)

a A S

a
S b A

a b a
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
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.
Parsing dengan Brute Force

 Misal :
S  aAd | aB
Ab|c
B  ccd | ddc
Lakukan parsing untuk
String ‘accd’
Parsing dengan Brute Force (Rekursif Kiri)

 Aturan produksi dalam bentuk :


AA
dengan  = (V  T)* atau kumpulan simbol variabel dan terminal
Contoh :
S  Sd
B  Bad
Parsing dengan Brute Force (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.
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
Tentukan aturan produksi yang bisa diterima.
Contoh 4 (lanjutan)

 Aturan produksi (P) yang dicobakan  ET|E+T|E–T


adalah : TF|T*F|T/F
 ET|T+E|T–E F  i diterima, walaupun rekursif kiri
TF|F*T|F/T
F  i diterima  EE+T|E–T|T
TF*T|F/T|F
F  i tidak diterima, karena rekursif kiri
menyebabkan looping.
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 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
 Hasil akhir berupa aturan produksi ditambah dengan aturan produksi semula yang tidak rekursif kiri.
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
Bukan Rekursif kiri : S  aSc | dd | ff => 1 = aSc, 2 = dd, 3 = ff
Contoh 5 (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, maka harus
diubah dulu sehingga tidak rekursif kiri, Karena rekursif kiri akan
mengalami Loop yang terus-menerus
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
(variabel).
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
mengambil token.
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
menggunakan scanner yang “dapat dipercaya”.
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>
Dan seterusnya….
Contoh 7 (lanjutan)
Contoh 7 (lanjutan)
Contoh 7 (lanjutan)
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

Anda mungkin juga menyukai