Compiler And Interpreter

advertisement
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
komputer
adalah
(atau
set
sebuah
program
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"
untuk program
terutama
digunakan
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
Selanjutnya
1950
pertama
kompiler
dikembangkan.
kali
beberapa
Compiler
pertama
diusulkan.
percobaan
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
merupakan
mungkin
tingkat
target
sendiri
rendah
dari
yang
kompilator
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
menghitung
persis
berapa
banyak
tinggi. Ini bisa sulit untuk
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 , recursiveketurunan , 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
mengeksekusi
melakukan,
,
instruksi
yang
yaitu
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, masingmasing. 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
membutuhkan
diterjemahkan
waktu
lebih
dalam
tetapi
setiap
mesin
membuat
akhir,
program
yang
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, bytecode 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-SISTEMINFORMASI-EKSEKUTIF.pdf

http://mhd.blog.ittelkom.ac.id/blog/files/2010/01/Bab-7-Executive-InformationSystem.pdf

http://www.blogerch.com/2009/05/executive-information-system-eis.html

http://mistercela21.wordpress.com/2010/01/12/sistem-informasi-eksekutifexecutive-information-system/

http://albertus19.wordpress.com/2010/10/26/edp-electronic-data-processing/
Compiler dan Interpreter
Page 24
Download