Download
chapter 4 n.
Skip this Video
Loading SlideShow in 5 Seconds..
Chapter 4 PowerPoint Presentation

Chapter 4

288 Vues Download Presentation
Télécharger la présentation

Chapter 4

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. 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 • 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 yangcukup. • 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 dansama 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 | ε E → b

  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 duaprosedur yang mempunyai n,m parameter. • c n, d m merepresentasikan parameter listpemanggilan 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