Anda di halaman 1dari 24

Compiler And Interpreter

Kelas IT 1 Aeu

Nama :

Yogi Dika Saputra (4812010024)

Muhammad Faisal Ghefari (4812010015)

Jl. Prof. G.A. Siwabessi, Kampus UI, Depok , Telepon 0217270036, Faksimili )21 7270035,
www.pnj.ac.id
KATA PENGANTAR

Puji syukur penulis panjatkan kehadirat Allah SWT, yang atas


rahmat-Nya maka penulis dapat menyelesaikan penyusunan makalah
yang berjudul “Compiler And Interpreter”. Penulisan makalah
merupakan salah satu tugas dan persyaratan untuk menyelesaikan
tugas mata kuliah Fundamental of ICT Politeknik Negeri Jakarta.

Dalam penulisan makalah ini penulis menyampaikan ucapan


terima kasih yang tak terhingga kepada pihak-pihak yang membantu
dalam menyelesaikan makalahini, Secara khusus penulis menyampaikan
terima kasih kepada keluarga tercinta yang telah memberikan
dorongan dan bantuan serta pengertian yang besar kepada penulis.

Semua pihak yang tidak dapat disebutkan satu persatu, yang


telah memberikan bantuan dalam penulisan makalah ini.

Akhirnya penulis berharap semoga Allah memberikan imbalan


yang setimpal pada mereka yang telah memberikan bantuan, dan
dapat menjadikan semua bantuan ini sebagai ibadah, Amiin Yaa
Robbal ‘Alamiin.

Jakarta 24 September 2012

Compiler dan Interpreter Page 2


Daftar Isi
1. Compiler 4
2. Sejarah 5
3. Compiler Keluaran 6
4. Bahasa Disusun vs Ditafsirkan 7
5. Kompilasi Hardware 8

6. Compiler Satu-pass vs multi-pass 9

7. Front end 11

8. Back End 13
9. Interpeter 15
10. Sejarah 16

11. Keuntungan dan kerugian dari menggunakan interpreter 16

12. Siklus Pengembangan 16

13. Distribusi 17

14. Efisiensi 18

15. Regress 20
16. Variasi 20

17. Interpreter Abstrak Sintaks Pohon 21

18. Just-in-time kompilasi 21

Compiler dan Interpreter Page 3


Compiler

Compiler adalah sebuah program


komputer (atau set program) yang
mengubah kode sumber yang ditulis dalam
bahasa pemrograman (bahasa sumber) ke
dalam bahasa komputer (bahasa target,
seringkali memiliki bentuk biner yang dikenal sebagai kode obyek ).
Alasan paling umum untuk ingin mengubah kode sumber adalah untuk
menciptakan sebuah eksekusi program.

Nama "compiler" terutama digunakan


untuk program yang menerjemahkan kode
sumber dari bahasa pemrograman tingkat tinggi
ke bahasa tingkat rendah (misalnya, bahasa
assembly atau kode mesin ). Jika program
dikompilasi dapat dijalankan pada komputer
yang CPU atau sistem operasi yang berbeda
dari satu di mana compiler berjalan, compiler dikenal sebagai cross
compiler- . Sebuah program yang menerjemahkan dari bahasa tingkat
rendah ke tingkat yang lebih tinggi satu adalah decompiler . Sebuah
program yang menerjemahkan antara bahasa tingkat tinggi biasanya
disebut penerjemah bahasa , penerjemah sumber ke sumber, atau
bahasa converter. Sebuah bahasa rewriter biasanya sebuah program
yang menerjemahkan bentuk ekspresi tanpa perubahan bahasa.

Compiler adalah kemungkinan untuk melakukan banyak atau


semua operasi berikut: analisis leksikal , preprocessing , parsing , analisis
semantik ( Sintaks-diarahkan terjemahan ), generasi kode , dan kode
optimasi .

Compiler dan Interpreter Page 4


Program kesalahan yang disebabkan oleh perilaku compiler yang
salah bisa sangat sulit untuk melacak dan bekerja di sekitar, karena itu,
pelaksana compiler melakukan upaya yang signifikan untuk memastikan
kebenaran dari perangkat lunak mereka .

Istilah compiler-compiler kadang-kadang digunakan untuk


merujuk kepada parser generator , alat sering digunakan untuk
membantu membuat lexer dan parser .

Sejarah

Software untuk komputer awal terutama ditulis dalam bahasa


