Chapter 6: Operator precedence parsing

Slides:



Advertisements
Presentasi serupa
TEORI BAHASA DAN AUTOMATA
Advertisements

REPRESENTASI PENGETAHUAN
Kuliah 03 – Pengenalan Analisa Sintak
CONTEXT-FREE GRAMMAR (CFG) DAN PARSING
Chapter 6 Shift dan Reduksi.
Penguraian Bawah-Atas (Bottom-up Parsing)
Chapter 7 Penguraian LR.
Produksi dan Aturan Semantik
Teori Bahasa dan Automata
Kuliah11 Evaluasi Definisi Beratribut-S. Evaluasi bottom­up oleh suatu parser pada saat input diurai (proses) Nilai­nilai atribut tersintesa disimpan.
Pengantar Teknik Kompilasi
TEORI BAHASA & OTOMATA (KONSEP & NOTASI BAHASA)
Pohon Urai (parse) dan Derivasi
UJI HIPOTESIS Dalam kegiatan penelitian, setelah hipotesis di rumuskan, maka keterlibatan statistik adalah sebagai alat untuk menganalisis data guna.
Teori Bahasa dan Otomata 2 sks
TEORI BAHASA DAN OTOMATA
POHON PENURUNAN.
Syntax Analyzer (Parser) - Dasar
Pohon penurunan dan Penyederhanaan Tata Bahasa Bebas Konteks
Bahasa Pemrograman Tingkat Tinggi
Komponen sebuah Kompilator
7. ATURAN PRODUKSI.
Kuliah 2 : Analisis Leksikal
Analisis Leksikal.
Chapter 8 Tabel Penguraian LR Kanonik & LALR.
SQL-Aggregate dengan Fungsi GROUP, HAVING dan subQuery
CONTEXT-FREE GRAMMAR (CFG) DAN PARSING
Pengurai Prediktif & Bottom Up Parsing (penguraian bawah atas)
Pertemuan 8 CONTEXT FREE GRAMMAR (CFG)
Komponen sebuah Kompilator
KONSEP GRAMMAR & HIRARKI CHOMSKY
Teori-Bahasa-dan-Otomata
TEORI BAHASA DAN AUTOMATA TATA BAHASA LEVEL BAHASA
7. MERUMUSKAN HIPOTESIS DEFINISI HIPOTESIS: HIPOTESIS adalah:
KONSEP dan NOTASI BAHASA
Pertemuan 2 OPERATOR DAN EKSPRESI.
TEORI BAHASA DAN OTOMATA
ATURAN PRODUKSI TATA BAHASA REGULER
Bahasa Type 2 (CONTEXT FREE GRAMMAR)
OTOMATA DAN TEORI BAHASA FORMAL
By : Lisda Juliana Pangaribuan
Pengantar Teknik Kompilasi
Teori-Bahasa-dan-Otomata
Sheila Nurul Huda, S.Kom, M.Cs
Bahasa Context Free.
MATERI PERKULIAHAN TEKNIK KOMPILASI
Pengantar Teknik Kompilasi
Analisis Sintaks (Parsing)
MATERI PERKULIAHAN TEKNIK KOMPILASI
MATERI PERKULIAHAN TEKNIK KOMPILASI
ALGORITMA & PEMROGRAMAN 1C
MATERI PERKULIAHAN TEKNIK KOMPILASI
MATERI PERKULIAHAN TEKNIK KOMPILASI
Pengantar Teknik Kompilasi
Pertemuan 10 CONTEXT FREE GRAMMAR (CFG) Lanjutan..
Pengantar Teknik Kompilasi
MATERI PERKULIAHAN TEKNIK KOMPILASI
Pengantar Teknik Kompilasi
OTOMATA DAN TEORI BAHASA FORMAL
CONTEXT-FREE GRAMMAR (CFG) DAN PARSING
Pengenalan Pola secara sintaktis (PPSint)
Operator C++ Pertemuan 3.
Pengantar Teknik Kompilasi
Analisis Sintaksis By: Kustanto, S.T., M.Eng.
Automata Hingga Deterministik (AHD)
Pengantar Teknik Kompilasi
Grammar dan Bahasa Automata
CONTEXT-FREE GRAMMAR (CFG) DAN PARSING
Pengantar Teknik Kompilasi
CONTEXT-FREE GRAMMAR (CFG) DAN PARSING
Transcript presentasi:

