• Tidak ada hasil yang ditemukan

08. ANALISIS SINTAKS - Teknik Kompilasi.zip

N/A
N/A
Protected

Academic year: 2018

Membagikan "08. ANALISIS SINTAKS - Teknik Kompilasi.zip"

Copied!
11
0
0

Teks penuh

(1)

08. ANALISIS SINTAKS

ƒ

A

nalisis sintaks atau parsing atau pengurai menerima sekumpulan token dari penganalisis leksikal (seperti gambar berikut), dan menguji bahwa kumpulan token itu dapat dibentuk oleh tatabahasa dari bahasa sumbernya.

ƒ Posisi Penganalisa Sintaks (Parser) dalam proses kompilasi adalah sebagai berikut :

ƒ Sedangkan yang dimaksud dengan parsing dari sebuah kalimat adalah konstruksi atau pembentukan pohon sintaks untuk kalimat tersebut.

ƒ Hubungan struktural antar bagian kalimat, dapat dilihat dari bentuk pohon sintaks kalimat tersebut. Sebagai contoh sebuah derivasi dari identifier x2 adalah

<identifier> Ö <identifier><digit>

Ö <letter> <digit>

Ö x <digit>

Ö x2

ƒ Bagaimana cara mengkonstruksi sebuah pohon sintaks pada derivasi ini dapat dilihat pada Gambar 4.2 berikut. Gambar ini memuat sebuah barisan diagram, dengan masing-masing diagram bersesuaian dengan sebuah bentuk sentensial dalam derivasi dari kalimat tersebut.

Source program

lexical analyzer

token

Get next token

symbol table

(2)

Contoh bentuk sentensial:

Sebuah Grammar G sbb:

G = ({<identifier>,<letter>,<digit>}, {a,b,...,z,0,1,...,9}, <identifier>, Q) dengan produksi Q adalah:

<identifier>→ <letter>  <identifier><letter>  <identifier><digit> <letter> → ab...yz

<digit> → 01...9

Bentuk sentensial dari identifier ini diperoleh dari deretan produksi : <identifier>→ <identifier><letter>

→ <identifier><digit><letter>

→ <letter><digit><letter>

Di sini terdapat beberapa phrase yaitu; <letter>, <identifier><letter>, <identifier><digit><letter>, <letter><digit><letter>.

Sedangkan <digit> tidak terdapat dalam derivasi ini, jadi <digit> adalah

bukan phrase dari bentuk sentensial ini.

Pohon sintaks mempunyai sebuah simpul yang spesifik, yang disebut dengan root (akar). Simpul root ini diberi label Start, yakni <identifier>, dari Grammar.

(3)

Simbol <identifier> dalam bentuk sentensial <identifier><digit> kemudian ditulis menjadi <letter>, sesuai dengan produksi <identifier> → <letter>. Proses ini berlangsung terus untuk masing-masing produksi yang digunakan sampai diperoleh pohon sintaks lengkap untuk x2.

ƒ Pohon sintaks untuk sebuah kalimat selalu mempunyai sebuah simpul akar yang diberi label berupa simbol Start dari Grammar.

ƒ Simpul Daun dari pohon sintaks menyajikan simbol terminal dalam kalimat yang telah diuraikan. Semua simpul bukan daun menyajikan simbol nonterminal. Tiap-tiap simpul non-terminal mempunyai sejumlah cabang ke bawah.

ƒ Masing-masing cabang menyajikan sebuah simbol pada ruas kanan dari produksi yang dipergunakan.

Sebagai contoh derivasi identifier b33, adalah sebagai berikut: <identifier> Ö <identifier><digit>

Ö <identifier><digit><digit>

Ö <letter><digit><digit>

Ö b <digit><digit>

Ö b3 <digit>

Ö b33

Kemungkinan lain derivasi untuk identifier yang sama adalah: <identifier> Ö <identifier><digit>

Ö <identifier><digit><digit>

Ö <identifier><digit>3

Ö <identifier>33

Ö <letter>33

Ö b33

(4)

Contoh lain membuat pohon sintaks dari sebuah Grammar sbb.:

G = ({<ekspresi>,<faktor>,<term>}, {i,+,*,(,)}, <ekspresi>, Q) dengan Q terdiri dari produksi

<faktor> → i  <ekspresi>

<term> → <faktor>  <ekspresi> * <faktor> <ekspresi> → <term>  <ekspresi> + <term>

