Tahun
Versi
Pertemuan 25 & 26
Code Generation
Learning Outcomes
Pada akhir pertemuan ini, diharapkan mahasiswa
akan mampu :
Mahasiswa dapat menunjukkan hasil code
genarator dari suatu kasus kompilasi program
(C3)
Mahasiswa dapat membuat diagram / skema
perancangan compiler yang paling optimal (C4)
Outline Materi
front
end
intermediate
code
code
optimizer
intermediate
code
code
generator
target
program
symbol
table
Target Program
Output dari code generator adalah target program, yang bisa mengambil bentuk :
Target program dalam bentuk Absolute machine language mem-punyai keuntungan dapat
ditempatkan dalam lokasi yang fixed di dalam memory & langsung dapat dieksekusi.
Program yang kecil dapat di-kompile dan dieksekusi dengan cepat.
Contoh : sejumlah student-job compiler, seperti WATFIV dan PL/C
Keuntungan target program dalam bentuk Relocatable Machine Language Program
(Object Module) adalah sub-program dapat di-kompile secara terpi-sah.Satu set
relocatable object module dapat di-link bersama-sama & di-load oleh linking loader untuk
dieksekusi.
Walaupun keluar usaha ekstra untuk linking & loading,namun kita mendapat fleksibilitas
karena dapat mengkompile subroutine secara terpisah.
Assembly Language program sbg tar-get program mempunyai keuntungan kemudahan
proses code generation. Kita dapat men-generate symbolic instruction & menggunakan
fasilitas makro dari assembler untuk men-generate code. Biaya yang harus dikeluarkan
adalah tahap assembly setelah code generation.
Memory Management
Instruction Selection
Uniformity dan completeness dari instruction set adalah faktor yang penting.
Selain itu, faktor yang penting lainnya adalah instruction speed dan machine idiom.
Contoh :
Namun statement-by-statement code generation ini sering menghasilkan code yang buruk.
Di sini statement ketiga dan keempat akan redundant, juga statement yang ketiga jika a
tidak digunakan secara berurutan.
10
Register Allocation
Instruksi yang melibatkan register operand biasanya lebih
pendek dan lebih cepat daripada yang melibatkan operand
di dalam memory.
Karena itu, penggunaan register yang efisien sangat penting
untuk membangkitkan code yang baik.
Penggunaan register dibagi ke dalam 2 sub-masalah :
Selama register allocation, dipilih variable-variable yang
akan mene-tap di dalam register pada suatu titik dalam
program.
Selama register assignment, diam-bil register khusus
dimana variabel akan menetap.
Menemukan optimal assignment dari register untuk variabel
sulit, walaupun dengan single register.
Secara matematis, problem ini adalah NP-Complete.
11
12
13
Run-Time Storage
Strategi alokasi : Static dan Stack
Static allocation
Pada static allocation statement call diterjemahkan
menjadi :
Move #here + 20, callee.static_area
GOTO calle.code_area
Three-Address
Code
Activation Record
for c (64 bytes)
Activation Record
for p (88 bytes)
/* code for c */
action1
call p
action2
halt
/* code for p */
action3
return
0:return address
8:
arr
0:return address
4:
buf
56:i
60:j
84:n
14
15
2. Diberikan statement
a := (a b) + (c + b)*(3 + c a) 4*b, buatlah :
Buat tabel code generator
16