Chapter 6: Operator precedence parsing Grammar yang dipakai biasanya grammar operator = tidak mempunyai dua non terminal yang berdampingan pada sisi kanan produksinya, atau grammar yang tak punya є­produksi. Grammar berikut bukan grammar operator :

Tetapi, jika A ditulis sebagai alternatifnya, maka diperoleh grammar operator: E → E+E | E-E | E*E | E/E | E↑E | (E) | -E | id (*) Keburukan penguraian presedensi operator : Sulit mengatasi tanda minus yang mempunyai 2 presedensi yang berbeda Hanya sedikit grammar yang dapat diurai User tidak yakin bahwa parser menerima bahasa yang diinginkan

Chapter 6: Shift dan Reduksi Beberapa compiler memakai presedensi operator untuk ekspresi, ada juga beberapa yang memakainya untuk seluruh bagian bahasa. Dalam penguraian ini, relasi presedensi <., =, .> didefinisikan, dan diletakkan diantara terminal­terminal. Relasi ini membantu pemilihan handel a memberikan presedensi pada b (b mempunyai presedensi lebih tinggi dari a) a = b a mempunyai presedensi sama dengan b a mengambil presedensi b (a mempunyai presedensi lebih tinggi dari b)

Chapter 6: Shift dan Reduksi Untuk sepasang terminal a, b: a rel b, dimana rel salah satu relasi, bahkan mungkin juga a dan b tidak mempunyai relasi. Menentukan presedensi: Berdasarkan tradisi asosiatifitas dan presedensi dari operator. Contoh : dan Grammarnya dibuat tidak ambiguous, gunakan metoda pembentukan presedensi untuk grammar ybs. [Aho & Ullman, 1972b]

Chapter 6: Shift dan Reduksi Pemakaian relasi presedensi operator Sebagai pembatas handel, < · menandai sisi kiri handel, = muncul di tengah handel, dan · > membatasi sisi kanan handel. Karena tidak ada nonterminal yang berdampingan, bentuk sentensial kanan dapat ditulis sebagai: β0α1 β1… αn βn βi adalah є atau nonterminal tunggal αi adalah terminal tunggal.

Chapter 6: Shift dan Reduksi Misalkan diantara αi, αi+1 hanya ada satu relasi. $ dipakai sebagai akhir string, definisikan $< · b dan b·> $ untuk terminal b. Misalkan nonterminal telah diganti oleh terminal dan letakkan < ·, = , · > diantara 2 terminal, dan diantara terminal paling kanan dan $. (**)Contoh: bentuk sentensial kanannya = id+id id dan relasi presedensi: id + * $ Id ·> <·

Chapter 6: Shift dan Reduksi String dan relasi presedensinya dapat ditulis sebagai: $ < id > + < id > * < id > $ untuk mendapatkan handel: Lihat string dari akhir kiri ke kanan sampai ditemukan ·> yang pertama. Lihat string ke kiri melewati = sampai <· ditemukan. Handelnya adalah semua yang di kiri ·> (yang pertama) dan di sebelah kanan <·.

Chapter 6: Shift dan Reduksi Pada contoh handel yang pertama adalah id, setelah proses dilanjutkan diperoleh E+E*E, hapus nonterminalnya dan perhatikan $+*$ dengan memakai relasi presedensi diperoleh: Jadi, sisi kiri handel ada diantara + dan *, dan sisi kanannya antara * dan $. Handelnya E*E.

Chapter 6: Shift dan Reduksi Algoritma penguraian presedensi operator Input : string input w dan tabel relasi presedensi. Output : Jika w L(G), maka kerangka pohon urai dengan E sebagai label node interior, jika tidak maka error. Pada awalnya stack memuat $ dan buffer input memuat w$. ip menunjuk pada simbol pertama dari w$. repeat forever if $ di puncak stack dan ip menunjuk $ then return

Chapter 6: Shift dan Reduksi else begin misalkan a adalah simbol terminal yang paling atas pada stack dan b simbol yang ditunjuk ip; if a < · b atau a = b then { push b ke dalam stack ip menunjuk pada simbol input berikutnya } else if a · > b then /*reduksi*/ { repeat

Chapter 6: Shift dan Reduksi pop stack until terminal pada puncak stack punya relasi <· dengan terminal yang baru saja dipop } (13) else error() end. Apakah algoritma ini sudah lengkap?

