Pohon Urai (parse) dan Derivasi

Slides:



Advertisements
Presentasi serupa
TURUNAN/ DIFERENSIAL.
Advertisements

Pengendalian Proses : Seleksi (Conditional)
Metode Pengujian Perangkat Lunak (White Box)
Procedure pada Pascal ALPROG II
Menempatkan Pointer Q 6.3 & 7.3 NESTED LOOP.
SOAL ESSAY KELAS XI IPS.
Kuliah 03 – Pengenalan Analisa Sintak
TRANSFORMASI-Z Transformsi-Z Langsung Sifat-sifat Transformasi-Z
CONTEXT-FREE GRAMMAR (CFG) DAN PARSING
Soal-Soal Latihan Mandiri
Chapter 6 Shift dan Reduksi.
Penguraian Bawah-Atas (Bottom-up Parsing)
Chapter 7 Penguraian LR.
Produksi dan Aturan Semantik
Subprogram Program kecil yang melakukan tugas tertentu dan merupakan bagian dari program secara keseluruhan Keuntungan : Mudah dikodekan Mudah dipahami.
Linked List BEBERAPA CONTOH SOAL 6.3 & 7.3 NESTED LOOP.
TURUNAN DIFERENSIAL Pertemuan ke
Struktur Perulangan Week 4 & 5.
Pengantar Teknik Kompilasi
Mata kuliah: Struktur Data Created by 12.2G.12 1.Fungsi operasi yang digunakan untuk pengosongan antrian adalah … a. Pushc. ISFULL b. POPd. CLEAR 2.Operasi.
Algoritma Runut-balik (Backtracking)
Luas Daerah ( Integral ).
PERTEMUAN KE 9 MENU TUNGGAL.
Bagaimana merancang diagram E-R yang interaktif
Pertemuan-4 : Recurrences
Modul 1- Review Java.
FUNGSI MATEMATIKA DISKRIT K- 6 Universitas Indonesia
Push Down Automata (PDA)
Situasi Saat Program Berjalan (Run-time Environment)
FUNGSI STRUKTUR DISKRIT K-8 Program Studi Teknik Komputer
Dasar Pemrograman ARRAY/LARIK.
Bahan Kuliah IF2091 Struktur Diskrit
TATA BAHASA BEBAS KONTEKS (CONTEXT FREE GRAMMAR)
Algoritma Pergantian Halaman
TEORI BAHASA DAN OTOMATA
Kompleksitas Waktu Asimptotik
POHON PENURUNAN.
Syntax Analyzer (Parser) - Dasar
Chapter 6: Operator precedence parsing
Bagaimana merancang diagram E-R yang interaktif
KONSEP dan NOTASI BAHASA
Bahan Kuliah IF2120 Matematika Diskrit
Pohon (bagian ke 6) Matematika Diskrit.
Pohon penurunan dan Penyederhanaan Tata Bahasa Bebas Konteks
WISNU HENDRO MARTONO,M.Sc
Komponen sebuah Kompilator
Kuliah 2 : Analisis Leksikal
Analisis Leksikal.
Chapter 8 Tabel Penguraian LR Kanonik & LALR.
CONTEXT-FREE GRAMMAR (CFG) DAN PARSING
CONTEXT FREE LANGUAGE Yang akan kita pelajari: Pohon Turunan
Pengurai Prediktif & Bottom Up Parsing (penguraian bawah atas)
Teori-Bahasa-dan-Otomata
Pengantar Teknik Kompilasi
MATERI PERKULIAHAN TEKNIK KOMPILASI
Pengantar Teknik Kompilasi
Pengantar Teknik Kompilasi
MATERI PERKULIAHAN TEKNIK KOMPILASI
Pertemuan 10 CONTEXT FREE GRAMMAR (CFG) Lanjutan..
Pengantar Teknik Kompilasi
MATERI PERKULIAHAN TEKNIK KOMPILASI
Pengantar Teknik Kompilasi
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:

Pohon Urai (parse) dan Derivasi Chapter 4 Pohon Urai (parse) dan Derivasi

Pohon Urai (parse) dan Derivasi Pohon urai dapat dianggap sebagai representasi grafik untuk suatu derivasi yang menyaring pilihan urutan penggantian non terminal.

