Senin, 12 Maret 2012

Perbedaan Compiler dan Interpreter


1. Untuk menjalankan menjalankan program hasil kompilasi (hasil compiler) dapat dilakukan tanpa membutuhkan source code. Kalau interpreter membutuhkan source code.
2. Jika dengan kompiler, maka pembuatan kode yang bisa dijalankan mesin dilakukan dalam 2 tahap terpisah, yaitu parsing ( pembuatan kode objek ) dan linking ( penggabungan kode objek dengan library ) . Kalau interpreter tidak ada proses terpisah.
3.  Jika compiler membutuhkan linker untuk menggabungkan kode objek dengan berbagai macam library demi menghasilkan suatu kode yang bisa dijalankan oleh mesin. Kalau interpreter tidak butuh linker untuk menggabungkan kode objek dengan berbagai macam library.
4. Interpreter cocok untuk membuat / menguji coba modul ( sub-routine / program-program kecil ). Maka compiler agak repot karena untuk mengubah suatu modul / kode objek kecil, maka harus dilakukan proses linking / penggabungan kembali semua objek dengan library yang diperlukan.
5. Pada kompiler bisa dilakukan optimisasi / peningkatan kualitas kode yang bisa dijalankan. Ada yang dioptimasi supaya lebih cepat, ada yang supaya lebih kecil, ada yang dioptimasi untuk sistem dengan banyak processor. Kalau interpreter susah atau bahkan tidak bisa dioptimasikan.

INTERPRETER


  Perangkat lunak yang mampu mengeksekusi code program (yang ditulis oleh programmer) lalu menterjemahkannya ke dalam bahasa mesin, sehingga mesin melakukan instruksi yang diminta oleh programmer tersebut.
  Perintah-perintah yang dibuat oleh programmer tersebut dieksekusi baris demi baris, sambil mengikuti logika yang terdapat di dalam kode tersebut.
Proses ini sangat berbeda dengan compiler, dimana pada compiler, hasilnya sudah langsung berupa satu kesatuan perintah dalam bentuk bahasa mesin, dimana proses penterjemahan dilaksanakan sebelum program tersebut dieksekusi

Skema Blok Kompilator

Keterangan :
  • Analisa Leksikal (Scanner) :
    Berfungsi memecah teks program sumber menjadi bagian-bagian kecil yang mempunyai satu arti yang disebut token, seperti : konstanta, nama variabel, keyword, operator. 
  • Analisa Sintaks (Parser) :
    Berfungsi mengambil program sumber (sudah dalam bentuk barisan token) dan menentukan kedudukan masing-masing token berdasarkan aturan sintaksnya dan memeriksa kebenaran dan urutan kemunculan token.
  • Analisa Semantik : Berfungsi menentukan validitas semantiks/keberartian program sumber. Biasanya     bagian ini digabung dengan Pembangkit kode antara (intermediate code generator)

  • Pembangkit Kode Antara : Berfungsi membangkitkan kode antara
  • Code Optimation : Berfungsi mengefisienkan kode antara yang dibentuk.
  • Code Generator : Berfungsi membangkitkan kode program target dalam bahasa target yang ekivalen dengan bahasa sumber .
  • Symbol Table Management : Berfungsi mengelola tabel simbol selama proses kompilasi. Tabel simbol adalah struktur data yang memuat record untuk tiap identifier dengan atribut-atribut identifier itu.
  • Penanganan Kesalahan (Error Handler) : Berfungsi menangani kesalahan yang berlangsung selama proses kompilasi.


Tahap Sintesa (Fase Synthesis)

  • CODE OPTIMATION (STORAGE ALLOCATION)
     Storage allocation adalah tahapan yang ada dalam allocation table.
   Kebutuhan storage dihitung dari beragam informasi seperti panjang dan dimensi peyimpanan dalam tabel dan unsur yang dialokasikan dalam machine address. Alamat pengalokasian dimasukkan ke dalam field dalam table yang mengacu pada unsur utama dalam intermediate code yang dapat dikonversi ke dalam storage allocation yang berkesesuaian dengan target code.
      Setelah storage alocation, symbol table tampak seperti berikut :
 Id         Type         Address
# 2 b     Real        2000
# 5 a     Real        2001
# 11 I    integer    2002
 
  • CODE GENERATION
  Code generation ditentukan oleh aspek pragmaticdari compiler. Pengetahuan mengenai insruction set, addressing mode dan sebagainya adalah pengetahuan tentang arsitektur komputer yang dignakan untuk men-generate target program instruction.
 
  Tahapannya adalah:
(i) menkonversi i ke dalam real dengan tanda i*
(ii) menambahkan i dengan b dan memberi tanda t
(iii) menyimpan t dalam a

Keputusan yang dibuat :
(a) urutan instruksi yang digunakan untuk tipe operasi konversi
(b) mode pengalamatan yang digunakan untuk mengakses I, b dan a
(c) mengambil nilai I* dan t di storage allocation atau machine register
  
 Beberapa hal terkait dengan arsitektur mesin. Dalam hal ini dibutuhkan aspek code optimisation yang akan menganalisis program dan mengumpulkan informasi yang berkaitan dengan progaram struktur dan pendefinisian pengggunaan data dalam program.