Selasa, 08 September 2015

Teknik Kompilasi

Ø  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 ,Main : , 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 
File.ASM
Assembler File .Exe  atau .Com
Source File
Compiler Object Code
File Executable 
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.    
Source Code
Interpreter Run Time Code
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
Source Code
Lexical Analyzer (Scanner)
Syntetic Analyzer (Parser)
Code Optimizer
Sematic Analyzer Intermediate Code Generator
Object Code
Intermediate Code
Code Generator
Tabel Informasi
Analysis Synthesis
·         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. 
Mutu Kompilator
Misalkan saja kita pernah menggunakan kompilator untuk bahasa Basic seperti Turbo
Basic dan Quick Basic. Kemudian kita bisa mengatakan bahwa salah satu lebih baik
dari lainnya. Tentu ada beberapa hal yang menjadi pertimbangan kita, dalam hal ini
bisa kita sebut sebagai mutu dari kompilator yang bersangkutan. Mutu sebuah
kompilator bergantung dari beberapa faktor, yaitu : 1. Kecepatan dan waktu proses kompilasi.
Bisa Anda bayangkan misalkan saat Anda menekan F9 (Compile) dalam
kompilator Turbo Pascal untuk melakukan kompilasi suatu program. Berapa lama
kita harus menunggu untuk memperoleh hasil kompilasi itu merupakan waktu
proses kompilasi. 
Mutu ini tergantung dari :
·         Penulisan algoritma kompilator : yaitu algoritma yang digunakan untuk
menuliskan program kompilator tersebut. Misalkan saja bisa dikatakan bahwa
suatu kompilator lebih cepat melakukan kompilasi dibandingkan lainnya,
karena para pemrogramnya menggunakan algoritma yang lebih baik saat
membuat kompilator tersebut.
·         Kompilator pengkompilasi : sebuah program khusus yang menghasilkan
kompilator tersebut. Bisa kita bayangkan kompilator Turbo Basic, misalnya,
tentu saja tidak dibuat dengan bahasa Basic, tetapi menggunakan bahasa lain
dan dikompilasi.dengan kompilator lain. Kalau sebuah kompilator dibuat
dengan bahasa C, misalnya , kompilator C tersebut juga ikut menentukan mutu
kompilator yang dibuat.   

v  Bootstrap
Gagasan dari Bootstrap adalah kita bisa membangun sesuatu yang besar dengan
lebih dulu membuat bagian intinya. Cara ini diperkenalkan oleh Niklaus Wirth
saat membuat kompilator untuk bahasa Pascal.      
Pada gambar di atas, P0 dibangun dengan assembly, P1 dibangun dengan P0, P2
dibangun dengan P1. Jadi kompilator untuk bahasa P bisa dibuat tanpa harus
secara keseluruhan menggunakan assembly.      


Tidak ada komentar:

Posting Komentar