BAB 3. ANALISIS SINTAK
BAB 3. ANALISIS SINTAK
PERAN PENGURAI CONTEXT-FREE GRAMMAR PENULISAN GRAMMAR PENGURAIAN TOP-DOWN PENGURAIAN BOTTOM-UP PENGURAIAN OPERATOR-PRECEDENCE PENGURAIAN LR Dr. Nidjo Sandjojo, M.Sc 3.1 Teknik Kompilasi PENGURAIAN LR
PENGGUNAAN AMBIGUOUS GRAMMAR PEMBENTUK PENGURAI
Syntax & Semantics
Syntax & Semantics
Definisi Syntax
à Syntax suatu bahasa pemrograman adalah satu himpunan peraturan yang menjelaskan bagaimana simbol simbol bahasa peraturan yang menjelaskan bagaimana simbol-simbol bahasa dapat dirangkai bersama untuk membentuk pernyataan (statement) yang berarti.
à Aturan formal yang mengatur bagaimana seseorang menulis instruksi yang valid dalam pada suatu bahasa.
Definisi Semantics
à Himpunan aturan yang memberikan artian dari suatu instruksi à Himpunan aturan yang memberikan artian dari suatu
Pendahuluan
Pendahuluan
Setiap bahasa pemrograman mempunyai aturan-aturan yang menjelaskan struktur sintak dari program-program yang dibuatnya.
i l d b h l
Misalnya pada bahasa Pascal:
à Program terbentuk dari beberapa blok. à Blok terbentuk dari beberapa statements. à Statements terbentuk dari beberapa ekspresi. à Ekspresi terbentuk dari beberapa token. à Token terbentuk dari beberapa characters.
Dr. Nidjo Sandjojo, M.Sc 3.3
Teknik Kompilasi
Pendahuluan (cont’d)
Sintak dari bentuk bahasa pemrograman dapat dijelaskan oleh notasi
Context-Free Grammars atau Backus-Naur Form (BNF) yang memberikan
beberapa keuntungan baik kepada perancang maupun penulis beberapa keuntungan baik kepada perancang maupun penulis compilers.
Keuntungan-keuntungan tersebut adalah:
à Spesifikasi sintak jelas dan mudah dimengerti à Efisiensi & dapat menemukan ambiguity
à Mendeteksi kesalahan untuk membuat program yang benar
ilk (b k) b d k
à Menampilkan construct (bentuk) baru dan kemampuan tambahan.
source intermediate
PERAN PENGURAI
PERAN PENGURAI
Lexical token parse Rest of get next token source program intermediate representation Lexical Analyzer Symbol Table parse tree Parser Rest of Front End Dr. Nidjo Sandjojo, M.Sc 3.5 Teknik KompilasiPosition of parser in compiler model
PERAN PENGURAI
PERAN PENGURAI (cont’d)
Penguraian (parsing) adalah proses penentuan apakah satu rangkaian/untaian (string) tokens dapat dibentuk (generated) oleh satu tata bahasa.
satu tata bahasa.
Dalam pembahasan masalah ini akan sangat membantu dengan berfikir bahwa satu pohon urai sedang dibentuk walaupun sebenarnya compiler tidak membentuk pohon urai semacam itu. Namun demikian suatu pengurai (parser) harus dapat membentuk
pohon urai atau bila tidak maka penerjemahan tidak dijamin berjalan benar
PERAN PENGURAI
PERAN PENGURAI (cont’d)
Adapun peran utama pengurai (parser) adalah:
Parser menerima token dari Lexical Analyzer
Menguji bahwa token tersebut dapat dibentuk oleh tata bahasanya Parser melaporkan kesalahan sintak
Parser harus dapat kembali bekerja walau telah menemukan kesalahan sampai proses akhir.
Dr. Nidjo Sandjojo, M.Sc 3.7
Teknik Kompilasi
Perbedaan Pohon Sintak & Pohon Urai
Perbedaan Pohon Sintak & Pohon Urai
POHON SINTAK POHON URAI
Disebut Abstract Syntax Tree atau Syntax Tree
Disebut Concrete Syntax Tree Setiap node
merepresentasikan operator dan anak-anak node merepresentasikan operand
Akar (root)-nya merupakan simbol mulai (start symbol) dan daun-nya merupakan produksi sebelah kanan suatu grammar, atau lebih menekankan grammar)
Contoh:
Pohon syntax untuk 9-5+2
Contoh:
Pohon urai untuk 9-5+2 berdasarkan grammar:
List Æ list + digit List Æ list - digit List Æ digit
Perbedaan Pohon Sintak & Pohon Urai
Perbedaan Pohon Sintak & Pohon Urai (cont’d)
Gambar Pohon Sintak Gambar Pohon Urai
Dr. Nidjo Sandjojo, M.Sc 3.9 Teknik Kompilasi
Tipe Pengurai
Tipe Pengurai
1.Universalà Dapat digunakan untuk menguraikan semua jenis tata bahasa. Sangat tidak efisien digunakan untuk keperluan kompilasi Sangat tidak efisien digunakan untuk keperluan kompilasi. 2.Top-Down
à Membentuk pohon urai dari atas atau root (akar) ke bawah atau daun (leaf).
3.Bottom-Up
à Memebentuk pohon urai dari bawah ke atas.p
Tersebut nomor dua dan tiga adalah yang lazim dan lebih efisien digunakan dalam pembuatan atau proses kompilasi.
Syntax Error Handling
Syntax Error Handling
Bila satu Compiler hanya memproses program yang benar, rancangan & implementasi-nya akan lebih sederhana.
i i li id k b d
Tetapi programer sering menulis program yang tidak benar dan compiler yang baik harus dapat membantu programmer didalam mengidentifikasi dan melokalisasi kesalahan.
Dr. Nidjo Sandjojo, M.Sc 3.11
Teknik Kompilasi
Kesalahan
Kesalahan
Kesalahan dapat terjadi pada beberapa tingkat yang berupa: 1. Leksikal, misal salah mengejah identifier, keyword (kata kunci),
d
dan operator.
2. Sintak, misal ekpresi arithmetic dengan tanda kurung yang tidak seimbang.
3. Semantik, misal suatu operator dipakai pada operand yang tidak cocok.
4 Logika misal recursive call (pemanggilan berulang) yang tidak 4. Logika, misal recursive call (pemanggilan berulang) yang tidak
Pendeteksian Kesalahan
Pendeteksian Kesalahan
Pendekteksian Kesalahan dan penanggulangannya dipusatkaan pada phase ANALISIS. Alasannya :
à Kesalahan terjadi pada sifat sintaknya atau kumpulan token yang à Kesalahan terjadi pada sifat sintaknya, atau kumpulan token yang
datang dari lexical analyzer tidak sesuai dengan tata bahasanya. à Ketepatan dari metode parser modern yang dapat mendeteksi
kesalahan sintak dengan efisien.
Dr. Nidjo Sandjojo, M.Sc 3.13
Teknik Kompilasi
Tujuan Mengatasi Kesalahan
Tujuan Mengatasi Kesalahan
1.Melaporkan adanya kesalahan dengan jelas dan akurat. 2.Harus dapat cepat kembali mendeteksi kesalahan
l j jik l h d k i k l h b l
selanjutnya jika telah mendeteksi kesalahan sebelumnya. 3.Tidak harus memperlambat proses jika dilakukan terhadap
Cara Pelaporan
Cara Pelaporan
Bagaimana pengendali kesalahan (error handler) melaporkan adanya kesalahan?
à Salah satu cara: mencetak baris dimana kesalahan mungkin à Salah satu cara: mencetak baris dimana kesalahan mungkin
terjadi; pesan juga ditampilkan.
Setelah mendeteksi adanya kesalahan, pengurai (parser) kembali berfungsi walaupun kadang-kadang kesalahan pertama akan mempengaruhi proses selanjutnya, namum proses tidak berhenti. Pada umumnya pengurai kembali pada suatu phase dengan
l j tk i t d h i t t b t d t
Dr. Nidjo Sandjojo, M.Sc 3.15
Teknik Kompilasi
melanjutkan pemrosesan input dengan harapan input tersebut dapat diurai dengan benar.
Error
Error--Recovery Strategies
Recovery Strategies
Panic Mode (Mode Panik)
Paling sederhana bila menemukan kesalahan, parser membuang
i b l i i l h k l ( h i i t k )
simbol input sampai salah satu token penyelaras (synchronizing token) ditemukan, misalnya; dan end. Metode ini tidak menimbulkan endless loop.
Phrase Level (Kombinasi Kata-kata)
Pada saat menemukan kesalahan, parser melakukan pembetulan loka pada sisa input dengan menggati awalan (prefix) dari sisa input dengan string yang dapat meneruskan proses. Pembetulan sederhana misalnya menghapus titik koma yang berlebihan, menggati koma dengan titik koma, tapi kadang menimbulkan loop tak terhingga (endless loop)
Error
Error--Recovery Strategies
Recovery Strategies (cont’d)
Error Production (Produksi Kesalahan)
Bila menemukan kesalahan yang umum/biasa, kemudian
memperluas tentang bahasanya dengan memproduksi bentuk bentuk memperluas tentang bahasanya dengan memproduksi bentuk-bentuk yang salah. Produksi yang diperluas tersebut digunakan untuk proses penguraian untuk dapat mendiagnosa bentuk input yang salah. Global Correction (Pembetulan Menyeluruh)
Kompilator yang ideal hanya akan membuat perubahan sedikit mungkin dalam hal proses input yang tidak benar.
Ada beberapa global dengan cara tertentu sehingga perubahan pada
Dr. Nidjo Sandjojo, M.Sc 3.17
Teknik Kompilasi
Ada beberapa global dengan cara tertentu sehingga perubahan pada token dilakukan sekecil mungkin. Metoda ini sangat mahal dari segi waktu/tepat.
CONTEXT
CONTEXT--FREE GRAMMAR
FREE GRAMMAR
Banyak bentuk bahasa pemrograman memiliki struktur rekursif (recursive: berulang) yang dapat didefinisikan oleh context-free
grammar (CFG).
Misalnya kita memiliki statement bersyarat yang didefinisikan oleh satu peraturan seperti:
à Bila S1dan S2 adalah statement dan E adalah expression, maka;
If E then S1else S2 adalah sebuah statement.
à Dalam bentuk produksi:
stmt Æ if expr then stmt else stmt
Bentuk statement bersyarat ini tidak dapat ditentukan dengan menggunakan notasi regular expression. Regular expression dapat menentukan struktur leksikal dari suatu token.
Dengan menentukan variabel stmt untuk menyatakan kelas dari statement dan expr menyatakan kelas dari expression, kita dapat mengekpresikan statement diatas dengan menggunakan produksi tata
CONTEXT
CONTEXT--FREE GRAMMAR
FREE GRAMMAR (cont’d)
mengekpresikan statement diatas dengan menggunakan produksi tata bahasa.
à Dalam bentuk produksi:
stmt Æ if expr then stmt else stmt
CFG terdiri dari Terminal, Non-Terminal, Start symbol, dan
Produksi. Dr. Nidjo Sandjojo, M.Sc 3.19 Teknik Kompilasi .
CONTEXT
CONTEXT--FREE GRAMMAR
FREE GRAMMAR (cont’d)
KOMPONEN
Satu set token Satu set non-terminal Satu set produksi
Satu non-terminal sebagai tanda start Contoh Grammar :
stmt Æ
if (expr) stmt else stmt
produksi
token
Variables Æ urutan token = non-terminal Start
symbol
CONTEXT
CONTEXT--FREE GRAMMAR
FREE GRAMMAR (cont’d)
CONTOH
List Æ List + Digit List Æ List - Digit List Æ Digit
Digit Æ 0|1|2|3|4|5|6|7|8|9
Dapat ditulis menjadi:
List Æ |List+Digit|List-Digit|Digit
Dr. Nidjo Sandjojo, M.Sc 3.21
Teknik Kompilasi
Catatan:
à Simbol2 terminal: + - |
à Simbol2 non-terminal: list digit 0 …9
CONTEXT
CONTEXT--FREE GRAMMAR
FREE GRAMMAR (cont’d)
KEGUNAAN CONTEXT-FREE GRAMMAR ADALAH:
Menentukan syntax suatu bahasa.
Menjelaskan dengan tepat syntax suatu bahasa. Menjelaskan struktur hierarkhi bentuk-bentuk bahasa. Membantu mengarahkan penerjemahan.
CONTEXT
CONTEXT--FREE GRAMMAR
FREE GRAMMAR (cont’d)
TERDIRI DARI :
1. Terminal
Simbol dasar dari suatu rangkaian yang terbentuk token Æ terminal, kata kunci if then dan else Æ terminal
2. Non-Terminal Æ stmt dan expr
Adalah variabel sintatik yang menyatakan kumpulan dari rangkaian, mendefinisikan kumpulan dari rangkaian yang membantu bahasa yang dibentuk oleh tata bahasa. Memberikan struktur hirarki yang bermanfaat
Dr. Nidjo Sandjojo, M.Sc 3.23
Teknik Kompilasi
d be tu o e tata ba asa. e be a st u tu a ya g be a aat dalam proses analisis sintak translasi
3. Awal Simbol
Satu non-terminal berfungsi sebagai awal simbol, kumpulan rangkaian yang dinyatakannya merupakan bahasa yang didefinisikan tata bahasa
CONTEXT
CONTEXT--FREE GRAMMAR
FREE GRAMMAR (cont’d)
yang dinyatakannya merupakan bahasa yang didefinisikan tata bahasa tersebut.
4. Produksi
Menentukan perilaku dimana terminal dan non-terminal dapat digabungkan untuk membentuk rangkaian.
Setiap produksi terdiri dari non-terminal diikuti oleh tanda panah (kadang-kadang simbol ::=), diikuti oleh rangkaian dari suatu non-terminal dan
i l terminal.
à Bila S1dan S2 adalah statement dan E adalah expression, maka; If E then S1else S2 adalah sebuah statement.
Ketentuan
Ketentuan--Ketentuan Notasi
Ketentuan Notasi
1. Simbol-simbol Terminal
à Huruf kecil awal alfabet, misal a, b, c à Simbol operator misal + - dsb à Simbol operator, misal +, -, dsb
à Simbol tanda baca, misal tanda kurung, koma dsb à Digit 0, 1, 2, ….9
à Rangkaian tercetak tebal, misal id atau if
2. Simbol-simbol Non-Terminal à Huruf besar alfabet, misal A, B, C
à Huruf S jika muncul biasanya dianggap sebagai simbol awal
Dr. Nidjo Sandjojo, M.Sc 3.25
Teknik Kompilasi
à Huruf S jika muncul biasanya dianggap sebagai simbol awal à Nama dengan huruf kecil seperti expr atau stmt
3. Terminal/Non-Terminal
à Huruf besar akhir alfabet spt X,Y,Z merepresentasikan simbol tata bahasa (mungkin terminal atau non-terminal)
4. Terminal
à Huruf kecil akhir alfabet seperti x, y, z merupan rangkaian (strings) dari suatu terminal.
Ketentuan
Ketentuan--Ketentuan Notasi
Ketentuan Notasi (cont’d)
5. Huruf kecil yunani seperti α β dan γ merupakan rangkaian (strings) dari simbol tata bahasa. Produksi, A Æα menyatakan ada satu non-terminal A disebelah kiri tanda panah & rangkaian simbol tata bahasa α disebelah kanan. 6. Jika A Æα1, A Æα2… A Æαk(atau A-produksi) dapat ditulis sebagai
AÆα1|α2…|αk where α1, α2… αk, sebagai alternatif untuk A.
7. Jika tidak disebutkan, sisi kiri dari produksi yang pertama adalah simbol awal. 7. Jika tidak disebutkan, sisi kiri dari produksi yang pertama adalah simbol awal.
Ketentuan
Ketentuan--Ketentuan Notasi
Ketentuan Notasi (cont’d)
Grammar Notation
The following notation used in the text is fairly standard in the literature: à Terminals include lower-case letters early in the alphabet like a, b, c,y p
operator symbols like +, -, punctuation symbols like comma and parentheses; digits 0, 1, …, 9; boldface strings like id or const.
à Non-terminals include upper-case early in the alphabet like A, B, C; the letter S (usually the start symbol); lower-case italized names like expr or
stmt.
à Upper-case letters late in the alphabet like X, Y or Z stand for grammar symbols; i.e. either terminals or non-terminals.
à Lower-case letters late in the alphabet like u v z stand for strings of
Dr. Nidjo Sandjojo, M.Sc 3.27
Teknik Kompilasi
Lower case letters late in the alphabet like u, v, …z stand for strings of terminal symbols.
à Lower-case Greek letters like α, β, γ stand for strings of grammar symbols.
Hence a typical context-free grammar can be written as A Æα.
DERIVASI
DERIVASI
E Æ -E Æ -(E) Æ -(id)
Urutan penggantian E berturut-turut sampai dengan –(id) disebut k (id) d i
DERIVASI untuk –(id) dari E.
Simbol Æ artinya derive dalam 1 langkah atau derive dalam nol atau lebih, or *Æ +Æ derive dalam 1 langkah atau lebih.
Pohon urai & derivasi See fig …derivasi
DERIVASI
DERIVASI (cont’d)
Gambar Derivasi Dr. Nidjo Sandjojo, M.Sc 3.29 Teknik KompilasiAMBIGUITY
AMBIGUITY
Grammar yang dapat memiliki lebih dari satu pohon urai yang dihasilkan dari satu rangkaian token yang diketahui.
Contoh : Grammar: List Æ|list+digit|list-digit|digit. Misalnya kita tidak dapat membedakan antara list dan digit, sehingga
keduanya dianggap sebagai string; maka grammar-nya: stringÆ|string+string|string-string|string.
Sehingga pohon urainya dapat :
string string string string string string string string g string string
PENULISAN SUATU TATA BHS
PENULISAN SUATU TATA BHS
Tata bahasa mempunyai kemampuan untuk menjelaskan sehingga besar, tetapi tidak semua, syntax dari bahasa pemrograman
b i k il d i li i dik j k l h li i l k ik l
Sebagian kecil dari analisis syntax dikerjakan oleh penganalisis leksikal sebagaimanan ia menghasilkan rangkaian token dari karakter inputnya. Setiap metode pengurian hanya dapat menangani satu bentuk tertentu, tata
bahasa awal mungkin harus ditulis kembali untuk dapat memungkinkanya menguraikan dengan metode yang dipilih.
Dr. Nidjo Sandjojo, M.Sc 3.31
Teknik Kompilasi
Regular Expressions vs Context-Free Grammar
Setiap bentuk yang dapat di jelaskan oleh satu regular expression, d t j dij l k l h t t t b h
PENULISAN SUATU TATA BHS
PENULISAN SUATU TATA BHS (cont’d)
dapat juga dijelaskan oleh satu tata bahasa.
Misal: regular expression (a|b)*abb dan tata bahasa:
A0 Æ aA0|bA0|aA1
A1 Æ bA2
A2 Æ bA3
Æ
A3 Æ ∈
menjelaskan bahasa yang sama, set string “a” dan “b” yang diakhiri dengan abb.
Karena setiap set regular adalah satu bahasa bebas konteks, maka timbul pertanyaan :
à Mengapa menggunakan ekspresi regular untuk mendefinisikan lexical syntax
PENULISAN SUATU TATA BHS
PENULISAN SUATU TATA BHS (cont’d)
dari suatu bahasa?
Alasan-alasanya sebagai berikut:
1. Peraturan-peraturan leksikal dari satu bahasa pada umumnya cukup sederhana, dan untuk menjelaskannya tidak memerlukan notasi sebagus/sekuat grammar. 2. Expresi regular pada umumnya menyediakan notasi yang singkat dan lebih
mudah dimengerti oleh token dari pada tata bahasa.
3 Lexical analyzer yang lebih efisien dapat dibentuk secara otomatis dari ekspresi
Dr. Nidjo Sandjojo, M.Sc 3.33
Teknik Kompilasi
3. Lexical analyzer yang lebih efisien dapat dibentuk secara otomatis dari ekspresi regular dari pada grammar.
4. Pemisahan struktur sintak dari suatu bhs ke dalam bagian-bagian leksikal dan nonleksikal menyediakan kemudahan dalam hal modulasi front end menjadi dua komponen yang mudah diatur.
PENULISAN SUATU TATA BHS
PENULISAN SUATU TATA BHS (cont’d)
There are no firm guidelines as to what to put into the lexical rules, as
opposed to the syntactic rules.
Regular expressions are most useful for describing the structure of
lexical constructs such as identifiers, constants, keywords, and so
forth.
Grammars, on the other hand, are most useful in describing nested
structures such as balanced parentheses, matching begin-end's,
corresponding if-then-else's, and so on.
corresponding if then else s, and so on.
As we have noted, these nested structures cannot be described by
regular expressions.
PENULISAN SUATU TATA BHS
PENULISAN SUATU TATA BHS (cont’d)
Secara mekanik kita dapat merubah satu NFA menjadi grammar yang menghasilakan bahasa yang sama yang dikenali oleh NFA tersebut. Tata bahasa tersebut diatas dibentuk dari NFA sebagai berikut:
0 a b b start 1 2 a 3
Tata bahasa tersebut diatas dibentuk dari NFA sebagai berikut:
Dr. Nidjo Sandjojo, M.Sc 3.35 Teknik Kompilasi 0 1 2 b 3
Menggunakan susunan sebagai berikut :
Untuk setiap state i dari NFA, membentuk satu simbol nonterminal Ai.
PENULISAN SUATU TATA BHS
PENULISAN SUATU TATA BHS (cont’d)
Bila state i mempunyai satu transisi ke state j simbol a, mengenalkan produk Ai Æ aAj
Bila state i ke state j dgn input ε, mengenalkan produksi Ai ÆAj Bila i adalah state penerima, mengenalkan Ai Æε
PENGURAIAN TOP
PENGURAIAN TOP--DOWN
DOWN
Penguaraian (turun berulang)
Penguraian top-down Æ usaha untuk:
M i d i i li ki i (l ft t) t k i i t
à Mencari derivasi paling kiri (left-most) suatu rangkaian input à Membentuk pohon urai
Contoh
à Tata Bhs: S Æ cAd, A Æ ab|a à Input: w Æ cad Dr. Nidjo Sandjojo, M.Sc 3.37 Teknik Kompilasi S c A d S c A d a b S c A d a
PENGURAIAN PRAKIRA
PENGURAIAN PRAKIRA
stmt Æ if expr then stmt else stmt
| while expr do stmt
| b i t t li t d
| begin stmt_list end
PENGURAIAN BOTTOM
PENGURAIAN BOTTOM--UP
UP
Penguraian shift-reduce
Penguraian dasar-atas Æ memperoleh derivasi rightmost Contoh :
à Tata bahasa: S Æ aABe A Æ Abc|b B Æ d
Kalimat : abbcdc dapat direduksi ke S, sbb :
a b b c d e A Æ b Jadi abbcde dapat direduksi menjadi S
Dr. Nidjo Sandjojo, M.Sc 3.39
Teknik Kompilasi
a b b c d e A Æ b Jadi abbcde dapat direduksi menjadi S. a A b c d e A Æ Abc Derivasi Right-Most:
a A d e B Æ d S ÆaABc ÆaAde Æ aAbcde Æ abbcde a A B e S Æ aABe