Analisa Semantik Kode Antara Penanganan Kesalahan Dosen Ahmad

  • Slides: 32
Download presentation
Analisa Semantik, Kode Antara, Penanganan Kesalahan Dosen : Ahmad Apandi, ST

Analisa Semantik, Kode Antara, Penanganan Kesalahan Dosen : Ahmad Apandi, ST

Analisa Semantik ü Fungsi dari analisa semantik adalah untuk menentukan makna dari serangkaian instruksi

Analisa Semantik ü Fungsi dari analisa semantik adalah untuk menentukan makna dari serangkaian instruksi yang terdapat dalam program sumber. Contoh : A : = (A + B)*(C + D) Maka penganalisis semantik harus mampu menentukan aksi apa yang akan dilakukan oleh operator-operator tersebut

Analisa Semantik Untuk mengetahui makna, maka rutin analisa semantik akan memeriksa : ü Apakah

Analisa Semantik Untuk mengetahui makna, maka rutin analisa semantik akan memeriksa : ü Apakah variabel yang ada telah didefinisikan sebelumnya ü Apakah variabel - variabel tersebut tipenya sama ü Apakah operan yang akan dioperasikan tersebut ada nilainya dan seterusnya.

Analisa Semantik Pengecekan yang dilakukan oleh analisis semantik adalah : Ø Memeriksa keberlakuan nama

Analisa Semantik Pengecekan yang dilakukan oleh analisis semantik adalah : Ø Memeriksa keberlakuan nama – nama meliputi pemeriksaan : ü Duplikasi Pengecekan apakah sebuah nama terjadi pendefinisian lebih dari dua kali. ü Terdefinisi Pengecekan apakah sebuah nama yang dipakai pada tubuh program sudah terdefinisi atau belum.

Analisa Semantik Ø Memeriksa tipe Melakukan pemeriksaan terhadap kesesuaian tipe dalam statemen – statemen

Analisa Semantik Ø Memeriksa tipe Melakukan pemeriksaan terhadap kesesuaian tipe dalam statemen – statemen yang ada. Misal; bila ada operasi antara dua operan maka tipe operan pertama harus bisa dioperasikan dengan operan kedua. Analisa semantik sering juga digabungkan pada pembangkitan kode antara yang menghasilkan Output intermediate code, yang nantinya akan digunakan pada proses kompilasi berikutnya.

Bentuk Notasi Secara umum ada 3 notasi operasi yang dilakukan untuk suatu operasi aritmatika,

Bentuk Notasi Secara umum ada 3 notasi operasi yang dilakukan untuk suatu operasi aritmatika, yaitu ü Prefix ü Infix ü Postfix

Bentuk Notasi Prefix adalah notasi yang terbentuk atas operator dengan operand, dimana oprator didepan

Bentuk Notasi Prefix adalah notasi yang terbentuk atas operator dengan operand, dimana oprator didepan operand. contoh: A + B * C (infix). maka notasi prefixnya adalah: +A*BC. tingkat/ level yang ada didalam notasi Aritmatika: -( ) (Kurung). - ^ (Pangkat). - * / (Perkalian / Pembagian). - + - (Penjumlahan / Pengurangan).

Bentuk Notasi Infix adalah notasi yang membentuk atas operator dengan operand, dimana operator berada

Bentuk Notasi Infix adalah notasi yang membentuk atas operator dengan operand, dimana operator berada diantara operand. Contoh : ü A+B*C ü (A + B) * C ü A - (B + C) * D ^ E

Bentuk Notasi Postfix adalah notasi yang membentuk atas operator dengan operand, dimana operator berada

Bentuk Notasi Postfix adalah notasi yang membentuk atas operator dengan operand, dimana operator berada dibelakang operand. Contoh : A + B * C ( infix). maka notasi postfix adalah ABC*+.

Kode Antara Merupakan hasil dari tahapan analisa semantik Kegunaan dari Kode Antara / intermediate

Kode Antara Merupakan hasil dari tahapan analisa semantik Kegunaan dari Kode Antara / intermediate code : ü Untuk memperkecil usaha dalam membangun kompilator dari sejumlah bahasa ke sejumlah mesin ü Proses optimasi lebih mudah. (dibandingkan pada program sumber atau kode assembly dan kode mesin) ü Bisa melihat dimengerti. program internal yang gampang