assembly. Bahasa tingkat tinggi pemrograman tidak ditemukan sampai
imbalan untuk dapat menggunakan kembali perangkat lunak pada
berbagai jenis CPU mulai menjadi signifikan lebih besar daripada biaya
menulis kompilator. Terbatasnya memori kapasitas komputer awal
menyebabkan tantangan teknis substansial ketika mendesain compiler
pertama.

Menjelang akhir mesin-independen bahasa


pemrograman 1950 pertama kali diusulkan.
Selanjutnya kompiler beberapa percobaan
dikembangkan. Compiler pertama ditulis oleh
Grace Hopper , pada tahun 1952, untuk bahasa
pemrograman A-0 . The FORTRAN tim yang
dipimpin oleh John Backus di IBM umumnya
dikreditkan sebagai telah memperkenalkan
compiler lengkap pertama pada tahun 1957. COBOL adalah bahasa
awal untuk dikompilasi pada beberapa arsitektur, pada tahun 1960.

Compiler dan Interpreter Page 5


Dalam domain aplikasi banyak ide untuk menggunakan bahasa
tingkat tinggi dengan cepat tertangkap. Karena fungsi memperluas
didukung oleh lebih baru bahasa pemrograman dan meningkatnya
kompleksitas arsitektur komputer, compiler telah menjadi lebih kompleks.

Kompiler Awal ditulis dalam bahasa assembly. Yang pertama


hosting pribadi compiler - mampu kompilasi sumber sendiri kode dalam
bahasa tingkat tinggi - diciptakan pada tahun 1962 untuk Lisp oleh Tim
Hart dan Mike Levin di MIT .Sejak tahun 1970-an telah menjadi praktek
umum untuk menerapkan compiler dalam bahasa itu mengkompilasi,
meskipun keduanya Pascal dan C telah pilihan populer untuk
implementasi bahasa. Membangun compiler diri hosting adalah
bootstrap masalah-compiler seperti pertama untuk bahasa harus disusun
baik dengan tangan atau dengan compiler yang ditulis dalam bahasa
yang berbeda, atau (seperti dalam Hart dan Levin Lisp compiler) disusun
dengan menjalankan compiler di sebuah interpreter .

Compiler keluaran

Salah satu klasifikasi kompiler adalah dengan platform yang di


mana kode yang dihasilkan mereka mengeksekusi. Hal ini dikenal
sebagai platform target.

Sebuah kompiler asli atau host adalah salah satu yang keluaran
dimaksudkan untuk langsung menjalankan pada jenis yang sama dari
sistem komputer dan operasi yang compiler itu sendiri berjalan pada.
Output dari compiler silang dirancang untuk dijalankan pada platform
yang berbeda.

Compiler dan Interpreter Page 6


Kompiler lintas sering digunakan ketika mengembangkan
perangkat lunak untuk embedded system yang tidak dimaksudkan
untuk mendukung lingkungan pengembangan perangkat lunak.

Output dari compiler yang menghasilkan kode untuk mesin virtual


(VM) mungkin atau tidak mungkin dijalankan pada platform yang sama
sebagai compiler yang menghasilkannya. Untuk alasan ini compiler
tersebut biasanya tidak diklasifikasikan sebagai kompiler asli atau lintas.

Bahasa tingkat rendah yang


merupakan target dari kompilator
mungkin sendiri menjadi bahasa
pemrograman tingkat tinggi . C , sering
dipandang sebagai semacam portabel
assembler , juga dapat menjadi bahasa
target kompilator. Misalnya: Cfront , compiler asli untuk C + + C
digunakan sebagai bahasa target. C diciptakan oleh seperti kompilator
biasanya tidak dimaksudkan untuk dibaca dan dipelihara oleh manusia.
Jadi indent gaya dan cantik C kode menengah tidak relevan. Beberapa
fitur C mengubahnya menjadi bahasa target yang baik. Misalnya: C
kode dengan #line arahan dapat dihasilkan untuk mendukung
debugging dari sumber aslinya.

Bahasa Disusun vs ditafsirkan

Bahasa tingkat tinggi pemrograman biasanya muncul dengan


jenis terjemahan dalam pikiran: baik dirancang sebagai bahasa
dikompilasi atau bahasa ditafsirkan . Namun, dalam prakteknya jarang
ada apa-apa tentang bahasa yang membutuhkan untuk secara
eksklusif dikompilasi atau ditafsirkan secara eksklusif, meskipun ada
kemungkinan untuk merancang bahasa yang bergantung pada re-

Compiler dan Interpreter Page 7


