Pendahuluan
Teknik Kompilasi merupakan mata kuliah yang khusus ditujukan kepada mahasiswa jurusan Teknik Informatika dan Ilmu Komputer. Adapun sejumlah sasaran dari mempelajari mata kuliah Teknik Kompilasi ini diantaranya adalah :
1. Mahasiswa diharapkan mampu memahami prinsip kerja yang mendasar dari suatu kompiler.
2. Mengetahui tahapan – tahapan dari suatu proses kompilasi.
3. Mahasiswa juga diharapkan mempunyai bekal mendasar untuk mengembangkan ilmu pengetahuan yang dimilikinya ke tingkat yang lebih lanjut.
Bahasa Pemrograman
Manusia dapat melakukan interaksi secara efektif dengan menggunakan media bahasa. Bahasa memungkinkan penyampaian gagasan dan pemikiran, tanpa itu komunikasi akan sulit terjadi. Dalam lingkungan pemrograman komputer, bahasa pemrograman bertindak sebagai sarana komunikasi antara manusia dan permasalahannya dengan komputer yang dipakai untuk membantu memperoleh pemecahan.
Bahasa pemrograman berdasarkan tingkat ketergantungannya dengan mesin bisa meliputi:
1. Bahasa Mesin
Merupakan bentuk terendah dari bahasa komputer. Setiap instruksi dalam program direpresentasikan dengan kode numerik, yang secara fisik berupa deretan angka 0 dan 1.
2. Bahasa Assembly
Merupakan bentuk simbolik dari bahasa mesin. Setiap kode operasi memiliki kode simbolik, misalnya ADD untuk penjumlahan (Addition) dan MUL untuk perkalian (Multiplication). Pada bahasa assembly tersedia alat bantu untuk diagnostik atau debug yang tidak terdapat pada bahasa mesin. Contoh produk yang ada untuk pengembangan dan debug bahasa assembly di pasaran saat ini, misalnya Turbo Assembler dari Borland, Macro Assembler dari Microsoft, Debug yang tersedia pada DOS, dan lain – lain.
3. Bahasa tingkat tinggi (User Oriented)
Disebut tingkat tinggi karena lebih dekat dengan manusia. Memberikan fasilitas yang lebih banyak, kontrol program yang terstruktur, kalang (nested), block, dan prosedur. Contohnya : Pascal, C, Basic, dan lain – lain.
4. Bahasa yang Problem Oriented
Memungkinkan penyelesaian untuk suatu masalah atau aplikasi yang spesifik. Contohnya : SQL (Structured Query Language) untuk aplikasi database, COGO untuk aplikasi teknik sipil. Bahasa yang problem oriented kadang dimasukkan pula sebagai bahasa tingkat tinggi.
Keuntungan bahasa tingkat tinggi dibandingkan bahasa tingkat rendah adalah sebagai berikut.
1. Kemudahan untuk dipelajari.
2. Lebih mendekati permasalahan yang akan diselesaikan.
3. Pemrogram tidak perlu mengetahui bagaimana representasi data ke dalam bentuk internal di memory.
4. Memberikan banyak pilihan struktur kontrol seperti :
§ Kondisional (IF – THEN – ELSE)
§ Looping
§ Struktur Blok (Begin ... End)
§ Nested Statement
5. kompabilitas dan dokumentasi yang lebih baik dalam pengembangan program.
Translator
Sebuah translator melakukan pengubahan source code / source program (program sumber) ke dalam target code / object code / object program (program objek). Source code ditulis dalam bahasa sumber, sedang object code bisa berupa suatu bahasa pemrograman lain atau bahasa mesin pada suatu komputer. Ada beberapa macam translator.
1. Assembler
Menerjemahkan langsung dari source code ke object code. Source Code adalah bahasa assembly sedangkan object code adalah bahasa mesin. Contohnya adalah TASM.

