Anda di halaman 1dari 20

BAB 3.

ANALISIS SINTAK
PERAN PENGURAI CONTEXT-FREE GRAMMAR PENULISAN GRAMMAR PENGURAIAN TOP-DOWN PENGURAIAN BOTTOM-UP PENGURAIAN OPERATOR-PRECEDENCE PENGURAIAN LR PENGGUNAAN AMBIGUOUS GRAMMAR PEMBENTUK PENGURAI

Teknik Kompilasi

3.1

Dr. Nidjo Sandjojo, M.Sc

Syntax & Semantics


Definisi Syntax Syntax suatu bahasa pemrograman adalah satu himpunan peraturan yang menjelaskan bagaimana simbol-simbol 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 instruksiinstruksi instruksi yang ditulis pada suatu bahasa pemrograman.

Teknik Kompilasi

3.2

Dr. Nidjo Sandjojo, M.Sc

Pendahuluan
Setiap bahasa pemrograman mempunyai aturan-aturan yang menjelaskan struktur sintak dari program-program yang dibuatnya. Misalnya i l pada d bahasa b h Pascal: l 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.

Teknik Kompilasi

3.3

Dr. Nidjo Sandjojo, M.Sc

Pendahuluan (contd)
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 compilers. Keuntungan-keuntungan tersebut adalah: Spesifikasi sintak jelas dan mudah dimengerti Efisiensi & dapat menemukan ambiguity Mendeteksi kesalahan untuk membuat program yang benar Menampilkan ilk construct (bentuk) (b k) baru b dan d kemampuan k tambahan.

Teknik Kompilasi

3.4

Dr. Nidjo Sandjojo, M.Sc

PERAN PENGURAI

token source program Lexical Analyzer get next token Parser

parse tree

Rest of intermediate Front End representation

Symbol Table

Position of parser in compiler model

Teknik Kompilasi

3.5

Dr. Nidjo Sandjojo, M.Sc

PERAN PENGURAI (contd)


Penguraian (parsing) adalah proses penentuan apakah satu rangkaian/untaian (string) tokens dapat dibentuk (generated) oleh 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. benar

Teknik Kompilasi

3.6

Dr. Nidjo Sandjojo, M.Sc

PERAN PENGURAI (contd)


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.

Teknik Kompilasi

3.7

Dr. Nidjo Sandjojo, M.Sc

Perbedaan Pohon Sintak & Pohon Urai


POHON SINTAK Disebut Abstract Syntax Tree atau Syntax Tree Setiap node merepresentasikan operator dan anak-anak node merepresentasikan operand Contoh: Pohon syntax untuk 9-5+2 POHON URAI Disebut Concrete Syntax Tree Akar (root)-nya merupakan simbol mulai (start symbol) dan daun-nya merupakan produksi sebelah kanan suatu grammar, atau lebih menekankan grammar) Contoh: Pohon urai untuk 9-5+2 berdasarkan grammar: List list + digit List list - digit List digit Digit 0|1|2|3|4|5|6|7|8|9

Teknik Kompilasi

3.8

Dr. Nidjo Sandjojo, M.Sc

Perbedaan Pohon Sintak & Pohon Urai (contd)


Gambar Pohon Sintak Gambar Pohon Urai

Teknik Kompilasi

3.9

Dr. Nidjo Sandjojo, M.Sc

Tipe Pengurai
1. Universal Dapat digunakan untuk menguraikan semua jenis tata bahasa. Sangat tidak efisien digunakan untuk keperluan kompilasi. kompilasi 2. Top-Down Membentuk pohon urai dari atas atau root (akar) ke bawah atau daun (leaf). 3. Bottom-Up pohon urai dari bawah ke atas. Memebentuk p Tersebut nomor dua dan tiga adalah yang lazim dan lebih efisien digunakan dalam pembuatan atau proses kompilasi.

Teknik Kompilasi

3.10

Dr. Nidjo Sandjojo, M.Sc

Syntax Error Handling


Bila satu Compiler hanya memproses program yang benar, rancangan & implementasi-nya akan lebih sederhana. Tetapi i programer sering i menulis li program yang tidak id k benar b dan d compiler yang baik harus dapat membantu programmer didalam mengidentifikasi dan melokalisasi kesalahan.

Teknik Kompilasi

3.11

Dr. Nidjo Sandjojo, M.Sc

Kesalahan
Kesalahan dapat terjadi pada beberapa tingkat yang berupa: 1. Leksikal, misal salah mengejah identifier, keyword (kata kunci), 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 4. Logika, misal recursive call (pemanggilan berulang) yang tidak terhingga (endless loop).

Teknik Kompilasi

3.12

Dr. Nidjo Sandjojo, M.Sc

Pendeteksian Kesalahan
Pendekteksian Kesalahan dan penanggulangannya dipusatkaan pada phase ANALISIS. Alasannya : Kesalahan terjadi pada sifat sintaknya, 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.