interpretasi pada waktu berjalan. Kategorisasi ini biasanya
mencerminkan implementasi yang paling populer atau luas bahasa -
misalnya, BASIC kadang-kadang disebut bahasa ditafsirkan, dan C yang
dikompilasi, meskipun keberadaan kompiler BASIC interpreter dan C.

Interpretasi tidak menggantikan kompilasi sepenuhnya. Ini hanya


menyembunyikan itu dari pengguna dan membuatnya bertahap.
Meskipun penerjemah sendiri bisa diartikan, sebuah program langsung
dieksekusi diperlukan suatu tempat di bagian bawah tumpukan (lihat
bahasa mesin ). Tren modern menuju just-in-time kompilasi dan
interpretasi bytecode pada waktu mengaburkan kategorisasi tradisional
kompiler dan interpreter.

Beberapa spesifikasi bahasa mengeja bahwa implementasi harus


mencakup pusat kompilasi, misalnya, Common Lisp . Namun, tidak ada
yang melekat dalam definisi Common Lisp yang berhenti dari ditafsirkan.
Bahasa lain memiliki fitur yang sangat mudah untuk
mengimplementasikan dalam seorang penerjemah, namun membuat
tulisan kompilator jauh lebih sulit, misalnya, APL , SNOBOL4 , dan bahasa
scripting banyak memungkinkan program untuk membangun source
code sewenang-wenang pada saat runtime dengan operasi string biasa,
dan kemudian jalankan bahwa kode dengan melewatkan ke fungsi
evaluasi khusus. Untuk menerapkan fitur ini dalam bahasa dikompilasi,
program biasanya harus dikirim dengan perpustakaan runtime yang
mencakup versi dari kompiler sendiri.

Kompilasi Hardware

Output dari beberapa kompiler dapat menargetkan perangkat


keras komputer pada tingkat yang sangat rendah, misalnya Gerbang
Lapangan Array Programmable (FPGA) atau terstruktur aplikasi-spesifik

Compiler dan Interpreter Page 8


sirkuit terpadu (ASIC). Kompiler tersebut dikatakan hardware kompiler
atau alat sintesis karena kode sumber mereka kompilasi efektif
mengontrol konfigurasi akhir dari perangkat keras dan bagaimana ia
beroperasi, output dari kompilasi tidak instruksi yang dijalankan secara
berurutan - hanya interkoneksi transistor atau lookup tabel. Misalnya, XST
adalah Sintesis Xilinx Alat yang digunakan untuk mengkonfigurasi FPGA.
Alat serupa yang tersedia dari Altera, Synplicity, Synopsys dan vendor
lainnya.

Compiler Satu-pass vs multi-pass

Klasifikasi kompiler dengan jumlah lintasan memiliki latar belakang


dalam keterbatasan sumber daya perangkat keras komputer. Kompilasi
melibatkan banyak melakukan pekerjaan dan komputer awal tidak
memiliki memori yang cukup untuk mengandung satu program yang
melakukan semua pekerjaan ini. Jadi compiler dibagi menjadi program
kecil yang masing-masing dibuat lulus atas sumber (atau beberapa
representasi dari itu) melakukan beberapa analisis yang diperlukan dan
terjemahan.

Kemampuan untuk mengkompilasi dalam single pass yang klasik


dilihat sebagai keuntungan karena menyederhanakan tugas menulis
compiler dan satu-pass compiler umumnya melakukan kompilasi lebih
cepat daripada multi-pass compiler . Dengan demikian, sebagian
didorong oleh keterbatasan sumber daya dari sistem awal, bahasa awal
banyak yang dirancang khusus sehingga mereka dapat dikompilasi
dalam satu lulus (misalnya, Pascal ).

Dalam beberapa kasus desain fitur bahasa mungkin memerlukan


compiler untuk melakukan lebih dari satu pass atas sumber. Misalnya,
mempertimbangkan deklarasi muncul pada baris 20 dari sumber yang

Compiler dan Interpreter Page 9


mempengaruhi terjemahan dari pernyataan muncul pada baris 10.
Dalam kasus ini, lulus pertama perlu untuk mengumpulkan informasi
tentang deklarasi muncul setelah pernyataan bahwa mereka
mempengaruhi, dengan terjadinya terjemahan yang sebenarnya
selama lulus berikutnya.

Kerugian kompilasi dalam satu lulus adalah bahwa hal itu tidak
mungkin untuk melakukan banyak canggih optimasi yang diperlukan
untuk menghasilkan kode berkualitas tinggi. Ini bisa sulit untuk
menghitung persis berapa banyak melewati sebuah compiler
mengoptimalkan membuat. Misalnya, fase yang berbeda dari optimasi
dapat menganalisis satu ekspresi berkali-kali tetapi hanya menganalisis
ekspresi lain sekali.