Di sinii digunakan untuk menyatakan sebuah identifier atau nama variabel. Pohon sintaks dari bentuk sentensial <ekspresi> + <term> * <faktor> diberikan pada gambar berikut dengan <ekspresi> + <term> * <faktor> dan <term> * <faktor> adalah phrase.

Di sini <term> * <faktor> adalah simple phrase.

Perlu dicatat bahwa untuk sebuah pohon sintaks dapat ada satu atau lebih derivasi.

Selain itu perlu dijelaskan bahwa pada kalimat yang sama dapat mempunyai dua phrase yang berarti mempunyai dua pohon sintaks yang berbeda. Hal ini dapat dijelaskan sbb.:

Sebuah Grammar G dengan produksi sbb.:

S → S * S

S → a

di sini a adalah simbol terminal. Salah satu derivasinya adalah

S Ö S * S

Ö S * S * S

Ö a * S * S

Ö a * a * S

Ö a * a * a atau

S Ö S * S

Ö S * S * S

Ö S * S * a

Ö S * a * a

(5)

Kedua derivasi ini dapat digambarkan dengan pohon sintaks sbb.:

Definisi

ƒ Sebuah kalimat yang dihasilkan oleh sebuah Grammar adalah

Ambiguous, jika terdapat lebih dari satu Pohon Sintaks yang dapat membentuk kalimat tersebut. Sebuah Grammar adalah Ambiguous, jika ia menghasilkan paling sedikit satu kalimat Ambiguous.

ƒ Ada beberapa metode pengurai (parser) untuk suatu Grammar. Metoda-metoda yang lazim dipakai dalam kompilator dapat diklasifikasikan sebagai metoda atas-bawah (top-down parser) dan bawah-atas ( bottom-up parser). Pengurai top-down membentuk pohon urai (parse tree) dari atas (akar) ke bawah (daun), sedangkan pengurai bottom-up memulai dari daun dan bergerak ke akarnya. Pada kedua metoda itu, masukan pengurai tersebut disaring dari kiri ke kanan, sekali satu symbol.

4.1 PARSING TOP-DOWN

ƒ Konstruksi pohon sintaks atau parsing top-down dapat digambarkan sbb.:

Di sini akar dan daun mewakili simbol terminal dalam kalimat.

ƒ Ada beberapa metode yang dapat digunakan untuk menyelesaikan konstruksi ini. Pertama, usahakan konstruksi pohon dapat dimulai dari akar dan dilanjutkan turun ke bawah menuju daun. Metode ini disebut

Top-Down Parsing.

ƒ Untuk menjelaskan tentang metode top-down parsing, pandang identifier x2 yang dibentuk oleh Grammar sbb.:

G = ({<identifier>,<letter>,<digit>}, {a,b,...,z,0,1,...,9}, <identifier>, Q)

ƒ Langkah pertama adalah mengkonstruksi derivasi langsung <identifier> Ö <identifier><digit>

ƒ Pada setiap urutan langkah, nonterminal paling kiri α dari bentuk sentensial Q1αQ2, diganti dengan bagian kanan dari produksi A → ψ,

(6)

ƒ Secara garis besar ada 2 metode Top-Down parsing, yakni metode dengan backup, dan metode tanpa backup. Backup adalah pengulangan penggunaan suatu produksi dengan alternatif produksi yang lain, bila produksi yang digunakan tidak sesuai dengan simbol input. Metode yang pertama (metode dengan backup) di antaranya adalah teknik Brute Force, dan metode yang kedua (metode tanpa backup) di antaranya

adalah teknik Recursive Descent.

ƒ Berikut ini merupakan contoh yang memperlihatkan cara kerja metode Brute Force, berdasarkan Grammar dengan produksi berikut:

1. S → aAd

Di sini S, A, dan B adalah simbol nonterminal, dengan S adalah simbol Start. Sedangkan a, b, c, dan d adalah simbol terminal.

SINTAKS

Definisi Sintaks

ƒ Pendefisian Sintaks suatu bahasa dilakukan dengan menggunakan suatu notasi tata bahasa bebas konteks (context-free grammar) atau untuk memudahkan disebut tata bahasa saja.

ƒ Suatu tata bahasa secara alamiah menerangkan struktur hirarki dari banyak bentuk bahasa pemrograman. Misalkan perintah if-else dari bahasa C mempunyai bentuk:

if (ekspresi) perintah else perintah Ket :

Dalam hal ini suatu perintah adalah gabungan dari : - kata kunci if

(7)

