3.1. Definisi Syntax Syntax suatu bahasa pemrograman adalah satu himpunan

dokumen-dokumen yang mirip
BAB II SINTAKS 2.1. SINTAKS

SINTAKS. Sintaks dari bahasa pemrograman di defenisikan dengan 2 kumpulan aturan, yaitu:

SINTAKS. Sintaks dari bahasa pemrograman di defenisikan dengan 2 kumpulan aturan, yaitu:

ALGORITMA PEMROGRAMAN 1C SINTAKS

Hirarki Comsky. Unrestricted. Context Sensitive Context free Regular

21/11/2016. Pohon Sintaks. Syntax?? Proses Penurunan. Analisis Syntax (Parser) Metode Parsing ANALISIS SINTAKS TEKNIK KOMPILASI

Analisis Sintaksis (syntactic analyzer atau parser)

Komponen sebuah Kompilator

Syntax, Semantic & Grammar. Konsep Bahasa Pemrograman Materi 3 Yudianto Sujana, M.Kom

Alat bantu (tools) dalam pembuatan parser/ analisis sintaksis. Menggunakan simbol persegi panjang untuk non terminal

Teknik Kompiler 6. oleh: antonius rachmat c, s.kom

Teknik Kompiler 5. oleh: antonius rachmat c, s.kom, m.cs

Tata Bahasa Pemrograman

BAB IV ANALISA SINTAKS

Bahasa adalah kumpulan kalimat. Kalimat adalah rangkaian kata. Kata adalah komponen terkecil kalimat yang tidak bisa dipisahkan lagi.

BAB 2. ANALISIS LEKSIKAL

anggota alfabet dinamakan simbol terminal atau token.

TEKNIK KOMPILASI Konsep & Notasi Bahasa

Teknik Kompilasi Dosen: Utami Dewi W.,S.Kom

KONSEP GRAMMAR DAN BAHASA

SEMANTIK. Sintak mendifinisikan suatu bentuk program yang benar dari suatu bahasa.

Teknik Kompilasi. Notasi Bahasa

SATUAN ACARA PERKULIAHAN STMIK UBUDIYAH INDONESIA SEMESTER GENAP TAHUN AKADEMIK 2013/2014

BAB VI CARA PENANGANAN KESALAHAN

TEORI BAHASA & OTOMATA (KONSEP & NOTASI BAHASA) PERTEMUAN IX Y A N I S U G I Y A N I

TEKNIK KOMPILASI Tony Darmanto,ST / Smt V S1 TI / STMIK WIDYA DHARMA/ Hal 16

Aplikasi Rekursif dalam Analisis Sintaks Program

SATUAN ACARA PERKULIAHAN (SAP) Semester Penempatan

UNIVERSITAS GUNADARMA

TEKNIK KOMPILASI PERTEMUAN Ke 4 dan 5 Abdul Muis Mappalotteng ANALISIS SEMANTIK

Teori Bahasa Formal dan Automata

TEORI BAHASA & OPERASI MATEMATIS (2)

Pemodelan CNF Parser dengan Memanfaatkan Pohon Biner

PERANCANGAN SISTEM PERBAIKAN ERROR KODE SUMBER PROGRAM OTOMATIS

Grammar dan Tingkat Bahasa

Kesalahan Program Penanganan Kesalahan Reaksi Compiler Pada kesalahan Error Recovery Error repair

TEORI BAHASA DAN AUTOMATA

Fase-fase proses sebuah kompilasi

Kesalahan Program dapat berupa

Parsing. A -> a as baa B -> b bs abb

SATUAN ACARA PERKULIAHAN (SAP) MATA KULIAH PENGANTAR TEKNIK KOMPILASI

SEMANTIK. Int vector[10];

Tata Bahasa Kelas Tata Bahasa. Konsep Bahasa (1)

Bab III Semantik. Konsep Semantik Bahasa Pemrograman (Semantik Analisis)

Perjalanan sebuah intruksi

TEORI BAHASA DAN OTOMATA [TBO]

TEKNIK KOMPILASI. Muhamad Nursalman Ilmu Komputer FPMIPA - UPI

MK. PEMROGRAMAN SISTEM Semester/SKS : 6/3 COMPILER. Jurusan Sistem Komputer S1 Universitas Gunadarma

TEKNIK KOMPILASI Tony Darmanto,ST / Smt V S1 TI / STMIK WIDYA DHARMA/ Hal 1

GARIS-GARIS BESAR PROGRAM PENGAJARAN (GBPP)

SEMANTIK Syntax mendefinisikan suatu bentuk program yang benar dari suatu bahasa.

Teknik Kompilasi II TEKNIK KOMPILASI. Ernastuti & Sulistyo P 1/52. Ernastuti & Sulistyo

Proses Kompilasi. Otomata dan Pengantar Kompulasi Pertemuan 3

TEORI BAHASA DAN OTOMATA [TBO]

BAB I TEORI BAHASA DAN AUTOMATA

Teknik Kompiler 12. oleh: antonius rachmat c, s.kom