Memisahkan kompilator
menjadi program kecil adalah
teknik yang digunakan oleh
para peneliti yang tertarik
dalam memproduksi kompiler
provably benar. Membuktikan
kebenaran seperangkat program kecil sering membutuhkan sedikit
usaha daripada membuktikan kebenaran dari sebuah program, lebih
besar tunggal, setara.

Sementara compiler multi-pass khas output kode mesin dari lulus akhir,
ada beberapa jenis lain:

 Sebuah " sumber-to-source compiler "adalah jenis compiler yang


mengambil bahasa tingkat tinggi sebagai masukan dan output bahasa
tingkat tinggi. Sebagai contoh, sebuah parallelizing otomatis compiler
akan sering mengambil dalam program bahasa tingkat tinggi sebagai

Compiler dan Interpreter Page 10


masukan dan kemudian mengubah kode dan menjelaskannya dengan
penjelasan kode paralel (misalnya OpenMP ) atau konstruksi bahasa
(misalnya Fortran ini DOALL pernyataan).
 Tahap compiler yang mengkompilasi dengan bahasa assembly dari
mesin teoritis, seperti beberapa Prolog implementasi
o Mesin Prolog juga dikenal sebagai Mesin Abstrak Warren (atau
WAM).
o Bytecode compiler untuk Java , Python , dan banyak lagi yang
juga merupakan subtipe ini.
 Just-in-time compiler , yang digunakan oleh Smalltalk dan sistem Jawa,
dan juga oleh Microsoft NET. Common Language Menengah (CIL)
o Aplikasi yang disampaikan dalam bytecode, yang dikompilasi ke
kode mesin asli sesaat sebelum eksekusi.

Front end

Ujung depan menganalisis kode sumber untuk membangun sebuah


representasi internal dari program, yang disebut representasi antara
atau IR. Hal ini juga mengelola tabel simbol , struktur data pemetaan
setiap simbol dalam kode sumber untuk informasi yang terkait seperti
lokasi, jenis dan ruang lingkup. Hal ini dilakukan melalui beberapa tahap,
yang mencakup beberapa hal sebagai berikut:

1. Jalur rekonstruksi. Bahasa yang kulit pengasah kata kunci atau


memungkinkan spasi sewenang-wenang dalam pengidentifikasi
memerlukan fase sebelum parsing, yang mengubah urutan karakter
masukan ke bentuk kanonik siap untuk parser. The top-down , recursive-
keturunan , meja-driven parser digunakan dalam tahun 1960-an
biasanya membaca sumber satu karakter pada satu waktu dan tidak
memerlukan fase tokenizing terpisah. Atlas Autocode , dan Imp (dan
beberapa implementasi dari ALGOL dan Coral 66 ) adalah contoh dari
bahasa stropped yang kompiler akan memiliki fase Rekonstruksi Line.

Compiler dan Interpreter Page 11


2. Analisis leksikal istirahat teks kode sumber menjadi potongan-potongan
kecil yang disebut token. Setiap bukti merupakan unit atom tunggal
bahasa, misalnya sebuah kata kunci , identifier atau nama simbol .
Sintaks token biasanya bahasa biasa , sehingga negara yang terbatas
robot dibangun dari ekspresi reguler dapat digunakan untuk
mengenalinya. Fase ini disebut juga lexing atau memindai, dan
perangkat lunak melakukan analisis leksikal disebut penganalisis leksikal
atau pemindai.
3. Preprocessing . Beberapa bahasa, misalnya, C , memerlukan fase
preprocessing yang mendukung makro substitusi dan kompilasi bersyarat.
Biasanya tahap preprocessing terjadi sebelum analisis sintaksis atau
semantik, misalnya dalam kasus C, preprocessor memanipulasi token
leksikal ketimbang bentuk sintaksis. Namun, beberapa bahasa seperti
Skema mendukung substitusi makro didasarkan pada bentuk-bentuk
sintaksis.
4. Analisis sintaks melibatkan parsing urutan token untuk mengidentifikasi
struktur sintaksis dari program. Fase ini biasanya membangun pohon
parse , yang menggantikan urutan linear token dengan struktur pohon
dibangun sesuai dengan aturan dari tata bahasa formal yang
mendefinisikan sintaks bahasa itu. Pohon parse sering dianalisis,
ditambah, dan diubah oleh tahap selanjutnya di compiler.
5. Analisis semantik adalah fase di mana compiler menambahkan
informasi semantik dengan pohon parse dan membangun tabel simbol.
Fase ini melakukan pemeriksaan semantik seperti pemeriksaan tipe
(memeriksa kesalahan jenis), atau mengikat objek (menghubungkan
variabel dan referensi fungsi dengan definisi mereka), atau tugas
tertentu (mengharuskan semua variabel lokal harus diinisialisasi sebelum
digunakan), menolak program yang salah atau mengeluarkan
peringatan. Analisis semantik biasanya membutuhkan pohon parse
lengkap, yang berarti bahwa fase ini secara logis mengikuti parsing fase,
dan logis mendahului generasi kode fase, meskipun sering mungkin