ƒ Bila digunakan nama variabel expr untuk menyatakan suatu ekspresi dan variabel stmt untuk menyatakan suatu perintah, maka struktur aturan ini dapat dinyatakan sebagai berikut :

stmt → if (expr) stmt else stmt Ket:

→ (tanda panah dibaca sebagai) "Dapat berbentuk suatu". Aturan diatas disebut juga suatu produksi (production).

Dalam suatu produksi seperti ini unsur leksikal seperti kata kunci if dan tanda kurung "(",")" disebut suatu token

Variabel seperti expr dan stmt disebut dengan non-terminal.

Secara lengkap suatu tata bahasa bebas konteks dapat mempunyai 4 komponen berikut:

1. Himpunan dari token yang dikenal dengan simbol token. 2. Himpunan dari unsur non-terminal

3. Himpunan dari produksi, di mana masing-masing produksi terdiri dari unsur non-terminal (bagian kiri tanda panah dari suatu produksi). Bagian kanan produksi berupa → (tanda panah) dan barisan dari token dan/atau non-terminal (sebelah kanan tanda panah).

4. Salah satu unsur non-terminal yang telah ditentukan sebagai awal tata bahasa disebut sebagai simbol awal.

Aturan umum yang digunakan dalam menentukan suatu tata bahasa adalah dengan menuliskan produksi yang ada dengan dimulai dari produksi yang mengandung simbol awal.

ƒ Terminal dapat berupa angka-angka, tanda-tanda seperti <=, dan rangkaian karakter yang ditulis huruf tebal seperti while dan lain-lainnya juga nama lain yang tidak dicetak miring.

ƒ Non-teminal dapat berupa nama yang dicetak miring.

Untuk memudahkan penulisan, maka produksi yang mempunyai simbol non-teminal disebelah kiri yang sama bagian kanannya dapat dikelompokkan dengan menggunakan tanda "|" yang memisahkan pilihan bagian kanan yang ada. pengelompokkan seperti ini dapat dibaca sebagai "atau"

Contoh 1:

(8)

Tata bahasa berikut memberkan sintaks dari ekspresi-ekspresi di atas. Produksi yang ada adalah:

list → list + digit list → list – digit list → digit

digit → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Bagian kanan dari produksi untuk unsur non-terminal list list → list + digit

list → list – digit list → digit

di bagian kiri dapat dikelompokkan menjadi 1 produksi yang setara, yaitu: list → list + digit | list - digit | digit

- Penulisan Produksi menjadi:

- list → list + digit | list - digit | digit - digit → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

- Token yang menjadi terminal digunakan adalah simbol +,-,0,1,2,3,4,5,6,7,8,9

- Sedangkan unsur non-terminal adalah nama-nama yang digaris miring seperti list dan digit

- Simbol Awal adalah produksi non-terminal list

ƒ Suatu unsur non-terminal dapat merupakan suatu produksi bila unsur non-terminal tersebut timbul dibagian kiri dari produksi

ƒ Barisan token adalah barisan dari nol atau lebih token. Unsur yang mengandung nol token ditulis sebagai ε, dan disebut dengan nama barisan kosong

Suatu bahasa diperoleh dari :

- barisan-barisan yang dimulai dari simbol awal

- bagian kanan yang masih berupa non-terminal (bukan token/terminal) dari produksi dapat diganti dengan mencari acuan pada bagian kiri dari produksi yang ada dengan non-terminal yang sama.

- mengganti unsur non-terminal pada bagian kiri produksi dengan bagian kanan dari produksi non-terminal tersebut.

(9)

Contoh 2:

ƒ Bahasa yang didefinisikan oleh tata bahasa pada contoh 1 terdiri dari barisan angka-angka yang dipisahkan oleh tanda '-' atau '+'.

ƒ Kesepuluh produksi dari unsur nonterminal digit (digit → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9) dapat digunakan sebagai penganti token-token yang berhubungan dengan angka yaitu 0,1,2,3,4,5,6,7,8,9 dari produksi list → digit, maka dapat dikatakan bahwa 1 angka yang berdiri sendiri adalah suatu list juga, yaitu :

Pada produksi list → digit

0 merupakan bahasa yang dibentuk list 1 merupakan bahasa yang dibentuk list 2 merupakan bahasa yang dibentuk list 3 merupakan bahasa yang dibentuk list 4 merupakan bahasa yang dibentuk list 5 merupakan bahasa yang dibentuk list 6 merupakan bahasa yang dibentuk list 7 merupakan bahasa yang dibentuk list 8 merupakan bahasa yang dibentuk list 9 merupakan bahasa yang dibentuk list