Hubungan derivasi dan pohon urai ,dimana adalah non terminal A. Untuk masing­masing , buat pohon urai dengan hasil (induksi pada i). Untuk i = 1, = A merupakan node tunggal A. Misal sudah terbentuk pohon urai yang hasilnya ( adalah terminal atau nonterminal). Misalkan diderivasi dari dengan mengganti (nonterminal) dengan

Hubungan derivasi dan pohon urai Jadi, pada langkah ke i: dengan memakai Jadi: Jika r=0 maka label untuk anak dari adalah Contoh, derivasi:

Hubungan derivasi dan pohon urai Tata­bahasa mempunyai dua derivasi leftmost yang berbeda untuk input

Hubungan derivasi dan pohon urai Jadi, mempunyai 2 pohon urai Jadi, grammarnya ambiguous

Menghilangkan Ambiguity Contoh: stmt → IF expr THEN stmt | IF expr THEN stmt ELSE stmt | OTHER OTHER = statement lainnya Tata­bahasa tersebut ambiguous karena string berikut: IF E1 THEN IF E2 THEN S1 ELSE S2 mempunyai dua pohon urai

Menghilangkan Ambiguity IF E1 THEN IF E2 THEN S1 ELSE S2

Menghilangkan Ambiguity Supaya tidak ambiguous: Pasangkan masing­masing ELSE dengan THEN yang terdekat dan belum terpasang oleh ELSE lainnya. stmt bisa stmt terpasang atau tidak.

Menghilangkan Ambiguity stmt → stmt_terpasang | stmt_tak_terpasang stmt terpasang → IF expr THEN stmt_terpasang ELSE stmt terpasang | other stmt_tak_terpasang → if expr THEN stmt | IF expr THEN stmt_terpasang ELSE stmt_tak_terpasang

Penghilangan Ambiguity Dengan Penghapusan rekursi kiri Dengan Faktorisasi kiri Tata­bahasa dikatakan rekursi kiri jika nonterminal A dapat menghasilkan Aα. Contoh:E → E+T | T T → T * F | F F → (E) | id

Penghilangan Ambiguity Hilangkan rekursi kiri immediate (produksi dalam bentuk A → Aα) pada E dan T, maka diperoleh:

Penghilangan Ambiguity Secara umum: Berapapun banyaknya A­produksi, kelompokkan A­produksi seperti: dimana tidak dimulai dengan A. Lalu ganti A­produksi dengan: Penghilangan rekursi kiri imediat belum tentu menghilangkan rekursi kiri. Contoh: S → Aa | b A → Ac | Sd | є S adalah rekursi kiri karena

Algoritma penghilangan rekursi kiri Input: Gramar G yang tidak mengandung cycle dan ε­produksi Output: Tata­bahasa yang ekivalen tidak mengandung rekursi kiri Metoda: Pakai algoritma berikut: 1. Susun non terminal dengan urutan A1 , A2 , … , An 2. for i:=1 to n do for j:=1 to i­1 do begin ubah setiap produksi dalam bentuk Ai → Ajγ dengan produksi , dimana Ai → δ1 | … | δk merupakan Aj ­produksi terbaru. Lalu, hilangkan rekursif kiri imediat diantara Aj­produksi end

Algoritma penghilangan rekursi kiri Contoh: S → Aa | b A → Ac | Sd | ε S mengandung ε, tetapi tidak menimbulkan masalah. Urutkan nonterminal S, A. S tidak ada rekursi kiri imediat → untuk i=1 tak ada proses Untuk i=2, gunakan S­produksi pada A → Sd untuk memperoleh : A → Ac | Aad | bd | ε Hilangkan rekursi kiri imediate pada A­produksi. Jadi: S → Aa | b A → bdA’ | A’ A' → cA’ | adA’ | ε

Faktorisasi kiri : Suatu transformasi grammar yang berguna untuk menghasilkan suatu grammar yang cocok untuk penguraian prediktif. Ide: Pada saat tidak jelas mana diantara dua produksi yang akan dipakai untuk menggantikan suatu non­terminal A, A­produksi dapat ditulis kembali untuk menunda pemilihan sampai diperoleh input yang cukup. Secara umum, jika A → αβ1 | αλβ2 pilihan segera tidak dapat ditentukan, maka: A → α A’ A’ → β1 | λβ2 Caranya?

