Anda di halaman 1dari 19

Universitas Islam Syekh Yusuf Tangerang

Pembangkit
Kode (Code
Generator)
Dosen Pengampu: Ahmad Syauki, S.Kom, M.Kom

Kelompok 1
Anggota:
01. 02. 03.
1904030036 1904030060 1904030056
ANISA NURUL ISTIQOMAH ERIKA NOVIANTI ANNISAA AZIZATUL M

04. 05.
1904030075 1704030078
NUSIRWAN EKA PUTRA ANNISA SHABRINA RAHMAN
Code Generator
Proses dimana pembangkit code
compiler mengkonversi beberapa
representasi intermediate kode
sumber (source code) kedalam bentuk
kode mesin yang dengan mudah dapat
dijalankan oleh mesin.
Posisi Code Generator
Persyaratan Code Generator
Output code harus benar dan berkualitas tinggi

Harus efisien

Secara matematis, masalah untuk membangkitkan


kode yang optimal adalah undecidable

Secara praktek, dengan menggunakan heuristik tapi


tidak selalu menghasilkan kode yang optimal.
Issue Code Generator Design

 Input untuk code generator


 Target Program
 Memory Management
 Instruction Selection
 Register Allocation
 Pemilihan Urutan Evaluation
 Pendekatan Code Generator
Input Code Generator
 Input terdiri dari representasi intermediate pada source program
yang dihasilkan oleh front-end, bersama informasi dalam symbol
table yang digunakan untuk menentukan run time addres data
object dalam representasi intermediate.
 Diasumsikan bahwa sebelum code generation, front-end telah
 
melakukan scan, men-parse dan menerjemahkan source program
ke dalam representasi intermediate detail.
 Selain itu, diasumsikan telah dilakukan type checking, sehingga type
con-version operator telah di-insert dan semantic error telah
terdeteksi.
Target Program
Output dari code generator adalah target program, yang bias mengambil bentuk :

 Absolute Machine Language: Mempunyai keuntungan dapat ditempatkan


dalam lokasi yang tetap didalam memory dan dapat dieksekusi langsung.
Program yang kecil dapat di-kompile dan dieksekusi dengan cepat. Contoh :
Sejumlah “student-job” compiler, seperti WATFIV dan PL/C
 Relocatable Machine Language (Object Module): Mengijinkan subprogram
  dikompile secara terpisah (flexibility). Satu set relocatable object module
dapat di link / load bersama-sama pada eksekusi linking-loader (perlu usaha
ekstra).
 Assembly Language: Keuntungannya adalah adanya kemudahan proses
code generation untuk men-generate symbolic instruction dan
menggunakan fasilitas makro dari assembler untuk men-generate code.
Memory Management

 Memetakan nama didalam source program ke address dari data


object dalam run-time memory yang dikerjakan bersama-sama oleh
 
front-end dan code generator.
 Diasumsikan bahwa nama dalam three-address statement merefer
kepada symbol-table entry untuk nama tersebut.
 Tipe dalam deklarasi menentukan lebar (jumlah storage) yang
diperlukan untuk nama yang dideklarasikan.
Instruction Selection Contoh
Three-address statement, bentuk :
x := y + z
dimana : x, y, z dialokasikan secara static dapat
diterjemahkan ke dalam sekuens code berikut :

Uniformity dan MOV y, R0 /* load y ke register R0 */


completeness merupa- ADD z, R0 /* add z ke R0 */
kan faktor yang penting, MOV R0, x /* store R0 ke dalam x */
juga instruction speed
dan machine idiom. Namum statement-by-statement sering menghasilkan
code yang buruk. Contoh sekuens dari statement
  a := b + c
d := a + e
  dapat diterjemahkan menjadi :
MOV b, R0
Disini statement ketiga ADD c, R0
dan keempat akan MOV R0, a
redundant, juga MOV a, R0
statement ketiga jika a ADD e, R0
tidak digunakan secara MOV R0, d
berurutan.
 
Register Allocation
 Instruksi yang melibatkan register operand biasanya lebih pendek dan lebih
cepat daripada yang melibatkan operand dalam memory. Karena itu,
penggunaan register yang efisien sangat penting untuk mem-bangkitkan code
yang baik.
 Penggunaan register dibagi dalam 2 sub-masalah :
- Selama register allocation, dipilih variable-variable yang akan mene-tap
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.
Pemilihan Urutan Evaluasi

Urutan komputasi dapat mempengaruhi


efisiensi pada target code. Beberapa urutan
komputasi memerlukan register yang lebih
sedikit untuk menampung intermediate
result daripada yang lainnya. Mengambil
urutan terbaik adalah NP-Complete Problem.
Pendekatan Code Generator

Kriteria terpenting adalah menghasilkan


code yang baik.
Tujuan perancangan adalah :
 Mudah diimplementasikan
 Mudah ditest
 Mudah di-maintain
Run-Time Stronge
 strategi alokasi : static dan stack
 Static allocation
 pada static allocation statement call di terjemahkan menjadi
Move #here + 20, calle static area
GOTO calle code area

Three-Address Activation Record for c (64 bytes) Activation Record for p (88
Code 0:return address 8: arr bytes) 0:return address 4:
/* code for c */ action1 buf
call p 56:i
action2 60:j 84:n
halt
/* code for p */ action3
return
Code Generator 1
• Hasil dari tahapan analisis akan diterima oleh bagian pembangkitan kode
(code generator). Di sini kode antara dari program biasanya ditranslasikan
ke Bahasa assembily atau Bahasa mesin.
• Contoh:
(A+B) * (C+D)
kode antaranya dalam bentuk quadruple:
1. +, A, B, T1
2. +, C, D, T2
3. *, T1, T2, T3
Code Generator 2
• Dapat ditranslasikan ke dalam bahasa Assembly dengan akumulator
tunggal:

LDA A {Muat isi A ke akumulator}


ADD B {Tambahkan isi akumulator dengan B}
STO T1 {Simpan isi akumulator ke T1}
LDA C
ADD D
STO T2
LDA T1
MUL T2
STO T3
Code Generator 3
• Keluaran dari code generator akan diterima oleh code optimizer.
• Misalkan untuk kode assembly sebelumnya bisa di optimasi menjadi:

LDA A {Muat isi A ke akumulator}


ADD B {Tambahkan isi akumulator dengan B}
STO T1 {Simpan isi akumulator ke T1}
LDA C
ADD D
MUL T1
STO T2
Contoh Intruksi Pembangkit kode
Source Token- LDAX
Program Token ld1 Id 1 = (exp) ADD Y
X=Y+X = ld2+ld1 STO X

Id 2 + Id 1

Analalisis semantic
Analalisis Leksikal Analisis Sintaksis dan code
generator

Tabel Simbol
TERIMA
KASIH

Anda mungkin juga menyukai