Pada produksi lainnya list → list + digit list → list – digit

menyatakan bahwa list yang diikuti oleh tanda '+' atau '-' dan diikuti oleh list akan membentuk suatu list baru.

Ternyata semua produksi yang digunakan pada contoh 1 adalah produksi-produksi yang diperlukan untuk dapat mendefinisikan bahasa yang diinginkan untuk ekspresi 9-5+2, 3-1, 7

9-5+2 merupakan salah satu anggota dari bahasa yang dibentuk list, dimana list adalah simbol awal.

Hal ini dapat ditunjukkan sebagai berikut:

a. 9 merupakan list dari produksi "list → digit" dimana digit membentuk 9 pada "digit → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9" atau secara terpisah menjadi

(10)

digit → 3 digit → 4 digit → 5 digit → 6 digit → 7 digit → 8 digit → 9.

b. 9-5 merupakan list dari produksi "list → list - digit" dimana 9 sudah berupa list dan digit membentuk 5 pada "digit → 5".

c. 9-5+2 merupakan list dari produksi "list → list + digit" = (9-5) + 2. Dimana 9-5 sudah berupa list dan digit membentuk 2 pada "digit → 2".

Hal ini dapat dilihat pada gambar 1 berikut ini

ƒ Gambar 1 Pohon urai dari ekspresi 9-5+2 menurut tata bahasa contoh 1

ƒ Pada gambar ini setiap nodal (titik pertemuan antar garis) pada pohon urai diberi label salah satu simbol tata bahasa.

ƒ Nodal dalam (internal node / nodal di atas nodal yang lain) dan anak-anaknya (nodal yang terletak di bawah nodal dalam) berhubungan dengan suatu produksi.

ƒ Nodal dalam berhubungan dengan bagian kiri dari produksi, sedangkan anak-anaknya berhubungan dengan bagian kanan dari produksi yang sama.

ƒ Pohon demikian disebut pohon urai dari ekspresi yang diberikan

Contoh 3

ƒ Pada bahasa Pascal dapat dijumpai dalam cakupan blok begin-end. Salah satu perbedaan yang sangat mencolok yang terdapat pada contoh adalah adanya list dari perintah-perintah yang mungkin kosong diantara token-token begin dan end. Untuk itu dikembangkan suatu tata bahasa yang mengandung produksi berikut:

(11)

opt_stmts → stmt_list | ε

stmt_list → stmt_list εstmt | stmt

ƒ Pada produksi opt_stmts, kemungkinan ke-2 bagian kanan pada "opt_stmts → stmt_list | ε" adalah perintah yang boleh memilih "ε", yang mengartikan rangkaian kosong dari simbol-simbol. Jadi suatu blok dapat hanya terdiri dari 2 token yaitu begin dan end

Referensi

Dokumen terkait

4, 6, 8 ppm larutan standar nitrat yang ditambahkan ke dalam cuplikan diperoleh recovery berkisar antara 99,88 – 106,89 %, sehingga dapat dikatakan alat dan metode uji

Selain menunjukkan bahwa kedua bangsa sapi ini mempunyai respon yang sama terhadap lingkungan, hasil ini juga menunjukkan bahwa tingkat konsumsi pakan (% BB) lebih mudah

Dan di Bulan Oktober dimana kita menyambut hari Reformasi, maka memulai suatu kegiatan baru yaitu mengajak dan menghimbau seluruh anggota jemaat yang sudah dan belum membaca

Menimbang, bahwa terlepas dari ketentuan-ketentuan formil sebagaimana terurai di atas, dalam perkara aquo, disamping ada kepentingan hukum Para Pemohon, juga

Communication Objective Dari riset penyelenggara pasca event yang dilakukan melalui 60 responden yang mengetahui Klub sepatu roda kota Semarang, sebanyak 43, yang berminat gabung

Kalimantan Selatan 252 Irsa Moch.. Munawir

Sifat formaldehida yang mudah terhidrolisis atau larut dalam air menyebabkan formaldehida yang seharusnya mengikat urea dan tanin agar daya rekat menjadi kuat lebih terikat atau

Aturan-aturan telah menjadi landasan bagi KJRI Davao City dalam mengeluarkan kebijakan dan upaya-upaya untuk menyelesaikan permasalahan masyarakat keturunan Indonesia di