Pengantar Teknik Kompilasi Bahasa Context Free
Grammar Grammar atau tatabahasa digunakan untuk menentukan sintaksis dari sebuah bahasa Umumnya menggambarkan struktur hirarki dalam susunan bahasa pemrograman if (expression) statement else statement stmt if ( expr ) stmt else stmt
Grammar Lexical error, diantaranya salah eja identifier, keyword, atau operator, juga kurang simbol “ untuk teks yang dimaksudkan sebagai string Syntatic error, diantaranya simbol ; yang salah lokasi atau kekurangan/kelebihan simbol (, ), {, atau }
Klasifikasi Chomsky Unrestricted Context Sensitive Regular Context free Regular
Klasifikasi Chomsky Tipe 2 Juga dikenal dengan Context Free Grammar V, (VTVN)* Ruas kiri haruslah tepat satu simbol variabel B CDeFg D BcDe
CFG Nested Structure
CFG Bahasa Regular memiliki batasan bahwa nested structure tidak dapat diekspresikan Mesin stata hingga tidak mampu mengenali kalimat dari bahasa context free A a A c | b
Struktur Kompiler Program Sumber Program Sasaran TABEL SIMBOL ANALISA SINTESA Penganalisa Semantik Pembangkit Kode antara Penganalisa Leksikal (scanner) Penganalisa Sintaks (parser) Pembentuk kode Pengoptimal kode TABEL SIMBOL
Derivasi & Pohon Sintaks Analisis sintaks adalah penelusuran sebuah kalimat (atau sentensial) sampai pada simbol awal grammar Analisis sintaks dapat dilakukan melalui derivasi atau parsing Penelusuran melalui parsing menghasilkan pohon sintaks
Derivasi & Pohon Sintaks Sebuah grammar melakukan derivasi untai dimulai dari simbol awal dan secara berulang mengganti simbol non-terminal Untai terminal yang dapat diturunkan dari simbol awal membentuk bahasa yang didefinisikan oleh grammar
Derivasi & Pohon Sintaks list list + digit list list - digit list digit digit 0 | 1 | 2 | … | 9 list list + digit | list – digit | digit Apakan 9 - 5 + 2 termasuk list? 9 termasuk list, karena 9 adalah digit 9 - 5 termasuk list, karena 9 adalah list dan 5 adalah digit 9 - 5 + 2 termasuk list, karena 9 - 5 adalah list dan 2 adalah digit
Derivasi & Pohon Sintaks Parsing adalah mengambil sebuah untai terminal dan mencari cara menurunkannya dari simbol awal Apabila tidak dapat dilakukan derivasi dari simbol awal maka dilaporkan sebagai syntax error Proses parsing dilakukan dengan membentuk pohon sintaks
Derivasi & Pohon Sintaks Sebuah pohon terdiri atas satu atau lebih node Tepat satu node merupakan root dan berada paling atas (tidak memiliki parent) Node tanpa children disebut leaf, sedangkan yang memiliki satu atau lebih children disebut interior node Root diberi label simbol awal Setiap leaf diberi label terminal atau Setiap interior node diberi label nonterminal
Derivasi & Pohon Sintaks list list + digit list - digit 2 digit 5 9
Derivasi & Pohon Sintaks Strategi penulisan saat melakukan derivasi secara umum dibagi 2: Leftmost derivation Rightmost derivation S S + S S 1 | a Untai yang dibentuk 1 + 1 + a
Derivasi & Pohon Sintaks Leftmost derivation S S + S 1 + S 1 + S + S 1 + 1 + S 1 + 1 + a
Derivasi & Pohon Sintaks Rightmost derivation S S + S S + a S + S + a S + 1 + a 1 + 1 + a
Ambiguous Sebuah kalimat yang mempunyai lebih dari satu pohon sintaks disebut kalimat ambigu (ambiguous) Grammar yang menghasilkan paling sedikit sebuah kalimat ambigu disebut grammar ambigu
Ambiguous G = {S SOSA , O *+, A 012...9} 2 * 3 + 7 S S S O
Ambiguous
Ambiguous Umumnya 9+5+2 diartikan sebagai (9+5)+2 dan 9-5-2 diartikan (9-5)-2 Dalam kebanyakan bahasa pemrograman, empat operator aritmatika (penjumlahan, pengurangan, perkalian, pembagian) termasuk left-associative Beberapa operator misalkan eksponensial atau operator assignment termasuk right- associative a=b=c diartikan sebagai a=(b=c)
Ambiguous Ekspresi 2 * 3 + 7 dapat diinterpretasikan sebagai (2*3)+7 atau 2*(3+7) karena operator + dan * memiliki aturan asosiatif yang sama Aturan mengenai operator precedence dibutuhkan apabila ada lebih dari satu operator dengan jenis yang sama Pada aritmatika umum, perkalian dan pembagian memiliki prioritas yang lebih tinggi (higher precedence) dibanding penjumlahan dan pengurangan
Ambiguous Dangling-else problem Pada banyak bahasa pemrograman, else, pada statement if-then-else, merupakan optional Dua bentuk yang valid adalah if-then dan if- then-else statement if condition then statement | if condition then statement else statement | …
Ambiguous if a then if b then s else s2 dapat diartikan sebagai: if a then begin if b then s end else s2; atau if a then begin if b then s else s2 end Tergantung else diasosiasikan dengan if pertama atau kedua
Ambiguous Masalah ini diatasi dengan berbagai pendekatan sehingga menjadi unambiguous Beberapa grammar dimodifikasi dengan menggunakan statement endif atau dengan membuat else sebagai suatu keharusan Cara lain dengan membuat else diasosiasikan dengan if yang terdekat