Jumat, 15 April 2011

SYNTHESIS PROGRAM OBJEK YANG EXECUTABLE

SYNTHESIS PROGRAM OBJEK YANG EXECUTABLE

Tahapan akhir suatu tranlasi terfokus pada pembangunan program yang executable dari output yang dihasilkan oleh semantic analyzer. Tahap ini melibatkan penghasil kode (code generation) jika dibutuhkan dan melibatkan juga optimisasi pada program yang sudah dihasilkan. Jika subprogram ditranslasikan secara terpisah atau jika pustaka subprogram digunakan maka tahapan final linking dan loading dibutuhkan untuk menghasilkan suatu program lengkap yang siap dieksekusi.
a.    Pembentukan/Pembangkitan Kode (Code Generator).
Dalam tahap ini bentuk antara dari bahasa sumber yang berupa suatu pohon sintaks diterjemahkan ke dalam suatu bahasa assembli atau bahasa mesin. Tahap ini membangkitkan kode antara (intermediate code) berdasarkan pohon parsing. Pohon parsing selanjutnya diterjemahkan oleh suatu penerjemah, misalnya penerjemah berdasarkan sintaks (syntax-directed translator). Hasil penerjemahan ini biasanya merupaka perintah tiga alamat (three-address code) yang merupakan representasi program untuk suatu mesin abstrak. Bahasa mesin yang dihasilkan adalah bahasa assembli yang merupakan suatu perintah 1 alamat, 1 akumulator. Perintah tiga alamat bisa berbentuk quadruples (op, arg1, arg2, result), triples (op,arg1,arg2). Ekspresi dengan satu argumen dinyatakan dengan menetapkan arg2 dengan – (strip,dash).

b.    Optimalisasi Kode
Hasil pembentukan kode yang diperoleh kemudian dibuat lebih kompak lagi dengan melakukan beberapa teknik optimasi supaya dapat diperoleh program yang lebih efisien. Dalam hal ini dilakukan beberapa hal seperti pendeteksian suatu ekspresi yang sering terjadi, sehingga pengulangan tidak perlu terjadi dan lain sebagainya. Pada tahap ini melakukan optimasi (peghematan space dan waktu komputasi) jika mungkin terhadap kode antara. Semantic analyzer biasanya menghasilkan suatu output program executable yang sudah ditranslasi yang berbentuk intermediate code, yang kadangkala merupakan kode yang buruk atau tidak efisien. Sebagai contoh, statemen:

A = B + C + D

Akan menghasilkan suatu intermediate code:
(a) temp1 = B + C
(b) temp2 = temp1 + D
(c) A = temp2
Dimana sebenarnya merupakan suatu kode yang tidak efisien:
1.    Load register dengan B (dari (a))
2.    Add C ke register
3.    Store register di temp1
4.    Load register dengan temp1 (dari(b))
5.    Add D ke register
6.    Store register di temp2
7.    Load register dengan temp2 (dari (c))
8.    Store register di A
Instruksi 3 dan 4 sama seperti instruksi 6 dan 7 yang berarti adalah redundant, ketika semua data dapat disimpan di register sebelum penyimpanan hasil di A.
Optimalisasi diperlukan pada kasus ini untuk menghilangkan inefisiensi kode. Optimalisasi akan mengubah kode yang tidak efisien menjadi kode yang efisien.

c.     Penghasil Kode (Code Generation)
Setelah program yang ditranslasi dan representasi internalnya dioptimalisasi maka harus dibentuk sebagai statemen bahasa assembly, kode mesin, atau program objek yang lainnya yang menjadi output dari translasi. Kode output ini mungkin dapat langsung dieksekusi, atau membutuhkan langkah translasi berikutnya, yaitu Linking dan Loading.

d.    Linking dan Loading
Tahapan akhir yang bersifat opsional adalah menggabungkan potongan-potongan kode yang dihasilkan dari translasi terpisah suatu subprogram ke dalam suatu program final executable yang utuh. Hal ini dapat terjadi karena potongan-potongan kode tersebut mempunyai loader tables yang dihasilkan oleh translator. Loader tables inilah yang digunakan oleh linking loader untuk menggabungkan potongan-potongan kode tersebut di memori sehingga menghasilkan program final executable yang siap untuk dieksekusi.

Tidak ada komentar:

Posting Komentar