Kode Antara Terdapat dua macam kode antara, yaitu ü Notasi Postfix ü N-Tuple

Kode Antara Terdapat dua macam kode antara, yaitu ü Notasi Postfix ü N-Tuple

Kode Antara

Kode Antara

Kode Antara Dalam implementasi ke kode antara, label bisa berupa nomor baris instruksi. Untuk

Kode Antara Dalam implementasi ke kode antara, label bisa berupa nomor baris instruksi. Untuk lebih jelasnya bisa dilihat contoh berikut. Bila diubah ke dalam Postfix IF a > b THEN c : = d ELSE c : = e 11. a 12. b 13. > 14. 22 {menunjuk label 1} 15. BZ 16. c 17. d 18. : = 19. 20. 25 21. BR 22. c 23. e 24. : = 25. {menunjuk label 2}

Kode Antara Bila diubah ke salam Postfix 11. a 12. b 13. > 14.

Kode Antara Bila diubah ke salam Postfix 11. a 12. b 13. > 14. 22 {menunjuk label 1} 15. BZ 16. c 17. d 18. : = 19. 20. 25 {menunjuk label 2} 21. BR 22. c 23. e 24. : = 25. Notasi Postfix tsb bisa dipahami sebagai berikut. ü Bila ekspresi (a > b) salah, maka loncat ke instruksi no. 22 ü Bila ekspresi (a > b) benar, tidak terjadi loncatan, instruksi berlanjut ke 16 sampai 18, lalu loncat ke 25.

Notasi N-Tuple Bila pada Postfix setiap baris instruksi hanya terdiri dari satu tupel, pada

Notasi N-Tuple Bila pada Postfix setiap baris instruksi hanya terdiri dari satu tupel, pada notasi N-tuple setiap baris terdiri dari beberapa tupel. Format umum dari Notasi N-Tuple ada sebagai berikut: operator. . . (N-1) operand

Notasi N-Tuple (Triple Notation) Notasi tripel memiliki format sebagai berikut : <operator> <operan> contoh,

Notasi N-Tuple (Triple Notation) Notasi tripel memiliki format sebagai berikut : <operator> <operan> contoh, instuksi : A : = D * C + B / E Kode antara tripel : 1. *, D, C 2. /, B, E 3. +, (1), (2) 4. : =, A, (3)

Notasi N-Tuple (Quadruples notation) Format notasi kuadrupel : <operator><operan><hasil> hasil adalah temporary variable yang

Notasi N-Tuple (Quadruples notation) Format notasi kuadrupel : <operator><operan><hasil> hasil adalah temporary variable yang bisa ditempatkan pada memory atau register. Masalah yang ada bagaimana mengelola seminimal mungkin. temporary variable (hasil)

Notasi N-Tuple (Quadruples notation) Contoh instruksi : A : = D * C +

Notasi N-Tuple (Quadruples notation) Contoh instruksi : A : = D * C + B / E bila dibuat dalam kode antara : 1. 2. 3. *, D, C, T 1 /, B, E, T 2 +, T 1, T 2, A

Pembangkitan Kode Hasil dari tahapan analisis akan diterima oleh bagian pembangkitan kode (code generator).

Pembangkitan Kode Hasil dari tahapan analisis akan diterima oleh bagian pembangkitan kode (code generator). Disini kode antara dari program biasanya ditranslasikan ke bahasa assembly atau bahasa mesin.

Pembangkitan Kode Contoh : Dapat ditranslasikan ke dalam bahasa Assembly dengan akumulator tunggal :

Pembangkitan Kode Contoh : Dapat ditranslasikan ke dalam bahasa Assembly dengan akumulator tunggal : (A+B)*(C+D) LDA A {Muat isi A ke akumulator} ADD B {Tambahkan isi akumulator dengan B} Notasi Kuadrupel : STO T 1 {Simpan isi akumulator ke T 1} LDA C 1. +, A, B, T 1 ADD D 2. +, C, D, T 2 LDA T 1 3. *, T 1, T 2, T 3 STO T 2 MUL T 2 STO T 3

Penanganan Kesalahan Sebuah kompilator akan sering menemui program yang mengandung kesalahan, maka kompilator harus