Compiler dan Interpreter Page 12


untuk melipat beberapa tahap menjadi satu lulus atas kode dalam
implementasi compiler.

Back End

Back end Istilah kadang-kadang bingung dengan kode generator


karena fungsi tumpang tindih menghasilkan kode assembly. Beberapa
literatur menggunakan end menengah untuk membedakan analisis
generik dan fase optimasi di bagian belakang dari mesin tergantung
generator kode.

Tahapan utama dari bagian belakang meliputi:

1. Analisis : Ini adalah pengumpulan informasi program dari representasi


antara yang berasal dari input. Analisis khas adalah aliran data analisis
untuk membangun menggunakan-mendefinisikan rantai , analisis
ketergantungan , analisis alias , analisis pointer , analisis melarikan diri dll
Analisis yang akurat adalah dasar untuk setiap optimasi compiler. The
grafik panggilan dan grafik kontrol aliran biasanya juga dibangun
selama fase analisis.
2. Optimasi : representasi bahasa menengah berubah menjadi bentuk
setara tapi lebih cepat (atau lebih kecil) fungsional. Optimasi populer
adalah ekspansi inline , penghapusan kode mati , propagasi konstanta ,
transformasi lingkaran , mendaftar alokasi dan bahkan paralelisasi
otomatis .
3. Generasi kode : bahasa perantara berubah diterjemahkan ke dalam
bahasa output, biasanya asli bahasa mesin dari sistem. Ini melibatkan
keputusan sumber daya dan penyimpanan, seperti memutuskan mana
variabel untuk masuk ke dalam register dan memori dan seleksi dan
penjadwalan instruksi mesin yang sesuai bersama dengan mode
pengalamatan terkait mereka (lihat juga Sethi-Ullman algoritma ). Data
Debug juga mungkin perlu dihasilkan untuk memfasilitasi debugging .

Compiler dan Interpreter Page 13


Analisis Compiler adalah prasyarat untuk setiap optimasi compiler,
dan mereka bekerja sama erat. Sebagai contoh, analisis
ketergantungan sangat penting untuk transformasi lingkaran .

Selain itu, ruang lingkup analisis kompilator dan optimasi sangat


bervariasi, dari sekecil blok dasar ke tingkat prosedur / fungsi, atau
bahkan lebih dari seluruh program ( optimasi interprosedural ). Jelas,
kompilator berpotensi dapat melakukan pekerjaan yang lebih baik
menggunakan pandangan yang lebih luas. Tapi itu pandangan yang
luas tidak bebas: lingkup analisis besar dan optimasi yang sangat mahal
dalam hal waktu kompilasi dan ruang memori, hal ini terutama berlaku
untuk analisis interprosedural dan optimasi.

Analisis program dan optimasi yang umum di kompiler komersial


modern dari HP , IBM , SGI , Intel , Microsoft , dan Sun Microsystems .
Open source GCC dikritik untuk waktu yang lama untuk kurang optimasi
interprosedural kuat, namun berubah dalam hal ini. Lain compiler open
source dengan analisis lengkap dan infrastruktur optimasi Open64 , yang
digunakan oleh banyak organisasi untuk tujuan penelitian dan komersial.

Karena waktu ekstra dan ruang yang dibutuhkan untuk analisis


dan optimasi compiler, beberapa kompiler melewatkan mereka secara
default. Pengguna harus menggunakan opsi kompilasi secara eksplisit
memberitahu compiler yang optimasi harus diaktifkan.

Compiler dan Interpreter Page 14


Interpeter

Dalam ilmu komputer ,


seorang penerjemah adalah
program komputer yang
mengeksekusi , yaitu
melakukan, instruksi tertulis
dalam bahasa pemrograman .
Penerjemah umumnya menggunakan salah satu strategi berikut untuk
eksekusi program:

1. mengeksekusi kode sumber secara langsung


