Dokumen - Tips - Teknik Kompilasi Bertha 568690b249ae4 PDF
Dokumen - Tips - Teknik Kompilasi Bertha 568690b249ae4 PDF
MSI
Diktat Kuliah Teknik Kompilasi
BAB 1
PENDAHULUAN
dari beberapa field, misalnya field operasi diikuti satu atau lebih operan.
3. Bahasa tingkat tinggi (user oriented)
Disebut tingkat tinggi karena lebih dekat dengan manusia. Mem-berikan fasilitas yang
lebih banyak, kontrol program yang ter-struktur, kalang (nested), block, dan prosedur.
Contohnya: Pascal, BASIC
4. Bahasa yang problem oriented
Memungkinkan penyelesaian untuk suatu masalah atau aplikasi yang spesifik.
Contohnya: SQL (Structured Query Language) un-tuk aplikasi database, COGO untuk
aplikasi teknik sipil. Bahasa yang problem oriented kadang dimasukkan pula sebagai
bahasa tingkat tinggi.
Dalam buku ini akan difokuskan pada pengembangan kompi-lator untuk bahasa tingkat
tinggi prosedural seperti Pascal.
Keuntungan bahasa tingkat tinggi dibandingkan bahasa tingkat rendah sebagai berikut:
1. Kemudahan untuk dipelajari, tidak membutuhkan latar belakang pengetahuan mengenai
perangkat keras (hardware) karena sifat-nya yang machine independent.
2. Lebih mendekati permasalahan yang akan diselesaikan
3. Pemrogram tidak perlu mengetahui bagaimana representasi data ke dalam bentuk internal
di meinory. Kemampuan untuk konversi data, seperti floating point misalnya sudah
tersedia. Pekerjaan tersebut ditangani oleh suatu sistem yang mentranslasi-kan program
bahasa tingkat tinggi ke dalam bahasa mesin.
4. Memberikan banyak pilihan struktur kontrol seperti:
• kondisional (IF-THEN-ELSE)
• looping (REPEAT-.UNTIL, FOR)
• struktur blok (BEGIN..END)
• nested statement
Struktur kontrol ini memberikan fasilitas untuk pemrograman terstruktur, sehingga
program mudah dibaca, dipahami dan dimodifikasi. Ini akan mengurangi biaya
pemrograman karena program lebih sederhana.
5. Program lebih mudah di-debug. Bahasa tingkat tinggi menyediakan konstruksi yang
mengurangi kesalahan pemrograman yang biasa muncul pada bahasa tingkat rendah.
Sebagai contoh, deklarasi suatu variabel akan menjadi sesuatu yang berguna dalam
mendeteksi kesalahan penggunaan variabel, Bahasa-bahasa biasanya
mengharuskan penggunaan pointer secara konsisten. Suatu program yang terstruktur
Bertha Meyke Waty Hutajulu, S.Kom, M.MSI
Diktat Kuliah Teknik Kompilasi
Agar dapat dieksekusi, sebuah program dalam bahasa tingkat tinggi tentu saja harus
ditranslasikan ke dalam bahasa mesin. Pada bagian berikutnya akan dibahas mengenai
translator.
1.2 TRANSLATOR
Sebuah translator melakukan pengubahan source code/source program (program
sumber) ke dalam target codelobject code/object program (program objek). Source code ditulis
dalam bahasa sumber, sedang object code bisa berupa suatu bahasa pemrograman lain atau
bahasa mesin pada suatu komputer. Ada beberapa macam translator:
1. Assembler
Source code adalah bahasa assembly, object code adalah bahasa mesin. Contohnya: Turbo
Assembler dan Macro Assembler.
2. Kompilator (Compiler)
Source code adalah bahasa tingkat tinggi (misal bahasa Pascal), object code adalah bahasa
raesin atau bahasa assembly. Source code dan data diproses pada saat yang berbeda.
Contohnya: Turbo Pascal. Proses kompilasi dapat dilihat pada gambar 1.2.
Compile time adalah saat pengubahan source code ke object code. Run time adalah saat
eksekusi object code.
1. Interpreter
Interpreter tidak membangkitkan object code, hasil translasi hanya dalam bentuk
internal. Contoh interpreter: BASICA/GW-BASIC, LISP, SMALLTALK. Source code
dan data diproses pada saat yang sama. Proses interpretasi dapat dilihat pada gambar 1.3.
Selanjutnya dalam buku ini akan difokuskan pada kompilator dan teknik
pengembangannya.
Bertha Meyke Waty Hutajulu, S.Kom, M.MSI
Diktat Kuliah Teknik Kompilasi
BAB 2
PERANCANGAN BAHASA PEMROGRAMAN
Kornplek-sitas tersebut bisa muncul baik pada tahapan analisis maupun sin-tesis.
Kompleksitas biasanya muncul pada bahasa di mana koma dan parenthesis (kururig
buka/tutup) digunakan pada banyak aturan yang berbeda. Sebagai contoh, parenthesis bisa
dipakai pada:
• Pengelompokan sub-ekspresi
• Membatasi argumen pada pemanggilan prosedur
• Membatasi parameter pada definisi prosedur
• Menentukan indeks pada array
• Ekspresi logika
Dalam kasus tersebut diperlukan look-ahead parser yang mampu melihat dua atau tiga
token ke depan, sehingga memperlambat kompilasi dan menambah ukuran tabel untuk parsing.
Feature bahasa yang kompleks tapi jarang dibutuhkan lebih baik tidak dimasukkan. Salah satu
contoh skema yang sederhana tetapi powerful adalah metode passing parameter dengan call by
value dan call by reference. Sebisa mungkin rancangan bahasa dibuat selengkap mung-kin
sebelum masuk ke tahapan implementasi kompilator.
6. Efisiensi
Efisiensi merupakan bahasan yang penting dalam sejarah pengembangan bahasa
pemrograman. Dalam hal ini harus diingat pula bahwa mesin akan lebih murah, sementara
pemrogram akan semakin mahal. Kita tidak bisa memaksakan efisiensi 10 persen dengan usaha
yang dikeluarkan cukup keras, karena hasilnya tidak sebanding dengan 'investasi' yang
dilakukan. Perbedaan dalam efi-siensi 10 atau 20 persen bisa ditoleransi. Tetapi tidak untuk
per-bedaan dalam kelipatan 2 atau 10 karena alasan-alasan berikut:
• Bagaimanapun cepat dan murahnya perangkat keras, akan lebih murah dan cepat
bilamana menjalankan sebuah program yang efisien
• Kecepatan dan harga dari peripheral tidak meningkat secepat CPU
• Tidak seharusnya user dikorbankan dengan memaksa mereka mengeluarkan uang untuk
peningkatan perangkat keras
Salah satu hal yang penting adalah menentukan penyebab utama dari inefisiensi.
Penyebab terbesar biasanya adalah ketidakcocokan antara perangkat keras dengan bahasa.
Mencoba untuk membuat bahasa terlalu 'dekat' dengan perangkat keras juga akan memberikan
hasil yang buruk. Optimasi suatu kompilator bukanlah jawaban utama. Suatu optimasi
kompilator menimbulkan kesulitan dan memerlukan banyak waktu untuk dibuat. Harus
dilakukan secara hati-hati supaya semantik dari bahasa tidak berubah karena proses optimasi.
Optimizer umumnya juga berjalan lebih lambat daripada kompilator sederhana. Efisiensi
Bertha Meyke Waty Hutajulu, S.Kom, M.MSI
Diktat Kuliah Teknik Kompilasi
bukanlah hanya permasalahan ke-cepatan-ukuran, karena akses I/O dan paging memori
termasuk juga dalam efisiensi. Peningkatan yang signifikan dalam efisiensi bisa didapat
dengan membuat bahasa lebih sederhana sehingga mudah untuk menghasilkan kode yang
efisien.
7. Machine Independent
Sebuah bahasa dikatakan machine independent jika dan hanya jika sebuah program yang
telah sukses dikompilasi dan dieksekusi pada suatu mesin, saat dipindahkan ke mesin lainnya
akan berjalan dengan input dan output yang tepat sama. Perlu diperhatikan ma-chine
independence tidak diharuskan untuk semua bahasa pemro-gramau. Misalnya bahasa yang
ditujukan untuk penulisan sistem operasi bisa memiliki ketergantungan tertentu pada mesin.
Beberapa masalah yang berkaitan dengan independensi suatu bahasa misal-nya:
Aritmatika floating point
Kumpulan (set) karakter yang ada
Karakter kontrol.
8. Kesederhanaan (simplicity)
Kebanyakan pemrogram menginginkan bahasa yang seder-hana. Tetapi kesederhanaan
bisa pula berarti kekurangan di sisi lain. Bahasa BASIC, contohnya, merupakan bahasa yang
sederhana, tetapi tidak dirancang secara baik. Simplicity tidak bisa dicapai de-ngan
keterbatasan struktur yang akan menghasilkan chaos. Sim-plicity juga tidak bisa dicapai
dengan generalitas yang tidak terbatas, karena akan menghasilkan bahasa yang sangat sulit
untuk diimplementasikan secara lengkap. Kesederhanaan bisa dicapai melalui:
• Pembatasan-pembatasan tujuan
• Perhatian pada keterbacaan
• Pendefinisian yang baik
• Konsep yang sederhana.
9. Uniformity
Uniformity bisa didefinisikan sebagai mengerjakan hal yang sama dengan cara yang
sama. Bila diadopsi sebagai prinsip bahasa pemrograman, ini bisa menolong mengurangi
hal-hal yang harus diingat pemrogram, karena akan lebih mudah memahami bagaimana suatu
feature akan dilakukan. Seperti aspek-aspek yang lain, uniformity bisa menjadi berguna atau
tidak tergantung dari bagaimana penerapannya. Suatu contoh penerapan uniformity yang
berguna misalkan pemakaian ekspresi pada ALGOL, dimanapun dibutuhkan suatu nilai
aritmatika bisa digunakan ekspresi apa pun. Contoh pe-nerapan uniformity yang tidak berguna
Bertha Meyke Waty Hutajulu, S.Kom, M.MSI
Diktat Kuliah Teknik Kompilasi
misalnya gagasan mengenai ekspresi dan statement pada ALGOL. Suatu bahasan dalam kasus
uniformity adalah bagaimana menghilangkan kasus khusus. Kasus-kasus khusus seperti ini
memiliki masalah:
Membuat bahasa menjadi lebih kompleks
Menuju pada implementasi yang berbeda, beberapa akan mengimplementasikannya
dengan tidak tepat, yang lain. mungkin akan menghilangkannya
Menjadi lebih sulit untuk dihilangkan meskipun terdapat ke-kurangannya.
10. Orthogonality
Gagasan mendasar dari orthogonality adalah setiap fungsi bekerja tanpa perlu
mengetahui struktur dari yang lain. Misalkan operasi aritmatika menggabungkan dua nilai,
tidak memperdulikan bagaimana nilai tersebut didapatkan. Alternatif untuk orthogonality
adalah diagonality.
11. Generalisasi dan spesialisasi
Pemikiran mendasar dari generalisasi adalah: "jika kita dibolehkan melakukan ini, maka
lakukanlah hal lain dengan cara se-rupa". Dalam cara serupa dengan orthogonality, merupakan
pelengkap bagi simplicity. Jika digunakan berlebihan, bisa menghasilkan pemakaian yang
jarang, atau feature yang mengandung kesalahan yang sulit diimplementasikan. Pada beberapa
bahasa terdapat fungsi built-in yang menerima berapa pun jumlah argumen, di mana jarang
user menggunakannya.
Bertha Meyke Waty Hutajulu, S.Kom, M.MSI
Diktat Kuliah Teknik Kompilasi
BAB 3
KONSEP DAN NOTASI
BAHASA
Bisa kita lihat penggolongan di atas berdasarkan pembatasan yang dilakukan pada aturan
produksinya. Aturan produksi merupakan pusat dari tata bahasa, yang menspesifikasikan
bagaimana suatu tata bahasa melakukan transformasi suatu string ke bentuk lainnya, dan
melalui aturan produksi tersebut didefinisikan suatu bahasa yang berhubungan dengan tata
bahasa tersebut. Di sini semua aturan produksi dinyatakan dalam bentuk α→β (bisa dibaca: α
menghasilkan β, atau dibaca α menurunkan β, di mana α menyatakan simbol-simbol pada ruas
kiri aturan produksi (sebelah kiri tanda →) dan β menyatakan simbol-simbol pada ruas kanan
aturan produksi (sebelah kanan tanda →, dan bisa disebut juga sebagai hasil produksi).
Bertha Meyke Waty Hutajulu, S.Kom, M.MSI
Diktat Kuliah Teknik Kompilasi
Simbol-simbol tersebut bisa berupa simbol terminal atau simbol non-terminal/variabei. Simbol
variabel/non terminal adalah simbol yang masih bisa diturunkan, sedang simbol terminal sudah
tidak bisa diturunkan lagi. Simbol terminal biasanya (dan pada buku ini) dinyatakan dengan
(huruf kecil, misal 'a'/b'/c'. Simbol non terminal/variabel biasanya diriyatakan huruf besar,
misal 'A'.'B', 'C'.
Dengan menerapkan aturan produksi, suatu tata bahasa bisa menghasilkan sejumlah
string. Himpunan semua string tersebut adalah bahasa yang didefinisikan oleh tata bahasa
tersebut.
Contoh aturan produksi:
T→α
Bisa dibaca : “T” menghasilkan a”
E →T | T+E
bisa dibaca: "E menghasilkan T atau E menghasilkan T+E"
Simbol ' | ' menyatakan 'atau', biasa digunakan untuk mempersingkat penulisan aturan
produksi yang mempunyai ruas kiri yang sama. Pada contoh di atas:
E →T | T+E
merupakan pemendekan dari aturan produksi:
E →T
E →T+E
Bahasa manusia/ bahasa alami termasuk ke dalam grammar (tata bahasa) Tipe
0/Unrestricted, di mana tidak ada batasan pada aturan produksinya. Misalkan saja:
Abc → De
Pada bahasa Context Sensitive, panjang string pada ruas kiri ≤ panjang ruas kanan ( | α | ≤
|β | ). Contoh aturan produksi yang context sensitive:
Ab→DEF
CD →eF.
Perhatikan aturan produksi seperti:
S →e
kita ketahui | S | = 1, sedang | έ| = 0, menurut aturan context sensitive aturan produksi itu tidak
diperkenankan, tetapi di sini kita buat suatu perkecualian, sehingga S → ε dianggap rnemenuhi
context sensitive grammar.
Batasan context sensitive biasanya turut digunakan dalam proses analisis semantik pada
tahapan kompilasi.
Bertha Meyke Waty Hutajulu, S.Kom, M.MSI
Diktat Kuliah Teknik Kompilasi
Pada bahasa bebas konteks, batasannya bertambah lagi dengan ruas kiri haruslah tepat
satu simbol variabel. Misalnya:
B →CDeFg
D →BcDe
Bahasa bebas konteks menjadi dasar dalam pembentukan suatu parser/ proses analisis
sintaksis. Bagian sintaks dalam suatu kompilator kebanyakan didefinisikan dalam tata bahasa
bebas konteks (context free grammar), yang dideskripsikan secara formai dengan notasi BNF
(Backus Naur Form atau Backus Normal Form).
Pada bahasa regular, batasannya bertambah dengan ruas kanan maksimal memiliki
sebuah simbol variabel yang terletak di paling kanan. Artinya bisa memiliki simbol terminal
saja dalam jumlah tidak dibatasi, tetapi bila terdapat simbol variabel, maka simbol variabel
tersebut hanya berjumlah 1 (satu) dan terletak di posisi paling kanan. Misal:
A →e
A→efg
A→efgH
C→D
Bisa kita lihat, batasannya makin bertambah dari Tipe 0 ke Tipe 3. Berdasarkan
keterkaitannya antar tipe bahasa tersebut, bisa pula dilihat secara sederhana pada gambar 3.1.
*Perhatikan:
Aturan produksi seperti
ε→Abd
bukan aturan produksi yang legal, karena simbol ε tidak boleh berada pada ruas kiri
Aturan produksi yang ruas kirinya hanya memuat simbol terminal saja, seperti
a →bd
ab→bd
bukan aturan produksi yang legal (untuk unrestricted grammar sekalipun), karena ruas
kiri harus juga memuat simbol yang bisa di-turunkan, sementara contoh di atas ruas kiri hanya
terdiri dari sim-bol terminal saja padahal sesuai definisinya simbol terminal sudah tidak bisa
diturunkan lagi, berbeda dengan aturan produksi seperti
aA →bd
contoh:
Terdapat aturan produksi:
E →T | T+E | T-E,T→α
Notasi BNF:
E ::= <T> \ <T> + <E> | <T> - <E>, T ::= a
Biasanya diagram sintaks digunakan untuk raemperoleh gambaran dari suatu notasi
BNF. Misalkan notasi BNF untuk block:
<block> ::= t_BEGIN <statement> t_SEMICOL <statement>
t_END
diagram sintaksnya pada gambar 3.4.
BAB 4
ANALISIS LEKSIKAL
Maka Nomor dan Suhu akan dikenali sebagai besaran leksik berupa nama variabel yang
terdapat pada program tersebut. Sedang-kan VAR, INTEGER, dan REAL merupakan keyword
pada program tersebut. Nama bisa berupa nama program, procedure, var, type, constant.
Keyword pada Pascal misalnya:
Bertha Meyke Waty Hutajulu, S.Kom, M.MSI
Diktat Kuliah Teknik Kompilasi
2. Nilai konstanta
Adalah suatu konstanta yang terdapat pada program. Bisa berupa konstanta integer, real,
boolean, character, string, dan sebagainya. Misalkan saja dalam Pascal pada suatu prograni
terdapat statement:
N:= R + 5 * 10
kata:= katal + 'makan'
A := 0.333
Selesai := TRUE
Maka 5, 10, 'makan', 0.333, TRUE, termasuk besaran lekdik berupa nilai konstan yang
terdapat pada program sumber tersebut.
3. Operator dan delimiter
Operator misalnya operator aritmatika ( +,-,*/, ) operator logika (<, =, >).
Delimiter berguna sebagai pemisah/pembatas, misalnya: ( ) , ;, :, (kurung buka/tutup,
koma, titik, titik koma, titik dua), white-space. White-space adalah pemisah yang diabaikan di
program, seperti spasi, karakter enter (Carriage Return), ganti baris (Line Feed), akhir file
(End OfFile). Contoh beberapa delimiter:
^ , .
: ( |
.. ) ]
[ :
Pada contoh di atas, besaran leksik (token)-nya adalah simbol yang bernilai
TROGRAM', 'Coba', 'VAR', 'A', 'INTEGER', ':', '+', '2', '.', ';', ':=', 'BEGIN', 'END'.
Misalkan sebuah bahasa memiliki himpunan simbol terminal/token:
'<', '>', '=', '<=', '>=', '<>'
Bertha Meyke Waty Hutajulu, S.Kom, M.MSI
Diktat Kuliah Teknik Kompilasi
BAB 5
ANALISIS SINTAKSIS
Biasanya persoalan yang diberikan berkaitan dengan pohon penurunan, adalah untuk
mencari penurunan yang hasilnya menuju kepada suatu untai yang diteiitukan. Dalam hal ini,
perlu untuk melakukan percobaan pemilihan aturan produksi yaag bisa menuju ke soiusi.
Misalkan sebuah tata bahasa bebas konteks memiliki aturan produksi:
S → aB | bA
A →a \ aS | bAA
B → b \ bS | aBB
Bertha Meyke Waty Hutajulu, S.Kom, M.MSI
Diktat Kuliah Teknik Kompilasi
Pohon penurunan untuk memperoleh 'aaabbaobba' bisa dilihat pada gambar 5.4.
BAB 6
ANALISIS SEMANTIK
KODE ANTARA, DAN
PEMBANGKITAN KODE
Untuk dapat menjalankan fungsinya tersebut dengan baik, semantic analyzer seringkali
menggunakan tabel simbol (akan diterangkan lebih lanjut secara lebih jelas). Pemeriksaan bisa
dilakukan pada tabel identifier, tabel display, dan tabel blok, misal pada fteld link.
Pengecekan yang dilakukan oleh analisis semantik adalah :
a) Memeriksa keberlakuan nama-nama meliputi pemeriksaan :
- Duplikasi
Pada tahap ini dilakukan pengecekan apakah sebuah nama terjadi pendefinisian lebih
dari dua kali. Pengecekan dilaku-kan pada bagian pengelola blok.
- Terdefinisi
Melakukan pengecakan apakah sebuah nama yang dipakai pada tubuh program sudah
terdefinisi atau belum. Pengecekan dilakukan pada semua tempat kecuali blok.
b) Memeriksa tipe
Melakukan pemeriksaan terhadap kesesuaian tipe dalam statement-statement yang ada.
Misalkan bila terdapat suatu operasi, diperiksa tipe operan. Contohnya bila ekspresi yang
mengikuti instruksi IF berarti tipenya boolean, akan diperiksa tipe identifter dan tipe
ekspresi. Bila ada operasi antara dua operan maka tipe operan pertama harus bisa
dioperasikan dengan operan kedua.
Analisa Semantik sering juga digabungkan pada pembangkitan kode antara yang
menghasilkan outpui intermediate code. Inter mediate code ini nantinya akan digunakan pada
proses kompilasi berikutnya (pada bagian back end compilation)
Kerugian dari kode antara, dengan rnelakukan dua kali translasi, maka butuh waktu yang
relatif lebih lama. Selanjutnya akan dibahas dua macam kode antara yaitu Notasi Postfix dan
N-Tuple.
diubah ke Postfix:
10 a
11 1
12 : =
13 a
14 5
15 <
16 26. ( menunjuk label1)
17 BZ
18 a
19 a
20 1
Bertha Meyke Waty Hutajulu, S.Kom, M.MSI
Diktat Kuliah Teknik Kompilasi
21 -*-
22 : =
23
24 13 ( menunjuk Iabel2)
25 BR
Perlu diperhatikan presedensi dari operator, yaitu operator perkalian dan pembagian
mendapat prioritas dibanding penjumlahan dan pengurangan
Contoh lain:
IF x > y THEN
x : = a-b
ELSE
x:= a+b
Kekurangan dari notasi tripel adalah sulit pada saat melakukan optimasi, maka
dikembangkan Indirect Triples yang memiliki dua list (senarai), yaitu list instruksi dan list
eksekusi. List instruksi berisi notasi tripel, sedang list eksekusi mengatur urutan eksekusinya.
Misal terdapat urutan instruksi:
A : = B+C*D/E
F := C*D
List Instruksi:
1. *, C, D
2. /, (1) , E
3. +, B, (2)
4. : = , A, (3)
5. : = ,F, (1)
List Eksekusi
1. 1
2. 2
3. 3
4. 4
5. 1
6. 5
BAB 7
CARA PENANGANAN KESALAHAN
\
• Panic mode
Maju terus dan mengabaikan teks sampai bertemu delimiter (misal ';') Contoh pada
potongan program:
IF A = l
Kondisi:= true;
Pada teks di atas kesalahan karena tidak ada instruksi THEN, kompilator akan maju
terus/skip sampai bertemu titik koma
• Unit deletion
Menghapus keseluruhan suatu unit sintaktik (misal: <block>, <exp>, <statement> dan
sebagainya). Efeknya mirip dengan panic mode tetapi unit deletion memelihara
kebenaran sintaksis dari source program dan mempermudah untuk melakukan error
repairing lebih lanjut.
4. Context Sensitive recovery
Berkaitan dengan semantik, misal bila terdapat variabel yang belum dideklarasikan
(undefined variabel) maka diasumsikan tipenya berdasar kemunculannya. Misal pada
potongan program terdapat instruksi:
sementara di awal program yariabel B belum dideklarasikan, maka berdasar
kemunculannya diasumsikan variabel B bertipe string.
Contoh lain:
Procedure Increment;
begin
X:=X+1;
end;
end;
Terdapat kelebihan simbol end, yang menyebabkan kesalahan, maka kompilator akan
membuangnya.
3. Context Sensitive repair
Perbaikan dilakukan pada kesalahan:
• Tipe identifier. Diatasi dengan membangkitkan identifier dummy, misalnya
pada potongan program:
VAR A:string;
begin
A:=0;
end;
Kompilator akan memperbaiki kesalahan dengan membangkitkan
identifter baru, misal B yang bertipe integer.
• Tipe konstanta
Diatasi dengan membangkitkan konstanta baru dengan tipe yang tepat
Bertha Meyke Waty Hutajulu, S.Kom, M.MSI
Diktat Kuliah Teknik Kompilasi
BAB 8
TEKNIK OPTIMASI
8.2 OPTIMASILOKAL
Optimasi lokal adalah optimasi yang dilakukan hanya pada suatu blok dari source
code, cara-caranya:
1. Folding
Mengganti konstanta atau ekspresi yang bisa dievaluasi pada saat compile time dengan
nilai komputasinya. Misalkan instruksi:
A := 2+3+B
bisa diganti menjadi
A:=5+B
di situ 5 menggantikan ekspresi 2+3
2. Redundant-Subexpression Eliminalion
Sebuah ekspresi yang sudah pernah dikomputasi, digunakan lagi hasilnya, ketimbang
melakukan komputasi ularig. Misalkan ter-dapat urutan instruksi:
A := B + C
X := Y + B + C
kemunculan kedua dari B+C yang redundan bisa diatasi dengan memanfaatkan hasil
Bertha Meyke Waty Hutajulu, S.Kom, M.MSI
Diktat Kuliah Teknik Kompilasi
komputasinya yang sudah ada pada ins'-truksi sebelumnya. Perhatikan, hal ini bisa
dilakukan dengan catatan belum ada perubahan pada variabel yang berkaitan.
3. Optimisasi dalam sebuah iterasi
• Loop Unrolling: Menggantikan suatu loop dengan menulis statemerit dalam laop
beberapa kali. Hal ini didasari pemikir-an, sebuah iterasi pada implementasi level
rendah akan me-meriukan operasi:
=> Inisialisasi/pemberian nilai awal pada variabel loop.
Dilakukan sekali pada saat permulaan eksekusi loop
=> Pengetesan, apakah variabel loop telab. mencapai kondisi terminasi
=> Adjustment yaitu penambahan atau pengurangan nilai pada variabel loop deagan
jumlah tertentu
=> Operasi yang terjadi pada tubuh perulangan (loop body)
Dalam setiap perulangan akan terjadi pengetesan dan adjustment yang
menambah waktu eksekusi. Contoh pada instruksi:
FOR I:= l to 2 DO
A (I):=0;
Terdapat instruksi untuk inisialisasi I menjadi 1. Serta operasi penambahan
nilai/increment 1 dan pengecekan nilai variabel I pada setiap perulangan. Sehingga
untuk perulangan saja memerlukau lima instruksi, ditambah dengan ins-truksi
assignment pada tubuh perulangan menjadi tujuh instruksi.
Dapat dioptimasikan menjadi:
A[l]:=0;
A[2]:=0,-
Yang hanya memerlukan dua instruksi assignment saja. Untuk menentukan
optimasi ini perlu dilihat perbandingan kasusnya dengan tanpa melakukan optimasi.
• Freguency Reduction: Pemindahan statement ke tempat yang lebih jarang dieksekusi.
Contoh:
FOR I:=l TO 10 DO
BEGIN
X:=5;
A:=A+I;
END;
Kita lihat tidak terjadi perubahan/manipulasi pada variabel X di dalam iterasi,
karena itu kita bisa mengeluarkan instruksi tersebut ke luar iterasi, menjadi:
Bertha Meyke Waty Hutajulu, S.Kom, M.MSI
Diktat Kuliah Teknik Kompilasi
X:=5;
FOR I:=l TO 10 DO
BEGIN
A:=A+I
END;
4. Strength Reduction
Penggantian suatu operasi dengan jenis operasi lain yang lebih cepat dieksekusi. Misalkan
pada beberapa komputer operasi per-kalian memerlukan waktu lebih banyak untuk
dieksekusi dari-pada operasi penjumlahan, maka penghematan waktu bisa di-lakukan
dengan mengganti operasi perkalian tertentu dengan penjumlahan. Contoh lain, instruksi:
A:=A+1;
dapatdigantikan dengan:
INC(A);
• Unused variabel : Variabel yang tidak pernah dipakai dalam program. Contohnya:
Program Pendek;
var a,b:integer;
begin
a:=5;
end,-
Variabel b tidak pernah dipergunakan dalam program, sehingga bisa dihilangkan.
• Variabel yang dipakai tanpa nilai awal. Contohnya:
Program Awal;
var a,b: integer;
begin
a:=5;
a:=a+b;
end;
Kita lihat variabel b digunakan tanpa memiliki nilai awal/ belum di-assign.
b. Bagi kompilator:
• Meningkatkan efisiensi eksekusi program
• Menghilangkan useless code/kode yang tidak terpakai
Bertha Meyke Waty Hutajulu, S.Kom, M.MSI
Diktat Kuliah Teknik Kompilasi
BAB 9
TABEL INFORMASI
dalam program. Konsepnya sama dengan pembentukan tree, misal: main program = level
0. Field ini digunakan pada run time untuk mengetahui current activation record, dan
variabel yang bisa diakses.
dimana
objek = (konstant, variable, prosedur, fungsi)
types = (notipe,int,reals,booleans,chars,arrays,records)
• No urut elemen
• Karakter-karakter yang merupakan konstanta
Contoh implementasi tabel string:
TabString: array [l..tabmax] of string