Ringkasan yang saya berikan di bawah ini didasarkan pada "Compiler, Prinsip, Teknik, & Peralatan", Aho, Lam, Sethi, Ullman, (Pearson International Edition, 2007), halaman 1, 2, dengan tambahan beberapa ide saya sendiri.
Dua mekanisme dasar untuk memproses suatu program adalah kompilasi dan interpretasi .
Kompilasi sebagai input program sumber dalam bahasa yang diberikan dan output program target dalam bahasa target.
source program --> | compiler | --> target program
Jika bahasa target adalah kode mesin, itu dapat dieksekusi langsung pada beberapa prosesor:
input --> | target program | --> output
Kompilasi melibatkan pemindaian dan menerjemahkan seluruh program input (atau modul) dan tidak melibatkan pelaksanaannya.
Interpretasi mengambil sebagai input program sumber dan inputnya, dan menghasilkan output program sumber
source program, input --> | interpreter | --> output
Interpretasi biasanya melibatkan pemrosesan (analisis dan eksekusi) program satu per satu pernyataan.
Dalam praktiknya, banyak pengolah bahasa menggunakan campuran dari dua pendekatan. Misalnya, program Java pertama-tama diterjemahkan (dikompilasi) menjadi program perantara (kode byte):
source program --> | translator | --> intermediate program
output dari langkah ini kemudian dieksekusi (ditafsirkan) oleh mesin virtual:
intermediate program + input --> | virtual machine | --> output
Untuk memperumit hal-hal lebih jauh, JVM dapat melakukan kompilasi just-in-time pada saat runtime untuk mengkonversi kode byte ke format lain, yang kemudian dieksekusi.
Juga, bahkan ketika Anda mengkompilasi ke bahasa mesin, ada penerjemah yang menjalankan file biner Anda yang diimplementasikan oleh prosesor yang mendasarinya. Oleh karena itu, bahkan dalam kasus ini Anda menggunakan hibrida kompilasi + interpretasi.
Jadi, sistem nyata menggunakan campuran keduanya sehingga sulit untuk mengatakan apakah prosesor bahasa yang diberikan adalah kompiler atau juru bahasa, karena mungkin akan menggunakan kedua mekanisme pada berbagai tahap pemrosesan. Dalam hal ini mungkin akan lebih tepat untuk menggunakan istilah lain yang lebih netral.
Namun demikian, kompilasi dan interpretasi adalah dua jenis proses yang berbeda, seperti yang dijelaskan dalam diagram di atas,
Untuk menjawab pertanyaan awal.
Kompiler akan membuat bahasa mesin yang berjalan pada perangkat keras fisik secara langsung?
Belum tentu, kompiler menerjemahkan program yang ditulis untuk mesin M1 ke program yang setara yang ditulis untuk mesin M2. Mesin target dapat diimplementasikan dalam perangkat keras atau menjadi mesin virtual. Secara konseptual tidak ada perbedaan. Poin penting adalah bahwa kompiler melihat sepotong kode dan menerjemahkannya ke bahasa lain tanpa menjalankannya.
Jadi seorang penerjemah tidak menghasilkan bahasa mesin tetapi seorang kompiler melakukannya untuk inputnya?
Jika dengan memproduksi Anda merujuk ke output, maka kompiler menghasilkan program target yang mungkin dalam bahasa mesin, seorang penerjemah tidak.