2. menerjemahkan kode sumber ke dalam beberapa efisien
representasi menengah dan segera mengeksekusi ini
3. eksplisit mengeksekusi kode dikompilasi disimpan yang dibuat oleh
compiler yang merupakan bagian dari sistem penerjemah

Versi awal dari pemrograman Lisp bahasa dan Dartmouth BASIC


akan menjadi contoh dari tipe pertama. Perl , Python , MATLAB , dan
Ruby adalah contoh yang kedua, sedangkan UCSD Pascal adalah
contoh dari jenis ketiga. Source program dikompilasi sebelumnya dan
disimpan sebagai kode mesin yang independen, yang kemudian
dihubungkan pada saat run-time dan dieksekusi oleh interpreter dan /
atau compiler (untuk JIT sistem). Beberapa sistem, seperti Smalltalk , versi
kontemporer BASIC , Jawa dan lain-lain juga dapat menggabungkan
dua dan tiga.

Sementara interpretasi dan kompilasi adalah dua cara utama


yang digunakan bahasa pemrograman dilaksanakan, mereka tidak
saling eksklusif, karena sistem menafsirkan kebanyakan juga melakukan

Compiler dan Interpreter Page 15


beberapa pekerjaan penerjemahan, seperti kompiler. Istilah " ditafsirkan
bahasa "atau" bahasa dikompilasi "menandakan bahwa pelaksanaan
kanonik bahasa yang merupakan interpreter atau kompiler, masing-
masing. Sebuah bahasa tingkat tinggi idealnya merupakan abstraksi
independen dari implementasi tertentu.

Sejarah

Yang pertama ditafsirkan bahasa


tingkat tinggi mungkin Lisp . Lisp pertama kali
dilaksanakan oleh Steve Russell pada 704 IBM
komputer. Russell telah membaca John
McCarthy paper, dan menyadari (mengejutkan McCarthy) bahwa
fungsi Lisp eval dapat diimplementasikan dalam kode mesin. Hasilnya
adalah interpreter Lisp kerja yang dapat digunakan untuk menjalankan
program Lisp, atau lebih tepat , "mengevaluasi ekspresi Lisp".

Keuntungan dan kerugian dari menggunakan interpreter

Program biasanya ditulis dalam tingkat tinggi kode, yang harus


diubah menjadi kode mesin untuk CPU untuk melaksanakannya.
Konversi ini dilakukan dengan baik compiler atau interpreter. Sebuah
compiler membuat konversi hanya sekali, sedangkan penerjemah
biasanya mengkonversi setiap kali program dijalankan (atau dalam
beberapa bahasa seperti versi awal BASIC , setiap kali satu instruksi
dijalankan).

Siklus Pengembangan

Selama siklus pengembangan perangkat lunak , programmer


membuat perubahan sering ke kode sumber. Bila menggunakan

Compiler dan Interpreter Page 16


compiler, setiap kali perubahan dibuat ke kode sumber, mereka harus
menunggu compiler untuk menerjemahkan sumber file diubah dan
menghubungkan semua file kode biner bersama-sama sebelum
program bisa dijalankan. Semakin besar program, semakin lama
menunggu.

Sebaliknya, seorang programmer menggunakan juru melakukan


banyak kurang menunggu, sebagai penerjemah biasanya hanya perlu
menerjemahkan kode yang bekerja pada sebuah representasi
intermediate (atau tidak menerjemahkannya sama sekali), sehingga
membutuhkan waktu lebih sedikit sebelum perubahan dapat diuji

Distribusi

Sebuah compiler mengubah kode


sumber kedalam instruksi biner untuk arsitektur
prosesor yang spesifik ini, sehingga
membuatnya kurang portable. Konversi ini
dibuat hanya sekali, pada lingkungan
pengembang, dan setelah itu biner yang sama dapat didistribusikan ke
mesin pengguna di tempat yang dapat dieksekusi tanpa terjemahan
lanjut. Sebuah cross compiler dapat menghasilkan kode biner untuk
mesin pengguna bahkan jika itu memiliki prosesor yang berbeda dari
mesin di mana kode dikompilasi.

Program ditafsirkan dapat didistribusikan sebagai kode sumber.


Hal ini perlu diterjemahkan dalam setiap mesin akhir, yang
membutuhkan waktu lebih tetapi membuat program distribusi
independen dari arsitektur mesin. Namun, portabilitas kode sumber
ditafsirkan tergantung pada mesin target sebenarnya memiliki
interpreter yang cocok. Jika penafsir perlu diberikan bersama dengan

