1 / 36

Analisis Sintaks

Analisis Sintaks. Analisis Sintaks (Parser). Bergantung pada bahasa pemrograman masing-masing , karena masing-masing bahasa pemrograman memiliki bentuk sintaks yang berbeda Input berupa token yang berasal dari scanner dan source code

wells
Download Presentation

Analisis Sintaks

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

  2. AnalisisSintaks (Parser) • Bergantungpadabahasapemrogramanmasing-masing, karenamasing-masingbahasapemrogramanmemilikibentuksintaks yang berbeda • Input berupa token yang berasaldari scanner dan source code • Bertugasmengecekkebenaransintaksdanmenghasilkandanmemrosespohonsintaks • Sintaksadalahaturan-aturanbahasadalamsuatubahasapemrogramantertentu

  3. Parser • Parser akanmembentukpohonsintaks (parse tree) • Tree adalahsuatu graph terhubung yang tidaksirkulerdanmemiliki 1 buah root (akar) dandarisanamemilikilintasankesetiapsimpul (daun) • Parse tree berfungsiuntukmenggambarkanbagaimanamemperolehsuatu string dengancaramenurunkansimbol-simbolvariabelmenjadisimbol-simbol terminal, sampaitidakadasimbol yang belumtergantikan

  4. Context-Free Grammar (CFG) • Untukmengimplementasikan parser diperlukan CFG • CFG adalahsekumpulansimbol-simbolvariabel (non-terminal), yang masing-masingmerepresentasikanbahasa. • bahasa yang direpresentasikandengansimbol-simbol non terminal tersebutdiprosessecararekursifdengansuatuaturan-aturan yang disebutaturanproduksi • CFG memilikielemen: • Terminal: simboldasar yang tidakdapatditurunkanlagi, disebutjuga token • Non terminal: variabelsintaktik yang masihdapatditurunkanlagi

  5. CFG • Contoh CFG untukpasangankurung yang selaluberpasangan • S  R • R  {} • R  (R) • R  RR • Contoh CFG untukpalindrom • S  R • R  {} | a | b • R  aRa | bRb

  6. CFG • Contoh • S  aS • S  bt • T  a • Misaluntuk string “aaba” CFG diatasdapatditurunkanmenjadi • S  aS • S  aaS • S  aabT • S  aaba • Buatlahpohonsintaksdari CFG diatasuntuk string “aba”

  7. Contoh lain • Contoh: • S  aS | b • S  bT • T  a | bS • Buatlahpenurunanuntuk string “abbaab” danbuatlahpohonsintaksnya

  8. Contoh parsing dlmbhsInggris • S: Sentence • SP: Subject Phrase • VP: Verb Phrase • NP: Noun Phrase • V: Verb • O: Object • A: Article • N: Noun

  9. Parsing Inggris • Aturanproduksi: • Buatlahpenurunanuntuk string “the cat ate a mouse”

  10. Cara Penurunan • Penurunandapatdilakukan: • Denganpenurunanterkiri: nonterminalterkiri yang disubstitusi • Denganpenurunanterkanan: nonterminalterkanan yang disubstitusi • Contoh 1: • S  aAS | a • A  SbA | ba • Untuk string “aabbaa”: • Denganpenurunanterkiri: S  aAS  aSbAS  aabAS  aabbaS  aabbaa • Denganpenurunanterkanan: S  aAS  aAa  aSbAa  aSbbaa  aabbaa • Bagaimana parse tree untukkeduapenurunandiatas?

  11. Penurunan • Misal CFG: E  E + E | E * E | (E) | -E | id • String “-(id + id)” diterimakarena: • E  - E  - E  -(E)  -(E + E)  -(id + E)  -(id + id) • Latihan: • Apakah “id-id” sebuah string yang diterimaoleh CFG diatas? • Apakah “-id+id” sebuah string yang diterimaoleh CFG diatas?

  12. Penurunan

  13. Mengapa CFG digunakanpada parser? • Mendukungtatabahasa yang bersifatrekursif • Spesifikasibahasapemrogramanmenggunakan CFG • Contoh: (x + 2 ) * 3 • exp  exp op exp | (exp) | -exp | id • op  + | - | * | / | ^ • Setiap RE dapatdideskripsikandengan CFG • Contoh: • (a | b)*abb • A  aA | bA |abb

  14. Mengapa RE digunakanpada scanner? • Scanner memilikiaturantatabahasa yang sederhana • RE menghasilkannotasi yang jelasdanmudahdimengertiuntuk token • Scanner tidakmemerlukansuatutatabahasa yang rekursif

  15. CFG danprioritas • Contoh: x + 2 * 3 • Belumbisamendeteksiprioritas

  16. Contoh NFA ke CFG

  17. Parsing • Proses parsing merupakantahapan yang berfungsiuntukmemeriksaurutankemunculan token. Di dalammengimplementasikansebuahmetode parsing perludiperhatikan: • Rentangwaktueksekusi • Penanganankesalahan

  18. Metode Parsing • Top Down • Metodeinimenelusuripohon, dari root menujuke leaf. Contohmetode: • Backtracking mode: brute force • Non backtracking mode: recursive descent parser predictive parser • Top down melakukan parse secara pre order • Contoh: • S  cAd • A  ab | a • Pohonsintaksuntuk string “cad”?

  19. Metode Parsing • Bottom up • Metodeinimenelusuripohondaridaunmenujuke root • Contoh: • S  aABe • A  Abc | b • B  d • Untuk string “abbcde” • abbcde • aAbcde • aAde • aABe • S

  20. Metode Parsing • Brute Force • Melakukansubstitusisemuasimbol non terminal yang ada. Jikaterjadisalah parsing, makadilakukan backtracking • Contoh: • S  aAd | aB • A  b | c • B  ccd | ddc • Misalingin parse string “accd” • S  aAd • S  abd ; gagal, makadilakukan backtrack • S  acd ; gagal, makadilakukan backtrack • S  aB • S  accd ; berhasil

  21. Brute Force • Kelemahan: • Mencobasemuaaturanproduksi lambat • Sulitmelakukan backtrack danpemulihankesalahan • Borosmemorikarenaperlumencatatlokasikesalahan/backtrack

  22. CFG rekursifkiri • CFG yang memilikisimbol non terminal diruaskanandarisimbol non terminal diruaskiridansimbol non terminal tsbterletakdiruaskanan paling depan • Contoh: • S  Sd • A  Aad • Menyebabkanpohontumbuhkekiri

  23. Penghilanganrekursifkiri • Contoh: • S  Sab | aSc | dd | ff | Sbd • Pisahkanaturanproduksirekursifkiri: • S  Sab | Sbd • Simbolkan: a1 = ab, a2 = bd • Aturanproduksitidakrekursifkiri: • S  aSc | dd | ff • Simbolkan: b1 = aSc, b2 = dd, b3 = ff • Lakukanpenggantianrekursifkiri S  Sab | Sbd • S  aScZ1 | ddZ1 | ffZ1 • Z1  ab | bd • Z1  abZ1 | bdZ1 • Hasilakhir: • S  aSc | dd | ff • S  aScZ1 | ddZ1 | ffZ1 • Z1  ab | bd • Z1  abZ1 | bdZ1

  24. Contoh lain • S  Sab | Sb |cA • A  Aa | a | bd • S  aA | b | cS • A  Sd | e

  25. CFG rekursifkanan • CFG yang memilikisimbol non terminal diruaskanandarisimbol non terminal yang adadiruaskiri. Simbol non terminal tsbterletakdiruaskanan paling belakang. • Contoh: • S  dS • B  adB • Membuatpohonsintaksmelebarkekanan

  26. Transformasi CFG • Ditujukanuntukmemperoleh CFG yang memenuhikriteria-kriteriatertentu yang lebihefisien • CFG dapatdisederhanakandengan: • Penghilanganproduksi useless • Penghilanganproduksi unit • Penghilanganproduksihimpunankosong

  27. Produksi Useless • Adalahproduksi yang memuatsimbolvariabel yang tidakmemilikipenurunan yang akanmenghasilkan terminal seluruhnya/hasilakhirmenuju terminal • Produksiinitidakbergunakarenabiladiturunkantidakakanselesai (masihadasimbolvariabel yang tersisa) • Contoh: • S  aSa | Abd | Bde • A  Ada • B  BBB | a • Disederhanakan: • S  aSa | Bde • B  BBB | a

  28. ProduksiHimpunanKosong • Produksiεadalahproduksi yang berbentuk: A  ε • Penghilanganproduksiεdilakukandenganmelakukanpenggantiansemuaproduksi yang memuatvariabel yang bisamenujuproduksiε • Contoh: • S  bcAd • A  ε //himpunankosong • Disederhanakan: • S  bcd

  29. Produksi Unit (Tunggal) • Adalahproduksidimanaruaskiridankananadalahsimbolvariabel CFG menjadirumitdanpanjang • Contoh • S  Sb • S  C //produksi unit • C  D //produksi unit • C  ef • D  dd • Prosespenggantian, dimulaidariaturanproduksi yang paling dekatmenujukepenurunan terminal-terminal • C  D menjadi C  dd • S  C ; C  efatau C  dd, makamenjadi S  dd | ef • Penyederhanaan: • S  Sb • S  dd | ef • C  dd • C  ef • D  dd

  30. Prakteknya • Penyederhanaandilakukanbersama-sama yang akanmempersiapkan CFG kebentuk normal Chomsky (CNF) • Urutanpengerjaan: • Hilangkanproduksiε • Hilangkanproduksi unit • Hilangkanproduksi useless

  31. Bentuk CNF (Chomsky Normal Form) • Adalahsuatu CFG yang telahmengalamipenghilanganproduksi unit, produksi useless danproduksiε • CNF ruaskanannyamemilikitepatberupasebuah terminal atau 2 non terminal • Contoh: • A  BC | b • B  a • C  BA | d

  32. Algoritma CYK • Algoritma yang digunakanuntuk parsing darikeanggotaan CFG yang CNF. Tujuannyaadalahmengetahuisuatu string diterimaolehsuatu CFG. • Contoh CNF: • S  AB | BC • A  BA | a • B  CC | b • C  AB | a • Periksaapakah string “baaba” masukdalam CFG tsb!

  33. CYK • Tabelawal, N =5 • Langkahberikutnya, baris 2 sampai n

  34. CYK • Langkahberikutnya • Langkahberikutnya

  35. CYK • Langkahberikutnya • Hasilakhir

  36. CYK • Syaratsuatu string diterimaoleh CFG adalahkolompertamabaristerakhirmemuatsimbolawal S • Buatlahpenurunanuntuk string “aaab”

More Related