Teknik Kompilasi

3.13

Dr. Nidjo Sandjojo, M.Sc

Tujuan Mengatasi Kesalahan


1.Melaporkan adanya kesalahan dengan jelas dan akurat. 2.Harus dapat cepat kembali mendeteksi kesalahan selanjutnya l j jika jik telah l h mendeteksi d k i kesalahan k l h sebelumnya. b l 3.Tidak harus memperlambat proses jika dilakukan terhadap program yang benar.

Teknik Kompilasi

3.14

Dr. Nidjo Sandjojo, M.Sc

Cara Pelaporan
Bagaimana pengendali kesalahan (error handler) melaporkan adanya kesalahan? 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 melanjutkan l j tk pemrosesan input i t dengan d harapan h input i t tersebut t b t dapat d t diurai dengan benar.

Teknik Kompilasi

3.15

Dr. Nidjo Sandjojo, M.Sc

ErrorError -Recovery Strategies


Panic Mode (Mode Panik) Paling sederhana bila menemukan kesalahan, parser membuang simbol i b l input i sampai i salah l h satu token k penyelaras l ( (synchronizing h i i t token) k ) 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)

Teknik Kompilasi

3.16

Dr. Nidjo Sandjojo, M.Sc

ErrorError -Recovery Strategies (contd)


Error Production (Produksi Kesalahan) Bila menemukan kesalahan yang umum/biasa, kemudian memperluas tentang bahasanya dengan memproduksi bentuk bentuk-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 token dilakukan sekecil mungkin. Metoda ini sangat mahal dari segi waktu/tepat.

Teknik Kompilasi

3.17

Dr. Nidjo Sandjojo, M.Sc

CONTEXTCONTEXT -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 S1 dan S2 adalah statement dan E adalah expression, maka;
If E then S1 else 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.

Teknik Kompilasi

3.18

Dr. Nidjo Sandjojo, M.Sc

CONTEXTCONTEXT -FREE GRAMMAR (contd)


Dengan menentukan variabel stmt untuk menyatakan kelas dari statement dan expr menyatakan kelas dari expression, kita dapat 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. .

Teknik Kompilasi

3.19

Dr. Nidjo Sandjojo, M.Sc

CONTEXTCONTEXT -FREE GRAMMAR (contd)


KOMPONEN Satu set token Satu set non-terminal Satu set produksi Satu non-terminal sebagai tanda start Contoh Grammar : produksi

stmt
Start symbol

if (expr) stmt else stmt

token

Variables urutan token = non-terminal

Teknik Kompilasi

3.20

Dr. Nidjo Sandjojo, M.Sc

10

CONTEXTCONTEXT -FREE GRAMMAR (contd)


CONTOH List List List List + Digit List - Digit Digit

Digit 0|1|2|3|4|5|6|7|8|9 Dapat ditulis menjadi: List |List+Digit|List-Digit|Digit

Catatan: Simbol2 terminal: + - | Simbol2 non-terminal: list digit 0 9

Teknik Kompilasi

3.21

Dr. Nidjo Sandjojo, M.Sc

CONTEXTCONTEXT -FREE GRAMMAR (contd)


KEGUNAAN CONTEXT-FREE GRAMMAR ADALAH: Menentukan syntax suatu bahasa. Menjelaskan dengan tepat syntax suatu bahasa. Menjelaskan struktur hierarkhi bentuk-bentuk bahasa. Membantu mengarahkan penerjemahan.

Teknik Kompilasi

3.22

Dr. Nidjo Sandjojo, M.Sc

11

CONTEXTCONTEXT -FREE GRAMMAR (contd)


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 d be tu oleh o e tata bahasa. ba asa. Memberikan e be a struktur st u tu hirarki a yang ya g bermanfaat be a aat dalam proses analisis sintak translasi

Teknik Kompilasi

3.23

Dr. Nidjo Sandjojo, M.Sc

CONTEXTCONTEXT -FREE GRAMMAR (contd)


3. Awal Simbol
Satu non-terminal berfungsi sebagai awal simbol, kumpulan rangkaian 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 (kadangkadang simbol ::=), diikuti oleh rangkaian dari suatu non-terminal dan terminal. i l Bila S1 dan S2 adalah statement dan E adalah expression, maka; If E then S1 else S2 adalah sebuah statement. Dalam bentuk produksi: stmt if expr then stmt else stmt

Teknik Kompilasi

3.24

Dr. Nidjo Sandjojo, M.Sc

12

KetentuanKetentuan -Ketentuan Notasi


1. Simbol-simbol Terminal Huruf kecil awal alfabet, misal a, b, c Simbol operator 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 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)
Teknik Kompilasi 3.25 Dr. Nidjo Sandjojo, M.Sc

