Arti Kata Teknik Kompilasi
Teknik adalah suatu Metode atau Cara
Kompilasi adalah suatu Proses mengabungkan serta menterjemahkan sesuatu (source program) menjadi bentuk lain.
Bahasa Pemrograman
Bahasa pemrograman berdasarkan tingkat ketergantungannya dengan mesin bisa meliputi jenis bahasa berikut ini.
Bahasa Mesin
Bahasa mesin merupakan bentuk terendah dari bahasa komputer. Setiap instruksi dalam program direpresen-tasikan dengan kode numerik, yang secara fisik berupa deretan angka 0 dan 1. Sekumpulan instruksi dalam bahasa mesin bisa dibentuk menjadi microcode (prosedur dalam bahasa mesin)
Bahasa Assembly
Bahasa Assembly merupakan bentuk simbolik dari bahasa mesin. Setiap kode operasi memiliki kode simbolik, misalnya ADD untuk penjumlahan dan MUL untuk perkalian. Sekumpulan instruksi dalam bahasa assembly dapat dibentuk menjadi makroinstruksi. Pada bahsa assembly tersedia alat bantu untuk diagnostik atau debug yang tidak terdapat pada bahasa mesin. Contoh : Turbo Assembler, Macro Assembler, DEBUG dan Turbo Debugger.
Bahasa Tingkat Tinggi (User Oriented)
Disebut bahasa tingkat tinggi karena lebih dekat dengan bahas manusia. Bahasa ini memberikan fasilitas yang lebih banyak, kontrol program yang terstruktur, block dan prosedur. Contohnya Pascal, Basic dan lain-lain.
Bahasa Problem Oriented
Bahasa ini memungkinkan penyelesaian untuk suatu masalah atau aplikasi yang spesifik. Contohnya : SQL (Stuctured Query Language) untuk aplikasi database, COGO untuk aplikasi teknik sipil. Bahasa Problem Oriented kadang dimasukkan sebagai bahasa tingkat tinggi.
Keuntungan bahasa tingkat tinggi dibandingkan bahasa tingkat rendah :
1. Kemudahan untuk dipelajari, tidak membutuhkan latar belakang pengetahuan mengenai perangkat keras.
2. Lebih mendekati permasalahan yang akan diselesaikan.
3. Pemrogram tidak perlu mengetahui bagaimana representasi data ke dalam bentuk internal di memory. Kemampuan untuk konversi data.
4. Memberikan banyak pilihan struktur kontrol seperti kondisional (If..then..else), looping (repeat..until, for), struktur blok (begin .. End).
5. Program lebih mudah di-debug.
6. Kemampuan struktur data yang lebih baik. 7. Ketersediaan feature seperti prosedur.
8. Kompatibilitas dan dokumentasi yang lebih baik dalam pengembangan program. 9. Tidak bergantung pada mesin.
Translator
Suatu program dimana mengambil input sebuah program yang ditulis pada suatu bahasa program (source language ke bahasa lain (object or target language).
TEKNIK KOMPILASI Tony Darmanto,ST / Smt V – S1 – TI / STMIK WIDYA DHARMA/ Hal 2
Ada beberapa macam translator : 1. Assembler
Source code adalah bahasa Assembly, object code adalah bahasa mesin. Contohnya : Turbo Assembler dan Macro Assembler.
2. Compiler
Source code adalah bahasa tingkat tinggi, object code adalah bahasa mesin atau bahasa assembly. Source code dan data diproses pada saat yang berbeda. Contoh Turbo Pascal.
3. Interpreter
Interpreter tidak membangkitkan object code, hasil translasi hanya dalam bentuk internal. Contoh interpreter : Basic / GW-Basic, LISP, SmallTalk. Source code dan data diproses pada saat yang sama.
Model Kompilator
Pengembangan kompilator untuk sebuah bahasa merupakan pekerjaan yang kompleks. Kompleksitas kompilator bisa dikurangi bila perancang bahasa pemrograman mempertimbangkan bermacam-macam faktor perancangan. Sebuah kompilator umumnya memiliki dua tugas pokok sebagai berikut :
•
Fungsi AnalisisFungsi Analisis biasa disebut sebagai Front End. Tugasnya melakukan dekomposisi program sumber menjadi bagian-bagian dasarnya.
•
Fungsi SintesisFungsi Sintesis biasa disebut sebagai Back End. Tugasnya melakukan pembangkitan dan optimasi program objek.
Program sumber merupakan rangkaian karakter. Berikut ini hal-hal yang dilakukan oleh setiap fase pada proses kompilasi terhadap program sumber tersebut :
Penganalisa Leksikal
Membaca program sumber, karakter demi karakter. Sederetan (satu atau lebih) karakter dikelompokkan menjadi satu kesatuan mengacu kepada pola kesatuan kelompok karakter (token) yang ditentukan dalam bahasa sumber. Kelompok karakter yang membentuk sebuah token dinamakan lexeme untuk token tersebut. Setiap token yang dihasilkan disimpan di dalam tabel simbol. Sederetan karakter yang tidak mengikuti pola token akan dilaporkan sebagai token tak dikenal (unidentified token).
Contoh : Misalnya pola token untuk identifier I adalah : I = huruf(hurufangka)*. Lexeme ab2c dikenali sebagai token sementara lexeme 2abc atau abC tidak dikenal.
Penganalisa Sintaks
Memeriksa kesesuaian pola deretan token dengan aturan sintaks yang ditentukan dalam bahasa sumber. Sederetan token yang tidak mengikuti aturan sintaks akan dilaporkan sebagai kesalahan sintaks (sintax error). Secara logika deretan token yang bersesuaian dengan sintaks tertentu akan dinyatakan sebagai pohon parsing (parse tree).
Contoh : Misalnya sintaks untuk ekspresi if-then E adalah : Eif L then, L IOA, I = huruf(hurufangka)*, O < = > <=>=, A 0 1 ...9. Ekspresi if a2 < 9 then adalah ekspresi sesuai sintaks; sementara ekspresi if a2 < 9 do atau if then a2B < 9 tidak sesuai. Perhatikan bahwa contoh ekspresi terakhir juga mengandung token yang tidak dikenal.
Penganalisa Semantik
Memeriksa token dan ekspresi dari batasan-batasan yang ditetapkan. Batasan-batasan tersebut misalnya :
a. panjang maksimum token identifier adalah 8 karakter, b. panjang maksimum ekspresi tunggal adalah 80 karakter, c. nilai bilangan bulat adalah -32768 s/d 32767,
TEKNIK KOMPILASI Tony Darmanto,ST / Smt V – S1 – TI / STMIK WIDYA DHARMA/ Hal 4 Pembangkit Kode Antara
Membangkitkan kode antara (intermediate code) berdasarkan pohon parsing. Pohon parse selanjutnya diterjemahkan oleh suatu penerjemah yang dinamakan penerjemah berdasarkan sintak (syntax-directed translator). Hasil penerjemahan ini biasanya merupakan perintah tiga alamat (three-address code) yang merupakan representasi program untuk suatu mesin abstrak. Perintah tiga alamat bisa berbentuk quadruples (op, arg1, arg2, result), tripels (op, arg1, arg2). Ekspresi dengan satu argumen dinyatakan dengan menetapkan arg2 dengan - (strip, dash)
Pengoptimal Kode
Melakukan optimasi (penghematan space dan waktu komputasi), jika mungkin, terhadap kode antara.
Pembangkit Kode
Membangkitkan kode dalam bahasa target tertentu (misalnya bahasa mesin).
Berikut ini akan diberikan sebuah contoh skema penerjemahan suatu ekspresi dalam bahasa sumber, yaitu : position := initial + rate * 60.
Lexical analyzer harus memproses blank dan komentar, meskipun keduanya bukan merupakan bagian executable.
Scanner memberikan token ke syntax analyzer. Token-token bisa berbentuk pasangan item. Item pertama memberikan alamat dari token pada tabel simbol. Item kedua adalah representasi internal dari token.
bagaimana dekomposisinya. Dalam analisis sintaksis dilakukan pengelompokan token ke dalam kelas sintaksis, seperti expression, statement dan procedure.
Syntax Analyzer / Parser memberikan suatu pohon sintaks, yang mana daunnya adalah token dan setiap elemen non-daun merepresentasikan suatu kelas sintaksis.
Sekumpulan aturan yang disebut grammar dipergunakan untuk mendefinisikan/ menentukan struktur dari program sumber.
Semantic analyzer adalah untuk menentukan ‘maksud’ dari suatu program sumber. Analisis Semantik merupakan proses yang unik pada suatu kompilator. Semantic analyzer harus menentukan aksi apa yang ditentukan oleh operator aritmatika.
Rutin ini akan memeriksa apakah operan telah dideklarasikan.
Analisis semantik bisa menghasilkan intermediate form dari program sumber. Misalkan ekspresi (A+B)*(C+D), kode antaranya bisa berupa kuadrupel berikut :
(+, A, B, T1) (+, C, D, T2) (*, T1, T2, T3)
Suatu ekspresi infix bisa saja diubah ke bentuk antara dalam notasi Polish, maka ekspresi infix (A+B)*(C+D) akan dikonversi ke notasi Polish-sufix : AB+CD+*
Keluaran dari semantic analyzer diberikan ke code generator. Pada tahap ini bentuk antara dari program sumber, biasanya ditranslasikan ke dalam bahasa assembly atau bahasa mesin. Contoh translasi dari kuadrapel sebelumnya bisa menghasilkan instruksi bahasa assembly format1-alamat berikut : LDA A ADD B STO T1 LDA C ADD D STO T2 LDA T1 MUL T2 STO T3
Keluaran dari code generator diberikan ke code optimizer. Proses ini bertujuan untuk menghasilkan program objek yang lebih efisien seperti mengevaluasi ekspresi konstan, pemakaian properti operator tertentu (asosiatif, komutatis dan distributif) dan deteksi subekspresi. Contoh : LDA A ADD B STO T1 LDA C ADD D MUL T1 STO T2
TEKNIK KOMPILASI Tony Darmanto,ST / Smt V – S1 – TI / STMIK WIDYA DHARMA/ Hal 6 Optimasi global lebih lanjut bisa dilakukan. Optimasi ini termasuk optimasasi machine-independent. Alokasi register secara optimal merupakan salah satu contoh optimasasi yang machine-dependent. Suatu code optimizer yang baik bisa menghasilkan kode yang lebih baik daripada pemrogram assembler yang berpengalaman.
Pada beberapa kompilator, fase-fase kompilasi bisa dikombinasika. Interaksi antara scanner dan parser terdapat dua kemungkinan sebagai berikut :
Beberapa kompilator membuat pass sesedikit mungkin. Faktor yang mempengaruhi jumlah pass yang akan dilakukan tergantung pada :
1. Ketersediaan memori.
2. Ukuran dan kecepatan kompilator 3. Ukuran dan kecepatan program objek 4. Fasilitas debugging yang diperlukan
5. Teknik deteksi dan pemulihan kesalahan yang diinginkan.
6. Jumlah orang dan waktu yang diperlukan untuk menyelesaikan proyek penulisan kompilator.
Mutu Kompilator
Mutu sebuah kompilator tergantung dari beberapa faktor sebagai berikut : 1. Kecepatan dan waktu proses kompilasi.
Mutu ini tergantung dari hal-hal berikut: • Penulisan algoritma kompilator • Kompilator pengkompilasi 2. Mutu Program Objek
Mutu suatu program objek (hasil kompilasi) ditentukan oleh ukuran dan kecepatan eksekusi dari program objek.
3. Integrated Environment
Integrated environment merupakan fasilitas-fasilitas terintegrasi yang dimiliki oleh kompilator tersebut. Biasa disebut juga sebagai IDE (Integrated Development Environment). Misal Turbo Pasca bisa untuk kompilasi dan debug dalam satu lingkungan pemrograman.
Pembuatan Kompilator Bahasa Mesin
•
Sangat sukar dan sangat sedikit kemungkinannya untuk membuat compiler dengan bahasa ini, karena manusia susah mempelajari bahasa mesin,•
Sangat tergantung pada mesin,•
Bahasa mesin kemungkinan digunakan pada saat pembuatan Assembler. Assembly•
Hasil dari program mempunyai ukuran yang relatif kecil•
Sulit dimengerti karena statement/ perintahnya singkat-singkat, butuh usaha yang besar untuk membuat compiler dengan bahasa ini•
Lebih mudah dipelajari•
Fasilitas yang dimiliki lebih baik (banyak)•
Memiliki ukuran yang relatif besar, misal membuat compiler pascal dengan menggunakan bahasa C•
Untuk mesin yang berbeda perlu dikembangkan tahapan-tahapan tambahan. Misal membuat compiler C pada DOS berdasarkan compiler C pada UnixBootStrap
•
Untuk membangun sesuatu yang besar, dibangun/dibuat dulu bagian intinya (Niklaus Wirth-saat membuat Pascal Compiler)•
P0 dibuat dengan Assembly, P1 dibuat dari P0, dan P2 dibuat dari P1, jadi compiler untuk bahasa P dapat dibuat tidak harus dengan menggunakan assembly secara keseluruhan.TEKNIK KOMPILASI Tony Darmanto,ST / Smt V – S1 – TI / STMIK WIDYA DHARMA/ Hal 8