Compiler dan Interpreter Page 17


sumber, proses instalasi secara keseluruhan lebih kompleks daripada
pengiriman executable monolitik

Fakta bahwa kode ditafsirkan dengan mudah dapat dibaca dan


disalin oleh manusia dapat menjadi perhatian dari sudut pandang hak
cipta . Namun, berbagai sistem enkripsi dan kebingungan ada.
Pengiriman kode menengah, seperti bytecode, memiliki efek yang sama
dengan kebingungan, tapi bytecode dapat diterjemahkan dengan
decompiler atau disassembler .

Efisiensi

Kerugian utama dari penafsir adalah bahwa ketika sebuah


program sedang ditafsirkan, biasanya berjalan lebih lambat daripada
jika itu telah disusun . Perbedaan dalam kecepatan bisa menjadi kecil
atau besar, sering urutan besarnya dan kadang-kadang lebih. Ini
biasanya memerlukan waktu lebih lama untuk menjalankan program di
bawah penerjemah daripada menjalankan kode dikompilasi tetapi
dapat mengambil sedikit waktu untuk menafsirkannya dari total waktu
yang dibutuhkan untuk mengkompilasi dan menjalankannya. Hal ini
terutama penting ketika prototyping dan kode pengujian ketika siklus
edit-menafsirkan-debug sering bisa jauh lebih pendek daripada siklus
edit-kompilasi-run-debug

Menafsirkan kode lebih lambat daripada menjalankan kode


dikompilasi karena penerjemah harus menganalisa setiap pernyataan
dalam program setiap kali dieksekusi dan kemudian melakukan
tindakan yang diinginkan, sedangkan kode dikompilasi hanya
melakukan tindakan dalam konteks tetap ditentukan oleh kompilasi. Ini
run-time analisis dikenal sebagai "overhead interpretatif". Akses ke
variabel juga lambat dalam penerjemah karena pemetaan pengenal

Compiler dan Interpreter Page 18


lokasi penyimpanan harus dilakukan berulang-ulang pada saat run-time
daripada di waktu kompilasi .

Ada kompromi antara berbagai kecepatan pembangunan saat


menggunakan seorang penerjemah dan kecepatan eksekusi ketika
menggunakan compiler. Beberapa sistem (seperti beberapa lisps )
memungkinkan ditafsirkan dan dikompilasi kode untuk memanggil satu
sama lain dan berbagi variabel. Ini berarti bahwa setelah rutin telah diuji
dan debugged bawah penafsir dapat dikompilasi dan dengan
demikian mendapatkan keuntungan dari eksekusi lebih cepat,
sementara rutinitas lain sedang dikembangkan .

Banyak penafsir tidak mengeksekusi kode sumber seperti berdiri,


tetapi mengubahnya menjadi beberapa bentuk internal yang lebih
kompak. Banyak BASIC interpreter mengganti kata kunci dengan satu
byte token yang dapat digunakan untuk mencari instruksi dalam tabel
melompat . Sebuah penafsir Beberapa, seperti PBASIC interpreter,
mencapai tingkat yang lebih tinggi dari pemadatan program dengan
menggunakan sedikit-berorientasi daripada struktur byte berorientasi
memori program, di mana perintah token menempati mungkin 5 bit,
nominal "16-bit" konstanta disimpan dalam kode variabel-panjang
membutuhkan 3, 6, 10, atau 18 bit, dan operan alamat termasuk "sedikit
offset". Interpreter BASIC Banyak dapat menyimpan dan membaca
kembali representasi internal mereka sendiri tokenized.

Penerjemah mungkin juga menggunakan yang sama penganalisa


leksikal dan parser sebagai compiler dan kemudian menafsirkan
dihasilkan pohon sintaks abstrak .

Compiler dan Interpreter Page 19


Regress

Interpretasi tidak dapat digunakan sebagai satu-satunya metode


eksekusi: meskipun seorang juru sendiri bisa ditafsirkan dan seterusnya,
sebuah program langsung dieksekusi diperlukan suatu tempat di bagian
bawah tumpukan.

Variasi

Interpreter Bytecode

Ada spektrum kemungkinan antara menafsirkan dan kompilasi,


tergantung pada jumlah analisis dilakukan sebelum program dijalankan.
Misalnya, Emacs Lisp dikompilasi untuk bytecode , yang merupakan
representasi sangat padat dan dioptimalkan dari sumber Lisp, namun
tidak kode mesin (dan karena itu tidak terikat pada hardware tertentu).
Ini "dikompilasi" Kode ini kemudian diinterpretasikan oleh juru bytecode
(sendiri ditulis dalam C ).