Sebuah bahasa dinyatakan regular jika terdapat finite state automata yang dapat menerimanya. Bahasa-bahasa yang diterima oleh suatu finite state

Ekspresi Reguler Definisi. Notasi Ekspresi Regular. Contoh Ekspresi Reguler [2]

EKSPRESI REGULAR PADA SUATU DETERMINISTIC FINITE STATE AUTOMATA

BAB V CONTEXT FREE GRAMMAR DAN PUSH DOWN AUTOMATA

POHON PENURUNAN Context Free Grammar

Tujuan perancangan bhs program

LANGUAGES AND TRANSLATOR

BAB III CFG DAN PARSING

Dasar Teori Bahasa & Grammar

IF-UTAMA 1. Definisi. Grammar. Definisi

TEKNIK KOMPILASI Bahasa Regular

PENGEMBANGAN PROTOTIPE APLIKASI KONVERSI KODE DARI BAHASA C KE PASCAL

PSEUDOCODE TIPE DATA, VARIABEL, DAN OPERATOR

GRAMMAR AND LANGUAGE

BAB II DASAR TEORI. 2.1 Kompilator

TEORI BAHASA DAN OTOMATA [TBO]

Teknik Informatika PERTEMUAN 2. TEORI BAHASA & OTOMATA Imam Riadi, M.Kom Shofwatul Uyun, M.Kom. Teknik Informatika

BAB I PENGENALAN TEKNIK KOMPILASI

MODUL MATA KULIAH TEORI BAHASA DAN OTOMATA DOSEN:

ALGORITMA PEMROGRAMAN 1C SEMANTIKS

IF-UTAMA 1. Penurunan (Derivation) [2] Penurunan (Derivation) Contoh Penurunan [1] Parse Tree [1]

TEKNIK KOMPILASI. Dosen : Dwi Retno Wahyuningsih, S. Kom. Jurusan : Teknik Informatika Semester Genap 2007/2008

Konsep dan Notasi Bahasa. Istiqomah, S.Kom

BAB I PENDAHULUAN 1-1

MODEL KOMPILATOR FUNGSI UMUM BAGIAN KOMPILATOR. Dosen Pengampu: Utami Dewi Widianti,S.Kom

Aplikasi Pengolah Bahasa Alami Untuk Operasi Boolean Antar Citra Agus Purwo Handoko 5)

TEKNIK KOMPILASI. Alamat untuk tugas: Informasi: DADANG MULYANA. dadang mulyana 2013

BAB VI METODE PARSING

Struktur Data. PDE - Struktur Data 1

ANALISIS DAN PERANCANGAN PERANGKAT LUNAK

TEKNIK KOMPILASI. Firrar Utdirartatmo

Teori Komputasi 11/23/2016. Bab 6: Context-Free Grammar & Parsing. Context-Free Grammar. Context-Free Grammar

Parsing dapat dilakukan dengan cara : Penurunan terkiri (leftmost derivation) : simbol variable yang paling kiri diturunkan (tuntas) dahulu

BAHASA SUMBER. DEFINISI bahasa sumber

BAB II TINJAUAN PUSTAKA. Bahasa menurut kamus Websters adalah the body of words and methods of

BAB II ANALISA LEKSIKAL (SCANNER)

BAB II TINJAUAN PUSTAKA. konsep, fakta, termasuk simbol simbol serta aturan agar mempunyai makna.

Penyederhanaan Tata Bahasa Bebas Konteks dalam Bentuk Normal Chomsky Menggunakan PHP

1 Pengujian Intent Recognition dalam mengenali struktur dasar bahasa C tanpa kesalahan. Kode Keterangan Status *) #include <stdio.

RENCANA PROGRAM KEGIATAN PERKULIAHAN SEMESTER (RPKPS)

PERTEMUAN 2 ALGORITMA & PEMROGRAMAN

Pendahuluan. Tujuan Pembelajaran :

Danang Wahyu Utomo

PENGANTAR TEKNIK KOMPILASI

Transkripsi:

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 3.1 Syntax & Semantics Definisi Syntax Syntax suatu bahasa pemrograman adalah satu himpunan 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 instruksiinstruksi yang ditulis pada suatu bahasa pemrograman. 3.2 1

Pendahuluan Setiap bahasa pemrograman mempunyai aturan-aturan yang menjelaskan struktur sintak dari program-program yang dibuatnya. 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. 3.3 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 compilers. Keuntungan-keuntungan tersebut adalah: Spesifikasi sintak jelas dan mudah dimengerti Efisiensi & dapat menemukan ambiguity Mendeteksi kesalahan untuk membuat program yang benar Menampilkan construct (bentuk) baru dan kemampuan tambahan. 3.4 2

PERAN PENGURAI source program Lexical Analyzer token get next token Parser parse tree Rest of Front End intermediate representation Symbol Table Position of parser in compiler model 3.5 PERAN PENGURAI (cont d) 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. 3.6 3

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. 3.7 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 3.8 4