Penanganan Kesalahan Sebuah kompilator akan sering menemui program yang mengandung kesalahan, maka kompilator harus memiliki strategi apa yang harus dilakukan untuk menangani kesalahan - kesalahan tersebut

Penanganan Kesalahan Program bisa merupakan : 1. Kesalahan Leksikal : THEN ditulis TEN 2.

Penanganan Kesalahan Program bisa merupakan : 1. Kesalahan Leksikal : THEN ditulis TEN 2. Kesalahan Sintaks : A: =X+(B*(C+D) {jumlah kurungnya kurang} 3. Kesalahan Semantik : Tipe data yang salah. Contoh : Var Siswa : Integer Siswa : = 'Yanuar' {tipe string} Variabel belum didefinisikan. Contoh : B : = B + 1 {B belum didefinisikan}

Penanganan Kesalahan Langkah-langkah Penanganan Kesalahan sebagai berikut : ü Mendeteksi Kesalahan ü Melaporkan Kesalahan

Penanganan Kesalahan Langkah-langkah Penanganan Kesalahan sebagai berikut : ü Mendeteksi Kesalahan ü Melaporkan Kesalahan ü Tindak lanjut pemulihan/perbaikan adalah

Penanganan Kesalahan Langkah-langkah Penanganan Kesalahan sebagai berikut : ü Mendeteksi Kesalahan ü Melaporkan Kesalahan

Penanganan Kesalahan Langkah-langkah Penanganan Kesalahan sebagai berikut : ü Mendeteksi Kesalahan ü Melaporkan Kesalahan ü Tindak lanjut pemulihan/perbaikan adalah

Penanganan Kesalahan sebuah kompilator yang menemukan kesalahan akan melakukan pelaporan kesalahan, yang biasanya meliputi

Penanganan Kesalahan sebuah kompilator yang menemukan kesalahan akan melakukan pelaporan kesalahan, yang biasanya meliputi : ü Kode kesalahan ü Pesan kesalahan dalam bahasa natural ü Nama dan atribut identifier ü Tipe-tipe yang terkait bila type checking

Penanganan Kesalahan Contoh : Error Massage: Error 162 Jumlah : = unknown identifier artinya

Penanganan Kesalahan Contoh : Error Massage: Error 162 Jumlah : = unknown identifier artinya : ü kode kesalahan = 162 ü pesan kesalahan = unknown identifier ü nama identifier = Jumlah

Error Recovery & Error Repairing Error Recovery Pemulihan kesalahan bertujuan mengembalikan kondisi parser kekondisi

Error Recovery & Error Repairing Error Recovery Pemulihan kesalahan bertujuan mengembalikan kondisi parser kekondisi stabil (supaya bisa melanjutkan proses parsing keposisi selanjutnya).

Error Recovery & Error Repairing Perbaikan kesalahan bertujuan memodifikasi source program dari kesalahan dan

Error Recovery & Error Repairing Perbaikan kesalahan bertujuan memodifikasi source program dari kesalahan dan membuatnya valid sehingga memungkinkan kompilator untuk melakukan translasi program yang mana akan dialirkan ketahapan selanjutnya pada proses kompilasi.

Rubah ke dalam notasi prefix dan postfix

Rubah ke dalam notasi prefix dan postfix

Ubah ke dalam bentuk postfix Bila diubah ke dalam Postfix a : = 1

Ubah ke dalam bentuk postfix Bila diubah ke dalam Postfix a : = 1 WHILE a<5 DO a : = a + 1 10. a 11. 12. : = 13. a 14. 15. < 16. label 1} 17. 18. 19. a 20. 1 21. 22. : = 23. 24. 13 25. BR 1 5 26 {menunjuk BZ a + {menunjuk label 2}

Buat kode antara triple nya A: = B+C*D/E F: = C*D IF x >

Buat kode antara triple nya A: = B+C*D/E F: = C*D IF x > y THEN x: = a – b ELSE x: = a + b kode antara tripelnya : 1. >, x, y 2. BZ, (1), (6) {bila kondisi (1) salah satu loncat ke no (6)} 3. –, a, b 4. : =, x, (3) 5. BR, , (8) 6. +, a, b 7. : =, x, (6)

SELESAI

SELESAI