Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Pohon Urai (parse) dan Derivasi

Presentasi serupa


Presentasi berjudul: "Pohon Urai (parse) dan Derivasi"— Transcript presentasi:

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

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

3 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

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

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

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

7 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

8 Menghilangkan Ambiguity
IF E1 THEN IF E2 THEN S1 ELSE S2

9 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.

10 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

11 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

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

13 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

14 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

15 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’ | ε

16 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?

17 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.

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

19 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.

20 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

21 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

22 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).

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

24 Pengurai Prediktif Simplified transition diagram:

25 Pengurai Prediktif Simplified transition diagram for arithmetic expression:

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

27 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).

28 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

29 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 = $

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


Download ppt "Pohon Urai (parse) dan Derivasi"

Presentasi serupa


Iklan oleh Google