Chapter 6: Shift dan Reduksi Pembentukan relasi presedensi operator berdasarkan asosiatifitas dan presedensi grammar (*) Jika operator θ1 punya presedensi yang lebih tinggi dari operator θ2 , tentukan θ1 ·> θ2 dan θ2 <· θ1 . (Contoh * · > + dan + < · *). Jika θ1 dan θ2 punya presedensi yang sama (bila θ1 = θ2), tentukan θ1 ·> θ2 dan θ2 ·> θ1 (jika operator ini asosiatif kiri) atau θ1 <· θ2 dan θ2 <· θ1 (jika operator ini asosiatif kanan). (Contoh: jika + dan – asosiatif kiri, + ·> +, + ·> -, - ·> -, - ·> +)

Chapter 6: Shift dan Reduksi 3. θ <· id, id ·> θ, θ <·(, (<· θ, θ ·> $, $ <· θ untuk semua operator θ, dan juga: ( = ) $ <· ( $ <· id (<· ( id ·> $ ) ·> $ (<· id id ·> ) ) ·> ) Contoh: dengan memisalkan ↑ punya presedensi tertinggi dan asosiatif kiri * dan / yang tertinggi berikutnya dan asosiatif kiri + dan – berpresedensi terendah dan asosiatif kiri

Chapter 6: Shift dan Reduksi maka tabelnya: (TAMBAH PANGKAT)

Chapter 6: Shift dan Reduksi Mengatasi operator unari: 1. Operator unari ¬ (negasi logik) Tentukan θ <·¬ untuk sembarang operator θ dan ¬ .> θ jika ¬ punya presedensi lebih tinggi dari dari θ dan ¬ <. Θ jika tidak. Contoh: Jika ¬ lebih tinggi dari &, dan & asosiatif kiri, E&¬E&E ditulis sebagai (E&(¬E)&E) 2. Unari minus, tidak bisa diatasi dengan cara 1. Sulit mengatasi hal seperti . Cara terbaik, pakai penganalisa leksikal untuk membedakan unary minus dan binari minus, dengan memberikan token yang berbeda. Penganalisa ini harus mengingat simbol sebelumnya.

Chapter 6: Shift dan Reduksi Contoh: dalam Fortran — adalah unari jika didahului oleh token operator, kurung buka, koma, atau simbol assignment. Fungsi­fungsi presedensi Tabel relasi presedensi tidak perlu dipakai secara langsung, dipakai tabel fungsi. Tabel ini dalam dua fungsi f dan g yang memetakan simbol terminal ke integer.

Chapter 6: Shift dan Reduksi Pilih f dan g sedemikian rupa sehingga a dan b: jika jika a = b Contoh: tabel presedensi yang lalu mempunyai tabel fungsi sbb:

Chapter 6: Shift dan Reduksi Algoritma pembentukan fungsi presedensi Input: matrik presedensi operator. Output: fungsi­fungsi presedensi yang merepresentasikan matrik input, atau suatu tanda tak ada relasi. Metoda: Buatkan simbol fa dan ga untuk masing­masing terminal a atau $.

Chapter 6: Shift dan Reduksi 2. Partisi simbol­simbol tersebut sebanyak mungkin sehingga jika a = b , maka fa dan gb berada pada group yang sama. (anggota­anggota group mungkin saja tidak punya relasi = , contoh jika a = b dan c = b , maka fa dan fc pada group yang sama, meskipun a dan c mungkin tidak punya relasi). 3. Buat suatu graph berarah yang nodenya adalah group-group pada (2). jika buatkan suatu sisi (edge) dari group gb ke group fa. Jika , buat suatu sisi dari group f(a) ke g(b).

Chapter 6: Shift dan Reduksi 4. Jika graf yang terbentuk mengandung siklus, maka tak ada fungsi­fungsi presedensi. Jika tidak ada siklus, f(a) adalah path terpanjang yang awalnya pada group dari f(a), g(a) adalah path terpanjang yang awalnya pada group dari ga.

Chapter 6: Shift dan Reduksi Tabel relasi (**) mempunyai graf: f$ dan g$ tak punya sisi yang keluar: f$ = g$ = 0 panjang dari path terpanjang dari gt = 1, g(t) = 1, ada path dari g(id) ke f* ke g* ke f+ ke g+ ke f$.Jadi g(id) = 5

Chapter 6: Shift dan Reduksi Fungsi-fungsi presedensinya adalah:

Chapter 6: Shift dan Reduksi Mengatasi error: Sintak error terjadi pada kasus-kasus: Tidak ada relasi presedensi antara terminal pada puncak stack dengan simbol input. (Tidak bisa dideteksi kalau memakai fungsi presedensi). Handel ditemukan (diapit antara < dan >), tetapi tidak ada produksi yang sisi kanannya adalah handel ini.

Chapter 6: Shift dan Reduksi Kasus(2), karena tidak bisa melakukan reduksi, yang baik adalah menampilkan pesan error. Jenis kesalahan/pesan tergantung pada handel yang ditemukan pada sisi kanan yang ada. Misalkan abc adalah handel yang ditemukan, tetapi tidak ada sisi kanan produksi yang mengandung a,b atau c, maka bisa dilakukan penghapusan a,b atau c. Contoh : jika ada sisi kanan aEcE, maka tampilkan: 'illegal b on line (line containing b) di sini bisa dilakukan perubahan atau penyisipan terminal, tetapi bagaimana?

Chapter 6: Shift dan Reduksi Jika ada sisi kanan abEdc, bisa ditampilkan: missing d on line (line containing c) atau jika ada sisi kanan aEbc, tampilkan: missing E on line (line containing b) Secara umum, pesan error yang ditampilkan tergantung pada apakah ada sejumlah hingga atau tak hingga string yang dapat dipop (pada baris 10­12 algoritma).

Chapter 6: Shift dan Reduksi Dikatakan sejumlah hingga, jika tabel presedensi mempunyai sejumlah hingga terminal yang dihubungkan oleh relasi = , (path dari terminal awal ke terminal akhir tak punya siklus), jika punya siklus → tak hingga. Suatu string b1… bk dapat dipop jika ada simbol a dalam stack (mungkin $) sedemikian rupa sehingga a <·b, dan ada simbol c sedemikian rupa sehingga bk ·> c (b1 disebut terminal awal, bk terminal akhir)

Chapter 6: Shift dan Reduksi Contoh: untuk grammar E  E+E | E-E | E*E | E/E | E↑E | (E) | -E | id, graf matrik presedensinya adalah: Hanya ada satu sisi (→), karena hanya (dan) yang dihubungkan oleh = . Panjang path untuk +,-,*,/, ↑,id adalah 1, sedang (→) adalah 2. Jadi, tidak ada siklus.

Chapter 6: Shift dan Reduksi Karena panjang pathnya adalah 1 dan 2, pemeriksa error akan melakukan: 1. Jika +,-,*,/ atau ↑ direduksi, akan diperiksa bahwa nonterminal harus ada pada dua sisinya. Kalau tidak ada, maka ditampilkan pesan : missing operand 2. Jika id direduksi, akan diperiksa bahwa harus tidak ada nonterminal di salah satu sisinya, kalau ada, ditampilkan pesan : missing operator

Chapter 6: Shift dan Reduksi 3. Jika ( ) direduksi, harus dipastikan bahwa ada nonterminal diantara tanda kurung itu. Kalau tidak, maka ditampilkan : no expression between parantheses Jika banyaknya string yang dapat dipop tak hingga, tak dapat dilakukan cara seperti di atas. Hanya bisa dibandingkan string tersebut dengan sisi kanan (yang mirip) dari suatu produksi, lalu ditampilkan pesan bahwa produksi itu yang diinginkan. Kalau tidak ada produksi yang mirip, maka bisa ditampilkan pesan bahwa ada sesuatu yang tidak benar dalam baris yang bersangkutan.

Chapter 6: Shift dan Reduksi Kasus (1), tidak ada relasi, (konflik shift/reduksi). (terjadi pada baris 6 dan 9 algoritma). Jalan keluar → ubah stack atau input atau keduanya. Contoh : - pada stack ada a,b pada input ada cd, dimana a ≤·c maka b dapat dipop - jika b ≤·d maka c harus dihapus Secara umum, entri kosong pada matrik presedensinya, diisi dengan rutin untuk mengatasi error yang bersangkutan.

Chapter 6: Shift dan Reduksi Contoh (dari (*)): e1: {dipanggil sewaktu tidak ada ekspresi} sisipkan id ke dalam input tampilkan pesan: “operand hilang”

Chapter 6: Shift dan Reduksi e2: {dipanggil sewaktu ekspresi dimulai dengan (} hapus ) pada input tampilkan pesan: “kurung tutup tak seimbang” e3: {dipanggil sewaktu id atau ) diikuti oleh id atau (} sisipkan + pada input tampilkan pesan: “operator hilang” e4: {dipanggil sewaktu ekspresi diakhir oleh kurung buka} pop ( dari stack tampilkan pesan: “kurung tutup hilang”