1 / 30

Chapter 4

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.

marlis
Télécharger la présentation

Chapter 4

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

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

More Related