Compiler adalah program komputer (atau set program) yang menerjemahkan
sebuah kode sumber yang ditulis dalam beberapa bahasa pemrograman tingkat
tinggi (seperti Java) ke dalam kode mesin untuk beberapa arsitektur komputer
(seperti Pentium arsitektur Intel). Kode mesin yang dihasilkan dapat kemudian
dijalankan berkali-kali terhadap data yang berbeda setiap kali.
Interpreter membaca program executable sumber yang ditulis dalam bahasa
pemrograman tingkat tinggi serta data untuk program ini, dan menjalankan
program terhadap data untuk menghasilkan beberapa hasil. Salah satu contoh adalah
Unix shell interpreter, yang menjalankan perintah sistem operasi interaktif.
Perhatikan bahwa kedua
interpreter dan kompiler (seperti program lain) ditulis dalam beberapa bahasa
pemrograman tingkat tinggi (yang mungkin berbeda dari bahasa yang mereka
terima) dan mereka diterjemahkan ke dalam kode mesin. Misalnya, Java
interpreter dapat sepenuhnya ditulis dalam Pascal, atau bahkan Java. Program
Sumber penerjemah mesin yang independen karena tidak menghasilkan kode mesin. (Perhatikan perbedaan
antara menghasilkan dan diterjemahkan ke dalam kode mesin.) Seorang
penafsir umumnya lebih lambat dari compiler karena itu proses dan menafsirkan
setiap pernyataan dalam program sebanyak jumlah evaluasi dari pernyataan ini.
Sebagai contoh, ketika
untuk loop ditafsirkan, pernyataan di dalam tubuh untuk loop akan dianalisa dan
dievaluasi pada setiap langkah lingkaran. Beberapa bahasa, seperti Java dan Lisp, datang
dengan baik seorang penerjemah dan kompilator. Source program Java
(Jawa kelas dengan java.ekstensi) dijabarkan
oleh
javac compiler menjadi file
byte-code (dengan kelas. ekstensi). Java interpreter, java , yang disebut Java
Virtual Machine (JVM), sebenarnya dapat menafsirkan kode byte langsung maupun
internal dapat mengkompilasi ke kode macine dan kemudian mengeksekusi kode
tersebut.
Compiler dan interpreter
bukan satu-satunya contoh penerjemah. Berikut adalah beberapa lagi:
|
Sumber Bahasa
|
Penterjemah
|
Target Bahasa
|
|
LaTeX
|
Teks Formater
|
PostScript
|
|
SQL
|
Database query optimizer
|
Rencana Evaluasi Query
|
|
Java
|
javac compiler
|
Kode byte Java
|
|
Java
|
cross-compiler
|
C + + kode
|
|
Teks bahasa Inggris
|
Memahami Bahasa Alam
|
semantik (makna)
|
|
Regular Expressions
|
JLex scanner Generator
|
scanner di Java
|
|
BNF dari bahasa
|
CUP parser generator yang
|
parser di Java
|
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 yang disusun dapat dijalankan pada
komputer yang CPU atau sistem operasi ini berbeda dari satu di compiler yang berjalan, compiler dikenal
sebagai cross-compiler . Sebuah program yang menerjemahkan dari bahasa
tingkat rendah ke tingkat yang lebih tinggi satu adalahdecompiler . Sebuah program yang menerjemahkan antara bahasa
tingkat tinggi biasanya disebut penerjemah
bahasa, sumber ke sumber penerjemah , atau konverter bahasa. Sebuah bahasa rewriter biasanya sebuah program yang menerjemahkan bentuk ekspresi tanpa
perubahan bahasa.
Compiler A kemungkinan untuk
melakukan banyak atau semua operasi berikut: analisis leksikal , preprocessing , parsing , analisis semantik ( Syntax-directed
translation ), generasi kode , dan kode optimasi .
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 compiler.
Istilah compiler - compiler
kadang-kadang digunakan untuk merujuk kepada ‘parser generator’, alat yang
sering digunakan untuk membantu menciptakan ‘lexer’ dan ‘parser’.
Compiler
dalam pendidikan
Konstruksi compiler dan optimasi compiler diajarkan di universitas dan sekolah - sekolah sebagai bagian dari ilmu komputer kurikulum. Program tersebut biasanya
dilengkapi dengan pelaksanaan kompiler untuk bahasa
pemrograman pendidikan. Sebuah contoh yang terdokumentasi adalah Niklaus Wirth 's PL / 0 . compiler, yang digunakan
Wirth untuk mengajarkan konstruksi compiler pada tahun 1970. Terlepas
dari kesederhanaan, PL / 0 compiler memperkenalkan beberapa konsep berpengaruh
ke lapangan:
1.
Pengembangan program dengan perbaikan bertahap (juga judul makalah 1971
oleh Wirth)
Struktur kompilator
Compiler program sumber jembatan dalam bahasa
tingkat tinggi dengan perangkat keras yang mendasarinya. Sebuah kompiler membutuhkan 1)
menentukan kebenaran sintaks program, 2) menghasilkan benar dan efisien kode
obyek, 3) organisasi run-time, dan 4) format output sesuai dengan assembler dan
/ atau linker konvensi. Compiler terdiri dari tiga bagian
utama: frontend, tengah-end, dan backend.
The front
end memeriksa apakah program
ini benar ditulis dalam hal sintaks bahasa pemrograman dan semantik. Berikut program legal dan ilegal
diakui. Kesalahan dilaporkan,
jika ada, dalam cara yang bermanfaat. Jenis pemeriksaan
juga dilakukan dengan mengumpulkan informasi jenis. Frontend kemudian menghasilkan sebuah perwakilan intermedit atau IR dari kode sumber untuk diproses oleh
middle-end.
The middle
end adalah di mana optimasi
berlangsung. Transformasi Khas
untuk optimasi penghapusan kode tidak berguna atau tidak terjangkau, penemuan
dan penyebaran nilai-nilai konstan, relokasi perhitungan untuk tempat yang
kurang sering dieksekusi (misalnya, dari loop), atau spesialisasi perhitungan
berdasarkan konteks. The
middle-end menghasilkan IR lain untuk backend berikut.Kebanyakan upaya optimasi
difokuskan pada bagian ini.
The back
end bertanggung jawab untuk
menerjemahkan IR dari tengah-end ke dalam kode assembly. Target instruksi (s) yang dipilih
untuk setiap instruksi IR. Daftar alokasi ditunjuk prosesor register untuk
variabel program di mana mungkin. Backend
ini menggunakan perangkat keras dengan mencari tahu bagaimana agar paralel unit eksekusi sibuk,
mengisi delay slot ,
dan sebagainya. Meskipun sebagian
besar algoritma untuk optimasi di NP ,
teknik heuristik yang berkembang dengan baik.
Compiler output
Salah satu klasifikasi kompiler adalah dengan platform yang di
mana kode yang dihasilkan mereka mengeksekusi. Hal ini dikenal sebagai platform target.
Sebuah asli atau host compiler 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 cross compiler dirancang
untuk berjalan pada platform yang berbeda. Palang
compiler 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 sebuah mesin virtual (VM)
mungkin atau mungkin tidak akan dijalankan pada platform yang sama sebagai
compiler yang dihasilkan itu. Untuk
alasan ini compiler seperti biasanya tidak diklasifikasikan sebagai compiler
asli atau silang.
Semakin rendah tingkat bahasa yang merupakan
target dari compiler mungkin sendirinya adalah bahasa pemrograman tingkat tinggi .C ,
sering dipandang sebagai semacam portabel assembler ,
juga dapat menjadi target bahasa kompilator. Misalnya: Cfront ,
compiler asli untuk C + + menggunakan
C sebagai bahasa target. C yang
dibuat oleh kompilator seperti 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: kode C dengan
# line arahan
dapat dihasilkan untuk mendukung debugging dari
sumber aslinya.
Tidak ada komentar:
Posting Komentar