Algoritma Faktorisasi Kiri Input: Tata­bahasa G Output: Tata­bahasa yang sudah terfaktorisasi kiri dan ekivalen dengan G metoda: nonterminal A, cari awalan (prefik) yang terpanjang dan sama dengan awalan pada dua atau lebih pilihan untuk A. Jika γ bukan string kosong, maka ganti semua A produksi A → αβ1 | αβ2 | ... | αβn | γ (dimana γ mewakili semua pilihan yang tidak dimulai dengan α ) dengan: A → αA’ | γ A’ → β1 | β2 | … | βn A' merupakan non­terminal yang baru. Ulangi proses ini sampai tidak ada dua pilihan yang mempunyai awalan yang sama.

Algoritma Faktorisasi Kiri Contoh: S → iEtS | iEtSeS | a E → b Diubah menjadi: S → iEtSS' | a S' → eS | ε

Bahasa dan Bebas Kontek (Language and Context Free) L2 = { an bm cn d m | n >= 1 dan m >= 1} menggambarkan persoalan pemeriksaan jumlah parameter dalam deklarasi dan jumlah argumen dalam pemanggilan prosedur. an , b m merepresentasikan parameter list dua prosedur yang mempunyai n,m parameter. c n , d m merepresentasikan parameter list pemanggilan kedua prosedur itu. Dalam hal ini a dan c lalu b dan d harus sama banyaknya Tapi bahasa ini tidak Context Free (bebas kontek), krn tak bisa dibuatkan grammarnya.

Bahasa dan Bebas Kontek (Language and Context Free) Tetapi: L1' = {wcwR | w ada di dalam (a|b)*}, dimana wR adalah kebalikan w adalah bebas kontek karena ada grammar : S → aSa | bSb | c L2' = { an bm cmd n | n >= 1 dan m >= 1} bebas kontek karena ada grammar: S → aSd | aAd A → bAc | bc

Kelas Parsing (Penguraian): Top Down & Bottom UP Top­down Parsing Mencari derivasi paling kiri (leftmost) dari suatu string input. Pembentukan pohon urai berdasarkan string input. Pengurai Prediktif (Predictive Parsing) (atas­bawah on­backtracking) Contoh: backtracking S → cAd A → ab | a Input w = cad

Pengurai Prediktif Butuh satu input (token) untuk menentukan pilihan produksi 1. Berdasarkan diagram transisi -- Hilangkan rekursi kiri -- Faktorisasi kiri -- nonterminal A (a) Buat state awal dan akhir (b) produksi A → X1X2 … Xn , buat path dari state awal ke state akhir dengan sisi (edge) X1X2 … Xn Cara di atas berhasil kalau tidak ada non­determinisme (ada lebih dari satu transisi dari suatu state, dengan input sama).

Pengurai Prediktif Contoh: diagram transisi E → TE’ E’ → +TE’ | ε T → FT’ T’ → *FT’ | ε F → (E) | id

Pengurai Prediktif Simplified transition diagram:

Pengurai Prediktif Simplified transition diagram for arithmetic expression:

Pengurai Prediktif 2. Berdasarkan stack (prediktif yang non­rekursif) Persoalan pada setiap langkah: menentukan produksi mana yang akan dipakai untuk suatu nonterminal.

Pengurai Prediktif Tabel M adalah M[A,a], A adalah nonterminal, a adalah terminal atau simbol $ (akhir buffer). Program dikendalikan oleh 3 aksi, dengan memperhatikan simbol X pada puncak stack (a) Jika X = a = $, pengurai berhenti dan selesai (b) Jika X = a ≠ $, pengurai mempop X keluar dari stack dan memajukan pointer input ke simbol berikutnya (c) Jika X adalah nonterminal, akan dilihat entri M[X,a]. Entri akan berupa X­produksi grammar (Contoh M[X,a] = {X → uvw}, maka X akan diganti dengan wvu, dengan u di puncak stack), produksi X → uvw dicetak sebagai output).

Pengurai Prediktif Algoritma : Prediktif non­rekursif Input: w, dan tabel pengurai M untuk G Output: jika w L(G), output berupa derivasi left­most dari w, kalau tidak → error. Metoda: ip pada simbol pertama di w$ repeat Misalkan X merupakan puncak dari simbol stack dan a simbol yang ditunjuk oleh ip if X adalah terminal atau $ then if X = a then pop X, majukan ip else error

Pengurai Prediktif else /*X nonterminal*/ if M[X,a] = X → Y1 ... Yk then begin pop X dari stack push Yk , ..., Y1 , Y1 di puncak tampilkan produksi X → Y1 ... Yk end else error until X = $

Moves made by predictive parser on input id+id*id