Minggu, 18 Agustus 2013

Kompiler

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.
Capture5.PNGPerhatikan 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)
2.      Penggunaan parser keturunan rekursif
3.      Penggunaan EBNF untuk menentukan sintaks dari bahasa
4.      Sebuah kode generator portabel memproduksi P-code
5.      Penggunaan T-diagram  dalam deskripsi formal dari bootstrap masalah

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