Compiler & Interpreter ICT
Nama Kelompok
Dyah Kamiswari
Sarah Apriliana
Stania Ajeng
IT AeU Politeknik Negeri Jakarta
KOMPILATOR
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. Terlepas dari pengertiannya yang demikian relatif luas, istilah kompilator biasa digunakan untuk program komputer yang menerjemahkan program yang ditulis dalam bahasa pemrograman
tingkat
tinggi (semacam bahasa
Pascal, C++, BASIC, FORTRAN, Visual
Basic, Visual C#, Java, xBase, atau COBOL) menjadi bahasa mesin, biasanya dengan bahasa Assembly sebagai perantara. Arsitektur kompilator modern biasanya bukan lagi merupakan program tunggal namun merupakan rangkaian komunikasi antar program dengan tugas spesifik masingmasing. Program-program tersebut beserta tugasnya secara umum terdiri dari:
Kompilator itu sendiri, yang menerima kode sumber dan menghasilkan bahasa tingkat rendah (assembly)
Assembler, yang menerima keluaran kompilator dan menghasilkan berkas objek dalam bahasa mesin
Linker, yang menerima berkas objek keluaran assembler untuk kemudian digabungkan dengan pustaka-pustaka yang diperlukan dan menghasilkan program yang dapat dieksekusi (executable)
*Kompilator yang menggunakan arsitektur ini misalnya GCC, Clang dan FreeBASIC. Beberapa kompilator tidak menggunakan arsitektur di atas secara gamblang, dikarenakan komunikasi antar program jauh lebih lambat dibandingkan jika komunikasi dilakukan secara internal di dalam satu program. Sehingga kompilator-kompilator tersebut mengintegrasikan assembler dan linker di dalam kompilator. Namun demikian, biasanya arsitektur
yang
digunakan
pun
tidak
kaku
dan
mengizinkan
penggunaan assembler maupun linker eksternal (berguna jika assembler dan linker internal bermasalah atau memiliki galat). Kompilator yang menggunakan arsitektur ini salah satunya adalah Free Pascal. Profesor Niklaus Wirth dalam bukunya Compiler Construction [1] menyatakan bahwa penggunaan assembler sebagai bahasa perantara seringkali tidak memberikan keuntungan
yang signifikan, sehingga beliau menyarankan agar kompilator langsung menghasilkan bahasa mesin. Kompilator dengan arsitektur seperti ini dapat berjalan dengan sangat cepat, seperti yang ditunjukkan pada kompilator orisinil Pascal, Modula-2 dan Oberon yang dibuat oleh sang profesor. Kompilator melakukan proses kompilasi dengan cara menganalisis kode sumber secara keseluruhan, sehingga waktu yang dibutuhkan untuk melakukan kompilasi lebih lama, namun hasilnya lebih cepat dalam proses eksekusi daripada program yang dibuat dengan menggunakan teknik interpretasi dengan interpreter. Tahap Kompilasi:
Pertama source code (program yang ditulis) dibaca kememori computer).
Source code tersebut diubah menjadi objek code (bahasa Assembly).
Objek code di hubungkan dengan liberary yang dibutuhkan untuk membentuk file yang bisa dieksekusi.
Model Kompilator Sebuah kompilator memiliki dua fungsi : 1. Fungsi Analis : dekomposisi program sumber menjadi bagian-bagian dasarnya. Source Code -> Lexical Analyzer : Scanner -> Syntactic Analyzer : Parser -> Semantic Analyzer : Intermediate Code Generator 2. Fungsi Sintesis : pembangkitan dan optimasi kode. Code Generator -> Code Optimizer -> Object Code
Keterangan : Scanner : memecah program sumber menjadi besaran leksik/token. Parser : memeriksa urutan kemunculan token. Analisis Semantik : biasanya digabungkan dengan intermediate code generator (bagian yang berfungsi membangkitkan kode antara). Code Generator : membangkitkan kode objek. Code Optimizer : memperkecil hasil dan mempercepat proses. Tabel Simbol : menyimpan semua informasi yang berhubungan dengan kompilasi.
Model Kompilator seperti di atas disebut Multi Pass Compiler / Separate Compiler yaitu Scanner dan Parser bekerja terpisah. Scanner menghasilkan semua token, baru diproses oleh Parser. Berbeda dengan One Pass Compiler dimana Scanner baru bekerja menghasilkan tiap token setelah mendapatkan perintah dari Parser. Token : besaran pembangun bahasa/representasi dari besaran leksik.
Mutu Kompilator 1. Kecepatan dan waktu proses kompilasi. Tergantung pada : a. Penulisan algoritma kompilator, yaitu algoritma yang digunakan untuk menuliskan program kompilator tersebut. b. Kompilator pengkompilasi, sebuah program
khusus
yang menghasilkan
kompilator tersebut. 2. Mutu program objek : ukuran dan kecepatan eksekusi dari program objek. Tergantung pada : Fungsi translasi yang digunakan (cara untuk melakukan perubahan dari source code ke object code). Integrated Environment, yaitu fasilitas-fasilitas terintegrasi yang dimiliki oleh kompilator tersebut. Misalnya untuk melakukan editing, debugging, maupun testing.
Pembuatan Kompilator dapat dilakukan dengan :
Bahasa mesin, kesulitan sangat tinggi.
Bahasa assembly, biasa digunakan sebagai tahap awal. Keuntungan : object code berukuran kecil. Kerugian : memerlukan usaha yang besar.
Bahasa tingkat tinggi lain pada mesin yang sama. Keuntungan : pemrograman mudah. Kerugian : program hasil.
Bahasa tingkat tinggi yang sama pada mesin yang berbeda.
Bootstrap (diperkenalkan oleh Wirth). Ide : kita bisa membangun sesuatu yang besar dengan dimulai dari bagian intinya.
Alur Kerja Kompilator
INTERPRETER Dalam ilmu komputer, penerjemah atau lebih dikenal dengan interpreter merupakan perangkat lunak yang berfungsi melakukan eksekusi sejumlah instruksi yang ditulis dalam suatu bahasa pemrograman, sebuah penerjemah dapat berarti: 1. Mengeksekusi kode sumber secara langsung, atau 2. Menerjemahkannya ke dalam serangkaian p-code kemudian mengeksekusinya 3. Mengeksekusi kode yang telah dikompilasi sebelumnya oleh kompiler yang merupakan bagian dari sistem penerjemahan.
P-code atau
sering
pula
disebut
sebagai portable-code,
atau precompiled-code,
atau bytecode merupakan istilah yang digunakan untuk merepresentasikan sejumlah instruksi yang ditujukan untuk meningkatkan efisiensi serta unjuk kerja saat dieksekusi oleh perangkat lunak penerjemah (bahasa Inggris: interpreter) atau untuk mempermudah penerjemahan lebih lanjut menjadi kode mesin. Disebabkan instruksi-instruksi tersebut diproses oleh perangkat lunak, dan bukan oleh prosesor secara langsung, kompleksitas p-code bisa jadi lebih tinggi dari kode mesin, namun umumnya tidak lebih kompleks dari instruksi mesin secara umum. Di sisi lain, bytecode yang seringkali banyak digunakan dalam istilah pemrograman bahasa Java merupakan p-code dengan instruksi-instruksi yang diwakili oleh satu kode bita. Berbeda halnya dengan kode sumber yang umumnya digunakan oleh manusia dalam pemrograman komputer, p-code umumnya lebih bersifat kompak, dan direpresentasikan dalam bentuk serangkaian kode biner yang tampak seolah-olah seperti halnya kode mesin
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. Perl, Python, Ruby,
dan MATLAB adalah
beberapa
contoh
perangkat
lunak
penerjemah bertipe 2, sementara Java termasuk dalam kategori tipe 3, namun dalam beberapa kasus Java dapat digolongkan pula ke dalam kategori tipe 2. Contoh program yang menggunakan intpreter adalah Cobol, PHP, ASP, dan lain-lain.
Interpreter tidak menghasilkan object code. Hanya menghasilkan translasi internal. Input dapat berasal dari source code maupun dari inputan program dari user. Source code dan inputan data user diproses pada saat yang bersamaan.
Pada interpreter, program tidak harus dianalisis seluruhnya dulu, tapi bersamaan dengan jalannya program.
Keuntungan mudah bagi user, debuging cepat, penyusunan program relatif lebih cepat dan
bisa langsung diuji sekalipun masih ada beberapa kesalahan secara kaidah dalam program.
Kekurangan eksekusi program lambat, tidak langsung menjadi program
executable,
interpreter juga harus berada dalam memori. Jadi memori selalu digunakan baik untuk program maupun interpreter. Disamping itu, program sumber (source code) yaitu program aslinya tidak dapat dirahasiakan.
Alur Kerja Interpreter
PERBEDAAN COMPILER DAN INTERPRETER
Interpreter menterjemahkan baris per baris. Sedangkan compiler, menterjemahkan seluruh instruksi sekaligus. Selanjutnya hasil terjemahan (setelah melalui tahapan lain) bisa dijalankan secara langsung, tanpa tergantung lagi oleh program sumber atau compilernya.
Pada interpreter, penyusunan program relatif lebih cepat dan bisa langsung diuji sekalipun masih ada beberapa kesalahan secara kaidah dalam program. Sedangkan pada compiler, proses pembuatan dan pengujian membutuhkan waktu relatif lebih lama, sebab ada waktu untuk mengkompilasi (menerjemahkan) dan ada pula waktu untuk melakukan proses linking. Program akan berhasil dikompilasi hanya jika program tak mengandung kesalahan secara kaidah sama sekali.
Pada interpreter, kecepatannya menjadi lambat sebab sebelum suatu instruksi dijalankan selalu harus diterjemahkan terlebih dahulu. Selain itu, saat program dieksekusi, interpreter juga harus selalu berada dalam memori. Jadi memori selalu digunakan baik untuk program maupun interpreter. Sedangkan pada compiler, proses eksekusi dapat berjalan dengan cepat, sebab tak ada lagi proses penerjemahan.
Pada interpreter, kode program tidak dapat dirahasiakan. Sedangkan pada compiler, kode program bisa dirahasiakan, sebab yang dieksekusi adalah program yang dalam bentuk kode mesin.
Jika hendak menjalankan program hasil kompilasi dapat dilakukan tanpa butuh kode sumber. Kalau interpreter butuh kode sumber.
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.
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.
Interpreter cocok untuk membuat / menguji coba modul ( sub-routine / programprogram 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.
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. Meskipun
penerjemahan
dan kompilasi merupakan
dua
jenis
mekanisme
implementasi pada sebuah bahasa pemrograman, keduanya tidak berarti memiliki perbedaan secara signifikan. Hal ini disebabkan cara kerja sebuah penerjemah dalam banyak hal adalah sama seperti halnya yang dilakukan oleh kompiler. Penggunaan istilah "bahasa pemrograman terjemahan" dan "bahasa pemrograman kompilatif" umumnya digunakan sebatas untuk membedakan implementasi dari bahasa tersebut menggunakan model penerjemahan atau kompilatif.
DAFTAR PUSTAKA
http://id.wikipedia.org/wiki/Kompilator http://id.wikipedia.org/wiki/Penerjemah_(komputasi) http://kardian2011.blogspot.com/2011/03/pengertian-kompiler-dan-interpreter.html http://rob13y.wordpress.com/2010/03/26/perbedaan-compiler-dengan-interpreter/ http://ijobaraya.com/proses-kompilasi-dan-linking-program-c/ https://docs.google.com/viewer?a=v&q=cache:0_sMyDiTLi4J:dini3asa.staff.gunadarma.ac.id /Downloads/files/24729/1PENDAHULUANKompilasi.doc+keuntungan+compiler&hl=en&gl=id&pid=bl&srcid=ADG EESiWvXuq2MR7p_s5RWloSxGI59Keh3_21NYwnvcsRaDf1F6o_0hWutXSttO8ZNCIiVyMLJJhg2NFhqWO_B88L HMgkgL604GtiWc1-7g97U36oUMye166oF4hSs8zqWVf3AHcnQ&sig=AHIEtbQN1RCgrZGrk7UPg4NfoFrYs2 k3hw