Tm teknik kompilasi juni 2013

531
-1

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
531
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
25
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Tm teknik kompilasi juni 2013

  1. 1. TUGAS MANDIRITEKNIK KOMPILASISoal :Silahkan anda menganalisa Model Kompilator VB.Net dan Model Kompilator di bawah iniBagan Pokok Proses KompilasiPresentasi Ernastuti & Sulistyo (Universitas Gunadarma)Termasuk :1. Penanganan Kesalahan2. Error recovery3. Error Repair
  2. 2. Definisi Compiler1. Kompilator (Inggris: compiler) adalah sebuah program komputer yang berguna untukmenerjemahkan program komputer yang ditulis dalam bahasa pemrograman tertentu menjadiprogram yang ditulis dalam bahasa pemrograman lain. 12. Compiler adalah suatu program yang melakukan proses translasi dari HLL ke dalam bahasamesin di komputer. Disamping program translasi, compiler juga mempunyai beberapa fungsipenting, seperti diagnostik, contohnya kemampuan pendeteksian error/kesalahan.Pelannggaran spesifikasi HLL akan terdeteksi dan dilaporkan kepada programmer olehcompiler agar segera diperbaiki hingga mempermudah pembentukan machine languageequivalent.23. “…interpret sequences of particular instructions, but not program texts. Therefore, theprogram text must be translated into a suitable instruction sequence before it can beprocessed by a computer. This translation can be automated, which implies that it can beformulated as a program itself…” 3Dari kedua definisi di atas dapat disimpulkan bahwa Compiler adalah sebuah perangkat lunak komputeryang digunakan sebagai alat bantu dalam melakukan proses penterjemahan intruksi dan kode secaraotomatis ke dalam bahasa mesin (assembler) tertentu sebagai perantara dan juga memiliki fungsi sebagaialat deteksi kesalahan dan memperbaiki hingga mempermudah pembentukan machine languageequivalent.Gambar 1 – Proses Penterjemahan1http://id.wikipedia.org/wiki/Kompilator2Bahan Ajar, karmila.staff.gunadarma.ac.id/3Niklaus Wirth, Compiler Construction, ISBN 0-201-40353-6, Addison-Wesley, 1996
  3. 3. Dari penjelasan di atas terlihat bahwa tugas dari Compiler adalah : Melakukan translasi dari HLL program sebagai input (source program) ke dalamequivalent machine language program. Menghasilkan pesan hasil diagnostik kepada programmer bila terjadi penyimpanganspesifikasi HLL(source language).Arsitektur kompilator modern biasanya bukan lagi merupakan program tunggal namun merupakanrangkaian komunikasi antar program dengan tugas spesifik masing-masing.1. Compilator itu sendiri, yang menerima kode sumber dan menghasilkan bahasa tingkat rendah(assembly)2. Assembler, yang menerima keluaran kompilator dan menghasilkan berkas objek dalam bahasa mesin3. Linker, yang menerima berkas objek keluaran assembler untuk kemudian digabungkan denganpustaka-pustaka yang diperlukan dan menghasilkan program yang dapat dieksekusi (executable)Proses Pokok Model KompilatorDalam ilmu komputer, kode sumber (Inggris: source code) atau kode program adalah suaturangkaian pernyataan atau deklarasi yang ditulis dalam bahasa pemrograman komputer yangterbaca manusia. Kode sumber yang menyusun suatu program biasanya disimpan dalam satuatau lebih berkas teks, dan dapat pula ditampilkan dalam bentuk cuplikan kode (code snippet)yang dicetak pada buku atau media lainnya. Kode sumber sebelum dikonversikan menjadibentuk berkas yang dapat dieksekusi komputer harus melalui proses kompilasi terlebih dahulu.Konversi ini bisa dilakukan oleh suatu kompilator, atau langsung dari bentuk terbaca manusiadengan bantuan interpreter.4Gambar 2 - Bagan Pokok Proses KompilasiPresentasi Ernastuti & Sulistyo (Universitas Gunadarma)4http://id.wikipedia.org/wiki/Kode_sumber
  4. 4. Tahap AnalysisAnalisa Leksikal (Scanner) merupakan antarmuka antara kode program sumber dan analisasintaktik (Parser). Scanner melakukan pemeriksaan karakter per karakter pada teks masukan,memecah sumber program menjadi bagian-bagian disebut Token.5Dua aspek penting pembuatan Analisa Leksikal adalah : Menentukan token-token bahasa. Mengenali token-token bahasa dari program sumber.Tugas – tugas analisa leksikal antara lain :a. Melakukan pembacaan kode sumber dengan merunut karakter demi karakter.b. Mengenali besaran leksik (identifier, keywords, dan konstanta).c. Mentransformasi menjadi sebuah token dan menentukan jenis tokennya.d. Mengirimkan token.e. Membuang atau mengabaikan white-space dan komentar dalam program.f. Menangani kesalahan.g. Menangani tabel simbol.Proses Analisa Sintaks (Parsing) dilakukan terhadap descriptor dari analisa leksikal untukmenentukan struktur sintaks dari input statement. Proses tersebut dikenal dengan nama“Parsing”. Output dari Parsing adalah representasi dari struktur sintaks suatu statement. Analisasemantik memanfaatkan pohon sintaks yang dihasilkan pada proses parsing (analisa sintaks).Fungsi dari analisa semantik adalah untuk menentukan makna dari serangkaian instruksi yangterdapat dalam program sumber. Untuk mengetahui makna, maka rutin analisa semantik akanmemeriksa :• Apakah variabel yang ada telah didefinisikan sebelumnya,• Apakah variable-variabel tersebut tipenya sama,• Apakah operan yang akan dioperasikan tersebut ada nilainya dan seterusnya.Untuk dapat menjalankan fungsi tersebut dengan baik, semantic analyzer seringkalimenggunakan tabel simbol. Pemeriksaan bisa dilakukan pada tabel identifier, tabel display dantabel blok, misal pada field link. Pengecekan yang dilakukan oleh analisis semantik adalah :1. Memeriksa keberlakuan nama – nama meliputi pemeriksaan : Duplikasi, pengecekan apakah sebuah nama terjadi pendefinisian lebih dari dua kali.Pengecekan dilakukan pada bagian pengelola blok. Terdefinisi, pengecekan apakah sebuah nama yang dipakai pada tubuh program sudahterdefinisi atau belum. Pengecekan dilakukan pada semua tempat kecuali blok.2. Memeriksa tipeMelakukan pemeriksaan terhadap kesesuaian tipe dalam statement – statement yang ada.Misal : Bila ada operasi antara dua operan, maka tipe operan pertama harus bisa dioperasikandengan operan kedua.5Iwan Binanto, 2005, Konsep Bahasa Pemrograman : Penerbit Andi dari Rizki Pramudiningtyas,http://rizkistitek.blogspot.com/2012/03/tahap-analisa-fase-analysis.html
  5. 5. Kode Antara (Intermediate Code) merupakan hasil dari tahapan analisis, yang dibuat olehkompilator pada saat mentranslasikan program dari bahasa tingkat tinggi. Kegunaan dari KodeAntara/intermediate code : Untuk memperkecil usaha dalam membangun kompilator dari sejumlah bahasa ke sejumlahmesin Proses optimasi lebih mudah (dibandingkan pada program sumber atau kode assembly dankode mesin). Bisa melihat program internal yang gampang dimengerti.Tahap SintesaTahapan akhir suatu tranlasi terfokus pada pembangunan program yang executable dari outputyang dihasilkan oleh semantic analyzer6. Tahap ini melibatkan penghasil kode (code generation)jika dibutuhkan dan melibatkan juga optimisasi pada program yang sudah dihasilkan. Jikasubprogram ditranslasikan secara terpisah atau jika pustaka subprogram digunakan maka tahapanfinal linking dan loading dibutuhkan untuk menghasilkan suatu program lengkap yang siapdieksekusi.a. Pembentukan/Pembangkitan KodeDalam tahap ini bentuk antara dari bahasa sumber yang berupa suatu pohon sintaksditerjemahkan ke dalam suatu bahasa assembli atau bahasa mesin. Tahap ini membangkitkankode antara (intermediate code) berdasarkan pohon parsing. Pohon parsing selanjutnyaditerjemahkan oleh suatu penerjemah, misalnya penerjemah berdasarkan sintaks (syntax-directed translator). Hasil penerjemahan ini biasanya merupaka perintah tiga alamat (three-address code) yang merupakan representasi program untuk suatu mesin abstrak. Bahasamesin yang dihasilkan adalah bahasa assembli yang merupakan suatu perintah 1 alamat, 1akumulator. Perintah tiga alamat bisa berbentuk quadruples (op, arg1, arg2, result), triples(op, arg1, arg2). Ekspresi dengan satu argumen dinyatakan dengan menetapkan arg2 dengan –(strip, dash).b. Optimalisasi KodeHasil pembentukan kode yang diperoleh kemudian dibuat lebih kompak lagi denganmelakukan beberapa teknik optimasi supaya dapat diperoleh program yang lebih efisien.Dalam hal ini dilakukan beberapa hal seperti pendeteksian suatu ekspresi yang sering terjadi,sehingga pengulangan tidak perlu terjadi dan lain sebagainya. Pada tahap ini melakukanoptimasi (peghematan space dan waktu komputasi) jika mungkin terhadap kode antara.Semantic analyzer biasanya menghasilkan suatu output program executable yang sudahditranslasi yang berbentuk intermediate code, yang kadangkala merupakan kode yang burukatau tidak efisien.6Bahan Ajar, octa_bl.staff.gunadarma.ac.id/
  6. 6. c. Penghasil KodeSetelah program yang ditranslasi dan representasi internalnya dioptimalisasi maka harusdibentuk sebagai statemen bahasa assembly, kode mesin, atau program objek yang lainnyayang menjadi output dari translasi. Kode output ini mungkin dapat langsung dieksekusi, ataumembutuhkan langkah translasi berikutnya, yaitu Linking dan Loading.d. Linking dan LoadingTahapan akhir yang bersifat opsional adalah menggabungkan potongan-potongan kode yangdihasilkan dari translasi terpisah suatu subprogram ke dalam suatu program final executableyang utuh. Hal ini dapat terjadi karena potongan-potongan kode tersebut mempunyai loadertables yang dihasilkan oleh translator. Loader tables inilah yang digunakan oleh linking loaderuntuk menggabungkan potongan-potongan kode tersebut di memori sehingga menghasilkanprogram final executable yang siap untuk dieksekusi.Pada tahap Analys dan Sintesa seluruh sumber input dan output berada pada Table, dimanafungsi Table itu sendiri adalah untuk menyimpan semua informasi yang berhubungan denganproses kompilasi.Program Sasaran dapat berupa bahasa pemrograman lain atau bahasa mesin pada suatucomputer.Kompilator dalam VB.NetInformasi dalam berkas ditentukan oleh pembuatnya7. Ada banyak beragam jenis informasi yangdapat disimpan dalam berkas. Hal ini disebabkan oleh struktur tertentu yang dimiliki oleh berkas,sesuai dengan jenisnya masing-masing. Contohnya :• Text file; yaitu urutan karakter yang disusun ke dalam baris-baris• Source file; yaitu urutan subroutine dan fungsi yang nantinya akan dideklarasikan• Object file; merupakan urutan byte yang diatur ke dalam blok-blok yang dikenali oleh linkerdari system• Executable file; adalah rangkaian code section yang dapat dibawa loader ke dalam memoridan dieksekusiCompiler dan Assemblers membuat file objek yang berisi kode biner dan data yangdihasilkan untuk file sumber. Linker menggabungkan beberapa file menjadi satu objek, loadermengambil objek file dan memasukannya ke dalam memori. (Dalam lingkungan pemrogramanterpadu, kompiler, perakit, dan linker dijalankan secara implisit ketika pengguna akan membuatprogram.Dalam pemrograman komputer, Runtime Library adalah Application ProgrammingInterface yang digunakan oleh compiler untuk memanggil beberapa pola dari sistem runtime.Sistem runtime mengimplementasikan model pelaksanaan dan pola yang mendasar dari bahasapemrograman. Runtime Library dapat mengimplementasikan sebagian dari pola sistem runtime,tetapi jika panggilan membaca kode baru tersedia yang dibalut dalam informasi pake dan7Bahan Ajar, saefudin.staff.jak-stik.ac.id/
  7. 7. mengirimkannya ke sistem runtime. Namun, terkadang Runtime Library dimaksudkan untukmenyertakan kode dari sistem runtime itu sendiri, meskipun banyak kode yang tidak dapatterhubung secara langsung melalui library.Gambar 3 - Model Kompilator dalam VB.Net8Linker adalah suatu program yang menterjemahkan program objek (bereksention OBJ) kebentuk program eksekusi (berekstension EXE atau COM). Sedangkan untuk membuat file objectke bentuk file yang dapat dieksekusi (berekstension .COM atau .EXE) bisa anda gunakan fileTLINK.EXE.Gambar 4 – Visual Basic Compiled and Run98http://www.webopedia.com/FIG/COMPILE.gif
  8. 8. Pada Gambar 4 menunjukkan bagaimana sebuah program Visual Basic dikompilasi dandijalankan. Untuk memulai, Anda menggunakan Visual Studio untuk membuat sebuah proyek,yang terdiri dari file sumber yang berisi pernyataan (statement). Sebuah proyek pemrogramanjuga dalam Visual Basic dapat berisi jenis file lainnya, seperti suara, gambar atau teks file.Setelah Anda memasukkan kode Visual Basic untuk sebuah proyek, Compiler Visual Basicdalam Visual Studio akan membangun atau mengkompilasi kode sumber Visual Basic ke dalamMicrosoft Intermediate Language.Intermediate Language disimpan pada disk dalam sebuah file yang disebut assembly.Selain Intermediate Language, dalam assembly sudah termasuk referensi kelas yang dibutuhkanoleh aplikasi. Assembly dapat dijalankan pada setiap PC yang telah memiliki CommonLanguage Runtime. Ketika assembly dijalankan, Common Language Runtime mengubahIntermediate Language ke kode asli yang dapat dijalankan oleh sistem operasi Windows.Standar Operasi1. Programmer menggunakan Visual Studio untuk membuat proyek yang mencakup VisualBasic file source. Dalam beberapa kasus, proyek juga akan berisi jenis file lainnya, sepertigambar grafis atau file suara.2. Compiler Visual Basic menerjemahkan Visual Basic source code proyek ke dalam MicrosoftIntermediate Language. Bahasa ini disimpan pada disk dalam sebuah assembly yang jugaberisi referensi kelas yang dibutuhkan. Assembly adalah file executable yang memiliki exe.Atau ekstensi dll.3. Assembly ini dijalankan oleh Common Language Runtime NET. Framework. The CommonLanguage Runtime mengelola semua aspek bagaimana perakitan dijalankan, termasukmengubah Intermediate Language ke kode asli yang dapat dijalankan oleh sistem operasi,pengelolaan memori untuk assembly, dan keamanannya.Error HandlingError Handling atau yang biasa disebut dengan penanganan kesalahan, terdiri atas beberapamekanisme, yaitu :Jenis Kesalahan Contoh Kesalahan Langkah PenyelesaianKesalahan leksikal Kesalahan dalam mengetik Mendeteksi kesalahanMelaporkan kesalahanTindak lanjut perbaikanKesalahan Sintaks Kesalahan dalam menuliskansymbol operasi aritmatikaKesalahan Semantics Tipe data yang salahVariable belum didefinisikan9http://centurion2.com/VBHomework/VB1/vb1.php
  9. 9. Reaksi Compiler Pada kesalahanAda beberapa reaksi compiler menangani kesalahan :Reaksi-reaksi yang tidak dapatditerima Compilator crash: Berhenti atau hang Looping : compilator tidak bisa berhenti(infinite/onbounded loop) Menghasilkan Obyek program yang salah : berbahaya,bisa diketahui/muncul setelah program dieksekusiReaksi yang benar, tapi kurangdapat diterima dan kurangbermanfaat Compilator menemukan kesalahan pertama,melaporkannya, lalu berhenti (halt) Pemrogram membuang waktu untuk melakukanpengulangan compilasi untuk setiap kali terdapatsebuah errorReaksi yang sudah dapat dilakukan  Compilator melaporkan Error dan melakukan Recoveryatau RepairReaksi yang belum dapat dilakukan  Compiler mengkoreksi kesalahan Menghasilkan obyek program sesuai yang diinginkanpemrogram Compiler memiliki kemampuan untuk mengetahuimaksud dari pemrogram Belum diimplementasikan pada program (sekarang ini)Error RecoveryBertujuan mengembalikan parser ke kondisi stabil agar supaya dapat melanjutkan proses parsingke posisi selanjutnya.Mekanisme Ad Hoc Recovery yang dilakukan tergantung dari si pembuatcompilerTidak terikat pada suatu aturan tertentuSyntax directed Recovery Menyisipkan atau membuang symbol terminal yangdianggap menyebabkan errorSecod Error Recovery Melokalisir kesalahanContext Sensitive Recovery Biasanya berkaitan dengan semanticError RepairMemperbaiki kesalahan dan membuat source program valid dengan memodifikasi.Mekanisme Ad Hoc Tergantung si pembut compilerSyntax Directed Repair Menyisipkan atau membuang symbol terminal yangdianggap menyebabkan errorContext Sensitive Repair Biasanya berkaitan dengan semanticBila kesalahan identifier, maka compilator akanmemperbaiki kesalahan dengan membuat identifier baru.

×