Contoh yang menghasil .Com adalah : Debug, TASM (bila linker dilakukan dengan perintah Tlink/x/t), emu8086,
Contoh yang menghasilkan .Exe adalah : TASM dengan perintah linker Tlink, HLA, MASM32, FASM
Khusus TASM terkadang file .Com yang dihasilkan akan lebih baik daripada file .Exe yang dihasilkan sebagai contoh adalah pada program berikut :
.Model Small
.Code
Org 100h
Jmp Mulai
Pesan db 'Selamat Datang!','$'
Mulai :
Mov Ah,09H
Mov dx,offset pesan
int 21h
mov ah,4ch
int 21h
end Main
2. Kompilator (Compiler)
Source Code adalah bahasa tingkat tinggi (misal bahasa Pascal), object code adalah bahasa mesin atau bahasa assembly. Source Code dan data diproses pada saat yang berbeda. Contohnya : Turbo Pascal, C++.

3. Interpreter
Interpreter tidak membangkitkan Object Code, hasil translasi hanya dalam bentuk Run Time Code.
Contohnya : Bahasa Basica, Dbase/Foxbase
![]() |
Perbedaan antara Interpreter dengan Compile
Interpreter
1. Menerjemahkan instruksi per instruksi
2. Tidak menghasilkan objek program
3. Tidak menghasilkan executable program
4. Source program terus dipergunakan karena tidak dihasilkan executable program.
Compiler
1. Menerjemahkan secara keseluruhan sekaligus
2. Dihasilkan objek program
3. Dihasilkan executable program
4. Source program tidak dipergunakan lagi untuk menjalankan program.
Model Kompilator
Pengembangan kompilator untuk sebuah bahasa merupakan pekerjaan yang kompleks. Kompleksitas kompilator bisa dikurangi bila perancang bahasa pemrograman mempertimbangkan bermacam – macam faktor perancangan. Karena kita berhubungan dengan bahasa tingkat tinggi, bagaimanapun suatu model dasar dari kompilator dapat diformulasikan.
Sebuah kompilator umumnya memiliki 2 tugas pokok :
1. Fungsi Analisis
Fungsi analisis biasa disebut sebagai Front End. Tugasnya melakukan dekomposisi program sumber menjadi bagian – bagian dasarnya.
2. Fungsi Sintesis
Fungsi sintesis biasa disebut sebagai Back End. Tugasnya melakukan pembangkitan dan optimasi program objek.
Model sebuah kompilator bisa dilihat pada gambar di bawah ini.
![]() | ![]() | ||||
![]() | |||||
Keterangan gambar :
§ Scanner : memecah program sumber menjadi besaran leksikalnya.
Beberapa kegiatan pada tahap scanner ini diantaranya adalah :
- Menangani kesalahan
Contohnya : A = +B 1
- Membuang Blank
Contohnya : A = B + 1
- Mengenali besaran leksikal
Contohnya di sini adalah mengenali apakah huruf atau angka
- Dan lain – lain
§ Parser : Memeriksa kebenaran dan urutan kemunculan token
Seperti :
- Samping kiri ”=” pasti variabel
- Samping kanan ”=” pasti ekspresi
- Tiap operator +, -, *, /, tidak boleh double. Contohnya : A = 3++7
§ Analisis semantik : Melakukan analisa semantik, biasanya dalam realisasi akan digabungkan dengan intermediate code generator (bagian yang berfungsi membangkitkan kode antara.
Seperti :
- Triples Notation
- Quadruples Notation
§ Code Generator : Membangkitkan kode objek. Bagian ini merupakan bagian yang bersifat abstrak, artinya tidak dilaksanakan oleh programmer. Tetapi dilakukan oleh bahasa pemrograman yang dilakukan oleh programmer dalam perancangan compiler. Di sini kode antara dari program biasanya ditranslasi ke bahasa assembly atau bahasa mesin.
§ Code Optimizer : Upaya untuk memperkecil hasil dan mempercepat proses
§ Tabel Informasi : Menyimpan semua informasi yang berhubungan dengan proses kompilasi.
Pada beberapa kompilator, bagaimanapun, fase – fase kompilasi tersebut bisa dikombinasikan. Bisa kita lihat, misalnya interaksi antara scanner dan parser terdapat dua kemungkinan :
1. Scanner menghasilkan suatu token untuk diproses oleh parser. Parser akan memanggil scanner bila token berikutnya diperlukan.
2. Scanner menghasilkan semua token yang berhubungan dengan source program sebelum memneruskan ke parser. Pada kasus ini scanner telah memeriksa keseluruhan source program.





terima kasih atas infonya...
BalasHapusijin belajar ya kk... ^^