• Tidak ada hasil yang ditemukan

Pertemuan 6 Analisis Sintaksis pdf

N/A
N/A
Protected

Academic year: 2018

Membagikan "Pertemuan 6 Analisis Sintaksis pdf"

Copied!
30
0
0

Teks penuh

(1)

Analisis Sintaksis

(2)

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

(3)

Definisi Analisis Sintaks

 Proses pendeteksian atau pemeriksaan urutan kemunculan token disebut

dengan istilah Parsing.

Parsing adalah konstruksi atau pembentukan Pohon Sintaks untuk suatu

(4)

Pohon Sintaks

 Pohon Sintaks berguna untuk menggambarkan bagaimana memperoleh

suatu string (untai) dengan cara menurunkan simbol-simbol non-terminal

(5)

Contoh 1

 Misal terdapat sebuah kalimat

(6)

Contoh 2

Misal terdapat aturan tata bahasa bebas

konteks dengan aturan produksi :

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

(7)

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

(8)

Contoh 3

Misal terdapat tata bahasa

(9)
(10)

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

(11)

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.

(12)
(13)

Parsing dengan Brute Force (Rekursif Kiri)

 Aturan produksi dalam bentuk :

A  A 

dengan  = (V  T)* atau kumpulan simbol variabel dan terminal

Contoh :

S  Sd

(14)

Parsing dengan Brute Force (Rekursif Kiri)

 Dalam banyak penerapan tata bahasa, rekursif kiri tak dinginkan

 Untuk menghindari penurunan yang bisa mengakibatkan looping, perlu

(15)

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

(16)

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

(17)

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 …. 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

(18)

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

(19)

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

(20)

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

(21)

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

(22)

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

(23)

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

(24)

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>

(25)
(26)
(27)
(28)

Latihan

 Lakukan parsing dengan metode brute force, untuk mendapatkan string

‘adssfd’ dari :

S  aAd | Ba | cd

A  b | c | Bf

(29)

Latihan

(30)

Referensi

Dokumen terkait