KetentuanKetentuan -Ketentuan Notasi (contd)


4. Terminal Huruf kecil akhir alfabet seperti x, y, z merupan rangkaian (strings) dari suatu terminal. 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 A1|2 |k where 1, 2 k, sebagai alternatif untuk A. 7. Jika tidak disebutkan, sisi kiri dari produksi yang pertama adalah simbol awal.

Teknik Kompilasi

3.26

Dr. Nidjo Sandjojo, M.Sc

13

KetentuanKetentuan -Ketentuan Notasi (contd)


Grammar Notation The following notation used in the text is fairly standard in the literature: Terminals include lower-case letters early y in the alphabet p like a, b, c, 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 Lower-case case letters late in the alphabet like u, u v, v z 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 .

Teknik Kompilasi

3.27

Dr. Nidjo Sandjojo, M.Sc

DERIVASI
E -E -(E) -(id) Urutan penggantian E berturut-turut sampai dengan (id) disebut DERIVASI untuk k (id) (id) dari d i 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

Teknik Kompilasi

3.28

Dr. Nidjo Sandjojo, M.Sc

14

DERIVASI (contd)
Gambar Derivasi

Teknik Kompilasi

3.29

Dr. Nidjo Sandjojo, M.Sc

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 g string string + 5 2 9 + string string string

string 9

string -

string 2

Kedua pohon urai tersebut untuk: 9 + 5 - 2


Teknik Kompilasi 3.30 Dr. Nidjo Sandjojo, M.Sc

15

PENULISAN SUATU TATA BHS


Tata bahasa mempunyai kemampuan untuk menjelaskan sehingga besar, tetapi tidak semua, syntax dari bahasa pemrograman Sebagian b i kecil k il dari d i analisis li i syntax dikerjakan dik j k oleh l h penganalisis li i leksikal l k ik l 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.

Teknik Kompilasi

3.31

Dr. Nidjo Sandjojo, M.Sc

PENULISAN SUATU TATA BHS (contd)


Regular Expressions vs Context-Free Grammar Setiap bentuk yang dapat di jelaskan oleh satu regular expression, d t juga dapat j dijelaskan dij l k oleh l h satu t tata t t bahasa. b h 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.

Teknik Kompilasi

3.32

Dr. Nidjo Sandjojo, M.Sc

16

PENULISAN SUATU TATA BHS (contd)


Karena setiap set regular adalah satu bahasa bebas konteks, maka timbul pertanyaan : Mengapa menggunakan ekspresi regular untuk mendefinisikan lexical syntax 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 3. 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.
Teknik Kompilasi 3.33 Dr. Nidjo Sandjojo, M.Sc

PENULISAN SUATU TATA BHS (contd)


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 if-then-else's, then else s, and so on. As we have noted, these nested structures cannot be described by regular expressions.

Teknik Kompilasi

3.34

Dr. Nidjo Sandjojo, M.Sc

17

PENULISAN SUATU TATA BHS (contd)


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:
a

start 0

a 1

b 2

b 3

b
Teknik Kompilasi 3.35 Dr. Nidjo Sandjojo, M.Sc

PENULISAN SUATU TATA BHS (contd)


Menggunakan susunan sebagai berikut : Untuk setiap state i dari NFA, membentuk satu simbol nonterminal Ai. 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 Bila i adalah state awal, membuat Ai sbg simbol start dari grammar.

Teknik Kompilasi

3.36

Dr. Nidjo Sandjojo, M.Sc

18

PENGURAIAN TOPTOP-DOWN
Penguaraian (turun berulang) Penguraian top-down usaha untuk: Mencari M i derivasi d i i paling li kiri ki i (left-most) (l ft t) suatu t rangkaian k i input i t Membentuk pohon urai Contoh Tata Bhs: S cAd, A ab|a Input: w cad
S c A d c a
Teknik Kompilasi

S A b
3.37

S d c A a d

Dr. Nidjo Sandjojo, M.Sc

PENGURAIAN PRAKIRA
stmt if expr then stmt else stmt | while expr do stmt | begin b i stmt_list t t li t end d Kata kunci if, while dan begin akan menentukan produksi

Teknik Kompilasi

3.38

Dr. Nidjo Sandjojo, M.Sc

19

PENGURAIAN BOTTOMBOTTOM-UP
Penguraian shift-reduce Penguraian dasar-atas memperoleh derivasi rightmost Contoh : Tata bahasa: S aABe A Abc|b Bd Kalimat : abbcdc dapat direduksi ke S, sbb : abbcde Ab Jadi abbcde dapat direduksi menjadi S. S aAbcde A Abc Derivasi Right-Most: aA de Bd S aABc aAde aAbcde abbcde aA B e S aABe S
Teknik Kompilasi 3.39 Dr. Nidjo Sandjojo, M.Sc

20

Anda mungkin juga menyukai