Kode dikompilasi dalam hal ini adalah kode mesin untuk mesin
virtual , yang dilaksanakan tidak dalam perangkat keras, tetapi dalam
interpreter bytecode. Pendekatan yang sama digunakan dengan Forth
kode yang digunakan dalam Open Firmware sistem: bahasa sumber
dikompilasi menjadi "kode F" (bytecode a), yang kemudian
diinterpretasikan oleh mesin virtual

Tabel kontrol - yang tidak selalu merasa perlu untuk melewati fase
kompilasi - mendikte sesuai algoritma kontrol aliran melalui penerjemah
disesuaikan dalam cara yang mirip dengan interpreter bytecode.

Compiler dan Interpreter Page 20


Interpreter Abstrak Sintaks Pohon

Dalam spektrum antara interpretasi dan kompilasi,


pendekatan lain adalah mengubah kode sumber
menjadi dioptimalkan Pohon Sintaks Abstrak (AST)
kemudian melaksanakan program ini mengikuti
struktur pohon, atau menggunakannya untuk
menghasilkan kode asli Just-In-Time.

Dalam pendekatan ini, setiap kalimat perlu diurai hanya sekali.


Sebagai keuntungan lebih bytecode, AST membuat struktur program
global dan hubungan antara pernyataan (yang hilang dalam
representasi bytecode), dan ketika dikompresi memberikan representasi
yang lebih kompak. Dengan demikian, menggunakan AST telah
diusulkan sebagai perantara yang lebih baik Format untuk Just-in-time
compiler dibandingkan bytecode. Juga, memungkinkan untuk
melakukan analisis yang lebih baik saat runtime.

Namun, untuk juru, AST menyebabkan lebih overhead daripada


interpreter bytecode, karena node yang berkaitan dengan sintaks
melakukan tidak ada pekerjaan yang berguna, dari representasi kurang
berurutan (membutuhkan traversal pointer lebih) dan overhead
mengunjungi pohon.

Just-in-time kompilasi

Lebih lanjut mengaburkan perbedaan antara penerjemah, byte-


code interpreter dan kompilasi just-in-time kompilasi (atau JIT), suatu
teknik di mana representasi antara dikompilasi untuk asli kode mesin
pada saat runtime. Ini menganugerahkan efisiensi menjalankan kode asli,

Compiler dan Interpreter Page 21


pada biaya waktu startup dan penggunaan memori meningkat ketika
bytecode atau AST pertama kali disusun.

Otimasi adaptif adalah teknik pelengkap di mana profil


penerjemah program berjalan dan mengkompilasi bagian yang paling
sering dieksekusi menjadi asli kode. Kedua teknik yang beberapa
dekade tua, muncul dalam bahasa seperti Smalltalk pada 1980-an.

Just-in-time kompilasi telah mendapat perhatian


utama di antara pelaksana bahasa dalam beberapa
tahun terakhir, dengan Jawa , yang Kerangka. NET
dan paling modern JavaScript implementasi sekarang
termasuk JITs.

Compiler dan Interpreter Page 22


Kata Penutup
Demikian yang dapat kami paparkan mengenai materi yang
menjadi pokok bahasan dalam makalah ini, tentunya masih banyak
kekurangan dan kelemahan, karena terbatasnya pengetahuan dan
kurangnya rujukan atau referensi yang ada hubungannya dengan
makalah ini.

Penulis banyak berharap para pembaca yang budiman


memberikan kritik dan saran yang membangun kepada penulis demi
mempersempurnakan makalah ini dan penulisan makalah pada
kesempatan-kesempatan berikutnya. Semoga Berguna pada penulis
khususnya juga para pembaca yang budiman pada umumnya.

Compiler dan Interpreter Page 23


Referensi
 http://tyatyol.blogspot.com/2012/01/eis-executive-information-system.html
 http://dosen.narotama.ac.id/wp-content/uploads/2012/01/SELUK-BELUK-SISTEM-
INFORMASI-EKSEKUTIF.pdf
 http://mhd.blog.ittelkom.ac.id/blog/files/2010/01/Bab-7-Executive-Information-
System.pdf
 http://www.blogerch.com/2009/05/executive-information-system-eis.html
 http://mistercela21.wordpress.com/2010/01/12/sistem-informasi-eksekutif-
executive-information-system/
 http://albertus19.wordpress.com/2010/10/26/edp-electronic-data-processing/

Compiler dan Interpreter Page 24

Anda mungkin juga menyukai