Kompilator VB.Net melakukan kompilasi kode sumber Visual Basic menjadi Bahasa Antara Microsoft (Intermediate Language) yang disimpan dalam berkas assembly. Berkas assembly ini kemudian dijalankan oleh Common Language Runtime untuk mengubah Bahasa Antara menjadi kode mesin yang dapat dijalankan oleh sistem operasi. Kompilator melakukan analisis leksikal, sintaktik, dan semantik untuk mendeteksi kesalahan serta menangani berbagai jenis kesalahan sepert
1. TUGAS MANDIRI
TEKNIK KOMPILASI
Soal :
Silahkan anda menganalisa Model Kompilator VB.Net dan Model Kompilator di bawah ini
Bagan Pokok Proses Kompilasi
Presentasi Ernastuti & Sulistyo (Universitas Gunadarma)
Termasuk :
1. Penanganan Kesalahan
2. Error recovery
3. Error Repair
2. Definisi Compiler
1. Kompilator (Inggris: compiler) adalah sebuah program komputer yang berguna untuk
menerjemahkan program komputer yang ditulis dalam bahasa pemrograman tertentu menjadi
program yang ditulis dalam bahasa pemrograman lain. 1
2. Compiler adalah suatu program yang melakukan proses translasi dari HLL ke dalam bahasa
mesin di komputer. Disamping program translasi, compiler juga mempunyai beberapa fungsi
penting, seperti diagnostik, contohnya kemampuan pendeteksian error/kesalahan.
Pelannggaran spesifikasi HLL akan terdeteksi dan dilaporkan kepada programmer oleh
compiler agar segera diperbaiki hingga mempermudah pembentukan machine language
equivalent.2
3. “…interpret sequences of particular instructions, but not program texts. Therefore, the
program text must be translated into a suitable instruction sequence before it can be
processed by a computer. This translation can be automated, which implies that it can be
formulated as a program itself…” 3
Dari kedua definisi di atas dapat disimpulkan bahwa Compiler adalah sebuah perangkat lunak komputer
yang digunakan sebagai alat bantu dalam melakukan proses penterjemahan intruksi dan kode secara
otomatis ke dalam bahasa mesin (assembler) tertentu sebagai perantara dan juga memiliki fungsi sebagai
alat deteksi kesalahan dan memperbaiki hingga mempermudah pembentukan machine language
equivalent.
Gambar 1 – Proses Penterjemahan
1
http://id.wikipedia.org/wiki/Kompilator
2
Bahan Ajar, karmila.staff.gunadarma.ac.id/
3
Niklaus Wirth, Compiler Construction, ISBN 0-201-40353-6, Addison-Wesley, 1996
3. Dari penjelasan di atas terlihat bahwa tugas dari Compiler adalah :
Melakukan translasi dari HLL program sebagai input (source program) ke dalam
equivalent machine language program.
Menghasilkan pesan hasil diagnostik kepada programmer bila terjadi penyimpangan
spesifikasi HLL(source language).
Arsitektur kompilator modern biasanya bukan lagi merupakan program tunggal namun merupakan
rangkaian 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 mesin
3. Linker, yang menerima berkas objek keluaran assembler untuk kemudian digabungkan dengan
pustaka-pustaka yang diperlukan dan menghasilkan program yang dapat dieksekusi (executable)
Proses Pokok Model Kompilator
Dalam ilmu komputer, kode sumber (Inggris: source code) atau kode program adalah suatu
rangkaian pernyataan atau deklarasi yang ditulis dalam bahasa pemrograman komputer yang
terbaca manusia. Kode sumber yang menyusun suatu program biasanya disimpan dalam satu
atau lebih berkas teks, dan dapat pula ditampilkan dalam bentuk cuplikan kode (code snippet)
yang dicetak pada buku atau media lainnya. Kode sumber sebelum dikonversikan menjadi
bentuk berkas yang dapat dieksekusi komputer harus melalui proses kompilasi terlebih dahulu.
Konversi ini bisa dilakukan oleh suatu kompilator, atau langsung dari bentuk terbaca manusia
dengan bantuan interpreter.4
Gambar 2 - Bagan Pokok Proses Kompilasi
Presentasi Ernastuti & Sulistyo (Universitas Gunadarma)
4
http://id.wikipedia.org/wiki/Kode_sumber
4. Tahap Analysis
Analisa Leksikal (Scanner) merupakan antarmuka antara kode program sumber dan analisa
sintaktik (Parser). Scanner melakukan pemeriksaan karakter per karakter pada teks masukan,
memecah sumber program menjadi bagian-bagian disebut Token.5
Dua 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 untuk
menentukan struktur sintaks dari input statement. Proses tersebut dikenal dengan nama
“Parsing”. Output dari Parsing adalah representasi dari struktur sintaks suatu statement. Analisa
semantik memanfaatkan pohon sintaks yang dihasilkan pada proses parsing (analisa sintaks).
Fungsi dari analisa semantik adalah untuk menentukan makna dari serangkaian instruksi yang
terdapat dalam program sumber. Untuk mengetahui makna, maka rutin analisa semantik akan
memeriksa :
• 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 seringkali
menggunakan tabel simbol. Pemeriksaan bisa dilakukan pada tabel identifier, tabel display dan
tabel 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 sudah
terdefinisi atau belum. Pengecekan dilakukan pada semua tempat kecuali blok.
2. Memeriksa tipe
Melakukan pemeriksaan terhadap kesesuaian tipe dalam statement – statement yang ada.
Misal : Bila ada operasi antara dua operan, maka tipe operan pertama harus bisa dioperasikan
dengan operan kedua.
5
Iwan Binanto, 2005, Konsep Bahasa Pemrograman : Penerbit Andi dari Rizki Pramudiningtyas,
http://rizkistitek.blogspot.com/2012/03/tahap-analisa-fase-analysis.html
5. Kode Antara (Intermediate Code) merupakan hasil dari tahapan analisis, yang dibuat oleh
kompilator pada saat mentranslasikan program dari bahasa tingkat tinggi. 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 program internal yang gampang dimengerti.
Tahap Sintesa
Tahapan akhir suatu tranlasi terfokus pada pembangunan program yang executable dari output
yang dihasilkan oleh semantic analyzer6
. Tahap ini melibatkan penghasil kode (code generation)
jika dibutuhkan dan melibatkan juga optimisasi pada program yang sudah dihasilkan. Jika
subprogram ditranslasikan secara terpisah atau jika pustaka subprogram digunakan maka tahapan
final linking dan loading dibutuhkan untuk menghasilkan suatu program lengkap yang siap
dieksekusi.
a. Pembentukan/Pembangkitan Kode
Dalam tahap ini bentuk antara dari bahasa sumber yang berupa suatu pohon sintaks
diterjemahkan ke dalam suatu bahasa assembli atau bahasa mesin. Tahap ini membangkitkan
kode antara (intermediate code) berdasarkan pohon parsing. Pohon parsing selanjutnya
diterjemahkan 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. Bahasa
mesin yang dihasilkan adalah bahasa assembli yang merupakan suatu perintah 1 alamat, 1
akumulator. 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 Kode
Hasil pembentukan kode yang diperoleh kemudian dibuat lebih kompak lagi dengan
melakukan 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 melakukan
optimasi (peghematan space dan waktu komputasi) jika mungkin terhadap kode antara.
Semantic analyzer biasanya menghasilkan suatu output program executable yang sudah
ditranslasi yang berbentuk intermediate code, yang kadangkala merupakan kode yang buruk
atau tidak efisien.
6
Bahan Ajar, octa_bl.staff.gunadarma.ac.id/
6. c. Penghasil Kode
Setelah program yang ditranslasi dan representasi internalnya dioptimalisasi maka harus
dibentuk sebagai statemen bahasa assembly, kode mesin, atau program objek yang lainnya
yang menjadi output dari translasi. Kode output ini mungkin dapat langsung dieksekusi, atau
membutuhkan langkah translasi berikutnya, yaitu Linking dan Loading.
d. Linking dan Loading
Tahapan akhir yang bersifat opsional adalah menggabungkan potongan-potongan kode yang
dihasilkan dari translasi terpisah suatu subprogram ke dalam suatu program final executable
yang utuh. Hal ini dapat terjadi karena potongan-potongan kode tersebut mempunyai loader
tables yang dihasilkan oleh translator. Loader tables inilah yang digunakan oleh linking loader
untuk menggabungkan potongan-potongan kode tersebut di memori sehingga menghasilkan
program final executable yang siap untuk dieksekusi.
Pada tahap Analys dan Sintesa seluruh sumber input dan output berada pada Table, dimana
fungsi Table itu sendiri adalah untuk menyimpan semua informasi yang berhubungan dengan
proses kompilasi.
Program Sasaran dapat berupa bahasa pemrograman lain atau bahasa mesin pada suatu
computer.
Kompilator dalam VB.Net
Informasi dalam berkas ditentukan oleh pembuatnya7
. Ada banyak beragam jenis informasi yang
dapat 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 linker
dari system
• Executable file; adalah rangkaian code section yang dapat dibawa loader ke dalam memori
dan dieksekusi
Compiler dan Assemblers membuat file objek yang berisi kode biner dan data yang
dihasilkan untuk file sumber. Linker menggabungkan beberapa file menjadi satu objek, loader
mengambil objek file dan memasukannya ke dalam memori. (Dalam lingkungan pemrograman
terpadu, kompiler, perakit, dan linker dijalankan secara implisit ketika pengguna akan membuat
program.
Dalam pemrograman komputer, Runtime Library adalah Application Programming
Interface yang digunakan oleh compiler untuk memanggil beberapa pola dari sistem runtime.
Sistem runtime mengimplementasikan model pelaksanaan dan pola yang mendasar dari bahasa
pemrograman. Runtime Library dapat mengimplementasikan sebagian dari pola sistem runtime,
tetapi jika panggilan membaca kode baru tersedia yang dibalut dalam informasi pake dan
7
Bahan Ajar, saefudin.staff.jak-stik.ac.id/
7. mengirimkannya ke sistem runtime. Namun, terkadang Runtime Library dimaksudkan untuk
menyertakan kode dari sistem runtime itu sendiri, meskipun banyak kode yang tidak dapat
terhubung secara langsung melalui library.
Gambar 3 - Model Kompilator dalam VB.Net8
Linker adalah suatu program yang menterjemahkan program objek (bereksention OBJ) ke
bentuk program eksekusi (berekstension EXE atau COM). Sedangkan untuk membuat file object
ke bentuk file yang dapat dieksekusi (berekstension .COM atau .EXE) bisa anda gunakan file
TLINK.EXE.
Gambar 4 – Visual Basic Compiled and Run9
8
http://www.webopedia.com/FIG/COMPILE.gif
8. Pada Gambar 4 menunjukkan bagaimana sebuah program Visual Basic dikompilasi dan
dijalankan. Untuk memulai, Anda menggunakan Visual Studio untuk membuat sebuah proyek,
yang terdiri dari file sumber yang berisi pernyataan (statement). Sebuah proyek pemrograman
juga 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 Basic
dalam Visual Studio akan membangun atau mengkompilasi kode sumber Visual Basic ke dalam
Microsoft Intermediate Language.
Intermediate Language disimpan pada disk dalam sebuah file yang disebut assembly.
Selain Intermediate Language, dalam assembly sudah termasuk referensi kelas yang dibutuhkan
oleh aplikasi. Assembly dapat dijalankan pada setiap PC yang telah memiliki Common
Language Runtime. Ketika assembly dijalankan, Common Language Runtime mengubah
Intermediate Language ke kode asli yang dapat dijalankan oleh sistem operasi Windows.
Standar Operasi
1. Programmer menggunakan Visual Studio untuk membuat proyek yang mencakup Visual
Basic file source. Dalam beberapa kasus, proyek juga akan berisi jenis file lainnya, seperti
gambar grafis atau file suara.
2. Compiler Visual Basic menerjemahkan Visual Basic source code proyek ke dalam Microsoft
Intermediate Language. Bahasa ini disimpan pada disk dalam sebuah assembly yang juga
berisi 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 Common
Language Runtime mengelola semua aspek bagaimana perakitan dijalankan, termasuk
mengubah Intermediate Language ke kode asli yang dapat dijalankan oleh sistem operasi,
pengelolaan memori untuk assembly, dan keamanannya.
Error Handling
Error Handling atau yang biasa disebut dengan penanganan kesalahan, terdiri atas beberapa
mekanisme, yaitu :
Jenis Kesalahan Contoh Kesalahan Langkah Penyelesaian
Kesalahan leksikal Kesalahan dalam mengetik Mendeteksi kesalahan
Melaporkan kesalahan
Tindak lanjut perbaikan
Kesalahan Sintaks Kesalahan dalam menuliskan
symbol operasi aritmatika
Kesalahan Semantics Tipe data yang salah
Variable belum didefinisikan
9
http://centurion2.com/VBHomework/VB1/vb1.php
9. Reaksi Compiler Pada kesalahan
Ada beberapa reaksi compiler menangani kesalahan :
Reaksi-reaksi yang tidak dapat
diterima
Compilator crash: Berhenti atau hang
Looping : compilator tidak bisa berhenti
(infinite/onbounded loop)
Menghasilkan Obyek program yang salah : berbahaya,
bisa diketahui/muncul setelah program dieksekusi
Reaksi yang benar, tapi kurang
dapat diterima dan kurang
bermanfaat
Compilator menemukan kesalahan pertama,
melaporkannya, lalu berhenti (halt)
Pemrogram membuang waktu untuk melakukan
pengulangan compilasi untuk setiap kali terdapat
sebuah error
Reaksi yang sudah dapat dilakukan Compilator melaporkan Error dan melakukan Recovery
atau Repair
Reaksi yang belum dapat dilakukan Compiler mengkoreksi kesalahan
Menghasilkan obyek program sesuai yang diinginkan
pemrogram
Compiler memiliki kemampuan untuk mengetahui
maksud dari pemrogram
Belum diimplementasikan pada program (sekarang ini)
Error Recovery
Bertujuan mengembalikan parser ke kondisi stabil agar supaya dapat melanjutkan proses parsing
ke posisi selanjutnya.
Mekanisme Ad Hoc Recovery yang dilakukan tergantung dari si pembuat
compiler
Tidak terikat pada suatu aturan tertentu
Syntax directed Recovery Menyisipkan atau membuang symbol terminal yang
dianggap menyebabkan error
Secod Error Recovery Melokalisir kesalahan
Context Sensitive Recovery Biasanya berkaitan dengan semantic
Error Repair
Memperbaiki kesalahan dan membuat source program valid dengan memodifikasi.
Mekanisme Ad Hoc Tergantung si pembut compiler
Syntax Directed Repair Menyisipkan atau membuang symbol terminal yang
dianggap menyebabkan error
Context Sensitive Repair Biasanya berkaitan dengan semantic
Bila kesalahan identifier, maka compilator akan
memperbaiki kesalahan dengan membuat identifier baru.