Perbedaan Pohon Sintak & Pohon Urai (cont d) Gambar Pohon Sintak Gambar Pohon Urai 3.9 Tipe Pengurai 1.Universal Dapat digunakan untuk menguraikan semua jenis tata bahasa. 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. Tersebut nomor dua dan tiga adalah yang lazim dan lebih efisien digunakan dalam pembuatan atau proses kompilasi. 3.10 5

Syntax Error Handling Bila satu Compiler hanya memproses program yang benar, rancangan & implementasi-nya akan lebih sederhana. Tetapi programer sering menulis program yang tidak benar dan compiler yang baik harus dapat membantu programmer didalam mengidentifikasi dan melokalisasi kesalahan. 3.11 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, misal recursive call (pemanggilan berulang) yang tidak terhingga (endless loop). 3.12 6

Pendeteksian Kesalahan Pendekteksian Kesalahan dan penanggulangannya dipusatkaan pada phase ANALISIS. Alasannya : 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. 3.13 Tujuan Mengatasi Kesalahan 1.Melaporkan adanya kesalahan dengan jelas dan akurat. 2.Harus dapat cepat kembali mendeteksi kesalahan selanjutnya jika telah lhmendeteksi kikesalahan lh sebelumnya. bl 3.Tidak harus memperlambat proses jika dilakukan terhadap program yang benar. 3.14 7

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 pemrosesan input tdengan harapan input ttersebut t dapat diurai dengan benar. 3.15 Error-Recovery Strategies Panic Mode (Mode Panik) Paling sederhana bila menemukan kesalahan, parser membuang simbol input sampai salah satu token penyelaras (synchronizing i 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) 3.16 8

Error-Recovery Strategies (cont d) Error Production (Produksi Kesalahan) Bila menemukan kesalahan yang umum/biasa, kemudian 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 token dilakukan sekecil mungkin. Metoda ini sangat mahal dari segi waktu/tepat. 3.17 CONTEXT-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 S 1 else S 2 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. 3.18 9

CONTEXT-FREE GRAMMAR (cont d) 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.. 3.19 CONTEXT-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 Start symbol token Variables urutan token = non-terminal 3.20 10

CONTEXT-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 Catatan: Simbol 2 terminal: + - Simbol 2 non-terminal: list digit 0 9 3.21 CONTEXT-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. 3.22 11

CONTEXT-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 tatabahasa. asa. Memberikan struktur tu hirarki yang gbermanfaat aat dalam proses analisis sintak translasi 3.23 CONTEXT-FREE GRAMMAR (cont d) 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. Bila S1 dan S2 adalah statement dan E adalah expression, maka; If E then S 1 else S 2 adalah sebuah statement. Dalam bentuk produksi: stmt if expr then stmt else stmt 3.24 12

Ketentuan-Ketentuan Notasi 1. Simbol-simbol Terminal Huruf kecil awal alfabet, misal a, b, c 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 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) 3.25 Ketentuan-Ketentuan Notasi (cont d) 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 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. 3.26 13

Ketentuan-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, 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 uv u, v, zstand 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 α. 3.27 DERIVASI E -E -(E) -(id) Urutan penggantian E berturut-turut sampai dengan (id) disebut 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 3.28 14

DERIVASI (cont d) Gambar Derivasi 3.29 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 string string 9 + 5-2 9 + Kedua pohon urai tersebut untuk: 9 + 5-2 3.30 5-2 15

PENULISAN SUATU TATA BHS Tata bahasa mempunyai kemampuan untuk menjelaskan sehingga besar, tetapi tidak semua, syntax dari bahasa pemrograman Sebagian kecil ildari analisis lii syntax dikerjakan jk oleh lhpenganalisis lii leksikal lkikl 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. 3.31 PENULISAN SUATU TATA BHS (cont d) Regular Expressions vs Context-Free Grammar Setiap bentuk yang dapat di jelaskan oleh satu regular expression, dapat tjuga dijelaskan oleh satu tata t bahasa. Misal: regular expression (a b)*abb dan tata bahasa: A 0 aa 0 ba 0 aa 1 A 1 ba 2 A 2 ba 3 A 3 menjelaskan bahasa yang sama, set string a dan b yang diakhiri dengan abb. 3.32 16

PENULISAN SUATU TATA BHS (cont d) 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 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. 3.33 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, else s, and so on. As we have noted, these nested structures cannot be described by regular expressions. 3.34 17

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: a start a b b 0 1 2 3 b 3.35 PENULISAN SUATU TATA BHS (cont d) 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. 3.36 18

PENGURAIAN TOP-DOWN Penguaraian (turun berulang) Penguraian top-down usaha untuk: Mencari derivasi i paling kiri i (left-most) t) suatu rangkaian input Membentuk pohon urai Contoh Tata Bhs: S cad, A ab a Input: w cad S c A d S c A d S c A d a b a 3.37 PENGURAIAN PRAKIRA stmt if expr then stmt else stmt while expr do stmt begin stmt_list t t end Kata kunci if, while dan begin akan menentukan produksi 3.38 19

PENGURAIAN BOTTOM-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 : abbcde b 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 S 3.39 20