Produksi dan Aturan Semantik Chapter 10 Produksi dan Aturan Semantik Produksi dan Aturan Semantik
Produksi dan Aturan Semantik Dinotasikan oleh: Definisi Berdasarkan sintak Skema Translasi Notasi ini dipakai untuk: Pemeriksaan semantik, seperti tipe Pembentukan kode intermediate Dengan mengevaluasi aturan semantik: Pembentukan kode Menyimpan informasi pada tabel simbol Menampilkan pesan error dsb. Produksi dan Aturan Semantik
Produksi dan Aturan Semantik Definisi Berdasarkan Sintak (DBS) : Bentuk umum dari tata-bahasa bebas kontek dimana masing-masing simbol tata-bahasa mempunyai himpunan atribut (dipartisi menjadi himpunan atribut tersintesa dan atribut terwaris/terinheritasi). Atribut dapat merepresentasikan: string, bilangan, tipe, lokasi memori, dsb. Atribut tersintesa (bottom-up): Atribut yang nilainya dihitung dari nilai atribut anak (children) node-nya. Atribut terwaris (top-down) : Atribut yang nilainya dihitung dari nilai atribut parent atau saudara sekandung (sibling) nodenya. Produksi dan Aturan Semantik
Produksi dan Aturan Semantik Bentuk Definisi Berdasarkan Sintak: Setiap produksi A→ α mempunyai aturan semantik dalam bentuk : b := f (e1, e2, ... , ek) dimana f adalah fungsi dan salah satu dari 2 hal berikut: b adalah atribut tersintesa dari A, dan e1, e2, ... , ek adalah atribut kepunyaan simbol tata-bahasa pada sisi kanan produksi. b adalah atribut terwaris dari satu simbol tata-bahasa pada sisi kanan produksi, dan e1, e2, ... , ek adalah atribut kepunyaan A atau kepunyaan simbol-simbol tata-bahasa pada sisi kanan produksi. Pada dua kasus di atas, b dikatakan “tergantung” pada atribut e1, e2, ... , ek Produksi dan Aturan Semantik
Produksi dan Aturan Semantik Contoh DBS DBS ini disebut juga dengan Definisi beratribut-S karena banyak memakai atribut tersintesa Produksi Aturan Semantik print(E.val) E.val := E1.val + T.val E.val := T.val T.val := T1.val * F.val T.val := F.val F.val := E.val F.val := digit.lexval L → En E → E1+T E → T T → T1 * F T → F F → (E) F → digit Belum ada gambarnya! Produksi dan Aturan Semantik
Produksi dan Aturan Semantik
Produksi dan Aturan Semantik Contoh DBS yang memakai atribut terwaris : T punya atribut tersintesa type, yang nilainya ditentukan oleh keyword pada deklarasi. Aturan semantik L.in = T.type untuk D → TL, memberikan type pada atribut terwaris L.in. Produksi Aturan Semantik L.in := T.type T.type := integer T.type := real L.in := L1.in addtype(id_entry,L.in) addtype(id_entry,L.in) D → TL T → int T → real L → L1 , id L→ id Benar tidak produksi D → TL aturan semantiknya L.in := T.type? Pada aturan produksi L → L1 , id aturan semantiknya L.in := L1.in atau sebaliknya? Di file asli tertulis sebaliknya. Gambar belum ada ...... Produksi dan Aturan Semantik
Pohon urai untuk real id1, id2, id3 Produksi dan Aturan Semantik
Produksi dan Aturan Semantik Graph ketergantungan (berarah): Dipakai untuk melukiskan ketergantungan antara atribut-atribut. Jika suatu atribut b tergantung pada atribut e, maka aturan semantik untuk b tidak bisa dilakukan sebelum aksi semantik untuk e selesai dilakukan. Pembentukannya: tulis masing-masing aturan semantik dalam bentuk b := f (e1, e2, ... , ek) buatkan atribut dummy b untuk aturan semantik yang mempunyai pemanggilan prosedur jika atribut b tergantung pada atribut e maka buat suatu sisi dari e ke b. Produksi dan Aturan Semantik
Produksi dan Aturan Semantik Secara umum Untuk masing-masing node n pada pohon urai do Untuk masing-masing atribut a dari simbol tata-bahasa pada n do Buat suatu node untuk a end do End do Untuk masing-masing aturan semantik b := f (e1, e2, ... , ek) pada produksi yang dipakai di n do Untuk i=1 sampai k do buat sisi dari node ek sampai ke node milik b. Produksi dan Aturan Semantik
Produksi dan Aturan Semantik Belum ada gambarnya! Produksi dan Aturan Semantik
Produksi dan Aturan Semantik Node dummy 6,8,10 adalah untuk pemanggilan addtype(id.entry, L.in) Belum ada gambarnya! Produksi dan Aturan Semantik
Produksi dan Aturan Semantik Untuk menentukan aturan semantik yang mana yang harus dilakukan terlebih dahulu digunakan pengurutan topologi dari DAGnya. Pengurutan topologi: adalah pengurutan m1,m2,…, mk dari node-node dalam graf sedemikian rupa sehingga jika mi→mj adalah suatu sisi dari mi ke mj maka mi muncul sebelum mj. Contoh: DAG di atas dengan node-nodenya, memiliki urutan topologi sebagai berikut : a4 = real a5 = a4 addtype(id3.entry, a5) a7 = a5 addtype(id2.entry, a7) a9 = a7 addtype(id1.entry, a9) Produksi dan Aturan Semantik
Produksi dan Aturan Semantik Metode-metode untuk mengevaluasi aturan semantik: Metode Pohon Urai : Urutan evaluasi berdasarkan urutan topologi DAGnya. DAG dibuat berdasarkan pohon urainya. Metode berdasarkan aturan (rule-based) : Aturan semantik dianalisa pada saat pembuatan compiler. Untuk masing-masing produksi. urutan pengevaluasian atribut sudah ditentukan dalam pembentukan compiler (yang dipakai di kelas). Metode Oblivious: Urutan evaluasi ditetapkan tanpa memperhatikan aturan semantiknya. Metode 2 dan 3 tidak memerlukan pohon urai dan DAG → lebih efisien. Produksi dan Aturan Semantik
Produksi dan Aturan Semantik Pembentukan Pohon Sintak dengan DBS (untuk ekspresi) Node dapat diimplementasikan sebagai record dengan beberapa field. Fungsi-fungsi yang dipakai (menghasilkan pointer ke node) : mknode(op, left, right) : membentuk node operator dengan label op, dan dua field memuat pointer ke left dan right. mkleaf(id, entry) : membentuk node identifier dengan label id dan field yang memuat entry, suatu pointer menunjuk ke tabel simbol. mkleaf(num, val) : membentuk node untuk bilangan dengan label num dan field yang memuat val (= nilai dari bilangan itu) . Produksi dan Aturan Semantik
Produksi dan Aturan Semantik contoh(*) Produksi Aturan Semantik E.nptr := mknode(‘+’, E1.nptr,T.nptr) E.nptr := mknode(‘-’, E1.nptr,T.nptr) E.nptr := T.nptr T.nptr := E.nptr T.nptr :=mkleaf(id,id.entry) T.nptr :=mkleaf(num,num.val) E → E1 + T E → E1 - T E → T T → (T) T → id T → num Produksi dan Aturan Semantik
Produksi dan Aturan Semantik Belum ada gambarnya! Produksi dan Aturan Semantik
Produksi dan Aturan Semantik DAG untuk ekspresi Untuk mendeteksi sub ekspresi yang sama dalam suatu ekspresi. node untuk sub ekspresi yang sama mempunyai lebih dari satu parent. Contoh: a + a * (b – c) + (b- c)*d Daun a mempunyai dua parent karena ada a dan a*(b-c). Subekspresi b - c juga mempunyai dua parent. Produksi dan Aturan Semantik
Produksi dan Aturan Semantik Pembuatannya hampir sama dengan contoh (*), hanya pada saat akan membuat node harus diperiksa dulu apakah sudah ada, jika ada maka tidak perlu dibuat node yang baru. P1 := mkleaf(id,a) P2 := mkleaf(id,a) P3 := mkleaf(id,b) P4 := mkleaf(id,c) P5 := mknode(‘-’,P3,P4) P6 := mknode(‘*’,P2,P5) P7 := mknode(‘+’,P1,P6) P8 := mkleaf(id,b) P9 := mkleaf(id,c) P10 := mknode(‘-’,P8,P9) P11 := mkleaf(id,d) P12 := mknode(‘*’,P10,P11) P13 := mknode(‘+’,P7,P12) Produksi dan Aturan Semantik