460 likes | 1.09k Views
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
E N D
AnalisisSintaks (Parser) • Bergantungpadabahasapemrogramanmasing-masing, karenamasing-masingbahasapemrogramanmemilikibentuksintaks yang berbeda • Input berupa token yang berasaldari scanner dan source code • Bertugasmengecekkebenaransintaksdanmenghasilkandanmemrosespohonsintaks • Sintaksadalahaturan-aturanbahasadalamsuatubahasapemrogramantertentu
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
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
CFG • Contoh CFG untukpasangankurung yang selaluberpasangan • S R • R {} • R (R) • R RR • Contoh CFG untukpalindrom • S R • R {} | a | b • R aRa | bRb
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”
Contoh lain • Contoh: • S aS | b • S bT • T a | bS • Buatlahpenurunanuntuk string “abbaab” danbuatlahpohonsintaksnya
Contoh parsing dlmbhsInggris • S: Sentence • SP: Subject Phrase • VP: Verb Phrase • NP: Noun Phrase • V: Verb • O: Object • A: Article • N: Noun
Parsing Inggris • Aturanproduksi: • Buatlahpenurunanuntuk string “the cat ate a mouse”
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?
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?
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
Mengapa RE digunakanpada scanner? • Scanner memilikiaturantatabahasa yang sederhana • RE menghasilkannotasi yang jelasdanmudahdimengertiuntuk token • Scanner tidakmemerlukansuatutatabahasa yang rekursif
CFG danprioritas • Contoh: x + 2 * 3 • Belumbisamendeteksiprioritas
Parsing • Proses parsing merupakantahapan yang berfungsiuntukmemeriksaurutankemunculan token. Di dalammengimplementasikansebuahmetode parsing perludiperhatikan: • Rentangwaktueksekusi • Penanganankesalahan
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”?
Metode Parsing • Bottom up • Metodeinimenelusuripohondaridaunmenujuke root • Contoh: • S aABe • A Abc | b • B d • Untuk string “abbcde” • abbcde • aAbcde • aAde • aABe • S
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
Brute Force • Kelemahan: • Mencobasemuaaturanproduksi lambat • Sulitmelakukan backtrack danpemulihankesalahan • Borosmemorikarenaperlumencatatlokasikesalahan/backtrack
CFG rekursifkiri • CFG yang memilikisimbol non terminal diruaskanandarisimbol non terminal diruaskiridansimbol non terminal tsbterletakdiruaskanan paling depan • Contoh: • S Sd • A Aad • Menyebabkanpohontumbuhkekiri
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
Contoh lain • S Sab | Sb |cA • A Aa | a | bd • S aA | b | cS • A Sd | e
CFG rekursifkanan • CFG yang memilikisimbol non terminal diruaskanandarisimbol non terminal yang adadiruaskiri. Simbol non terminal tsbterletakdiruaskanan paling belakang. • Contoh: • S dS • B adB • Membuatpohonsintaksmelebarkekanan
Transformasi CFG • Ditujukanuntukmemperoleh CFG yang memenuhikriteria-kriteriatertentu yang lebihefisien • CFG dapatdisederhanakandengan: • Penghilanganproduksi useless • Penghilanganproduksi unit • Penghilanganproduksihimpunankosong
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
ProduksiHimpunanKosong • Produksiεadalahproduksi yang berbentuk: A ε • Penghilanganproduksiεdilakukandenganmelakukanpenggantiansemuaproduksi yang memuatvariabel yang bisamenujuproduksiε • Contoh: • S bcAd • A ε //himpunankosong • Disederhanakan: • S bcd
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
Prakteknya • Penyederhanaandilakukanbersama-sama yang akanmempersiapkan CFG kebentuk normal Chomsky (CNF) • Urutanpengerjaan: • Hilangkanproduksiε • Hilangkanproduksi unit • Hilangkanproduksi useless
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
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!
CYK • Tabelawal, N =5 • Langkahberikutnya, baris 2 sampai n
CYK • Langkahberikutnya • Langkahberikutnya
CYK • Langkahberikutnya • Hasilakhir
CYK • Syaratsuatu string diterimaoleh CFG adalahkolompertamabaristerakhirmemuatsimbolawal S • Buatlahpenurunanuntuk string “aaab”