You are on page 1of 14

PENGANTAR TEKNIK KOMPILASI

Bahasa pemrograman berdasarkan pada tingkat ketergantungan mesin :


1. Bahasa mesin
2. Bahasa assembly
3. Bahasa tingkat tinggi (user oriented) : Pascal, Basic
4. Bahasa yang problem oriented : !"

Translator
#engubah source code men$adi target%ob$ect code.
1. &ssembler : source code adalah bahasa assembly.
2. 'ompiler : source code adalah bahasa tingkat tinggi (misal Pascal).
3. (nterpreter : tidak membangkitkan ob$ect code, hasil translasi dalam bentuk internal
(misal Basic, "(P).

Proses Kompilasi
ource 'ode )* 'ompiler )* +b$ect 'ode )* ,ksekusi -omputer (./ata) )* 0asil
ource code dan data diproses pada saat yang berbeda.
'ompile time : saat source code diubah ke ob$ect code.
1un time : saat ob$ect code dieksekusi.

Proses Interpretasi
ource 'ode )* (nterpreter (./ata) )* 0asil
ource code dan data diproses pada saat yang sama.

Model Kompilator
ebuah kompilator memiliki dua 2ungsi :
1. 3ungsi &nalis : dekomposisi program sumber men$adi bagian)bagian dasarnya.
ource 'ode )* "e4ical &naly5er : canner )* yntactic &naly5er : Parser )* emantic
&naly5er : (ntermediate 'ode 6enerator
2. 3ungsi intesis : pembangkitan dan optimasi kode.
'ode 6enerator )* 'ode +ptimi5er )* +b$ect 'ode
-eterangan :
canner : memecah program sumber men$adi besaran leksik%token.
Parser : memeriksa urutan kemunculan token.
&nalisis emantik : biasanya digabungkan dengan intermediate code generator (bagian
yang ber2ungsi membangkitkan kode antara).
'ode 6enerator : membangkitkan kode ob$ek.
'ode +ptimi5er : memperkecil hasil dan mempercepat proses.
7abel imbol : menyimpan semua in2ormasi yang berhubungan dengan kompilasi.

#odel -ompilator seperti di atas disebut Multi Pass Compiler / Separate Compiler yaitu
canner dan Parser beker$a terpisah. canner menghasilkan semua token, baru diproses
oleh Parser.
Berbeda dengan One Pass Compiler dimana canner baru beker$a menghasilkan tiap
token setelah mendapatkan perintah dari Parser.
7oken : besaran pembangun bahasa%representasi dari besaran leksik.

Mutu Kompilator
1. -ecepatan dan 8aktu proses kompilasi.
7ergantung pada :
a. Penulisan algoritma kompilator, yaitu algoritma yang digunakan untuk menuliskan
program kompilator tersebut.
b. -ompilator pengkompilasi, sebuah program khusus yang menghasilkan kompilator
tersebut.
2. #utu program ob$ek : ukuran dan kecepatan eksekusi dari program ob$ek.
7ergantung pada :
3ungsi translasi yang digunakan (cara untuk melakukan perubahan dari source code ke
ob$ect code).
3. (ntegrated ,n9ironment, yaitu 2asilitas)2asilitas terintegrasi yang dimiliki oleh
kompilator tersebut. #isalnya untuk melakukan editing, debugging, maupun testing.

Pembuatan Kompilator
/apat dilakukan dengan :
1. Bahasa mesin, kesulitan sangat tinggi.
2. Bahasa assembly, biasa digunakan sebagai tahap a8al.
-euntungan : ob$ect code berukuran kecil.
-erugian : memerlukan usaha yang besar.
3. Bahasa tingkat tinggi lain pada mesin yang sama.
-euntungan : pemrograman mudah.
-erugian : program hasil.
4. Bahasa tingkat tinggi yang sama pada mesin yang berbeda.
:. Bootstrap (diperkenalkan oleh ;irth).
(de : kita bisa membangun sesuatu yang besar dengan dimulai dari bagian intinya.
KOMPILASI, Catatan ke! " Penda#uluan
/e2inisi : -ompilator (compiler) adalah sebuah program yang membaca suatu program
yang ditulis dalam suatu bahasa sumber (source language) dan menter$emah)
kannya ke dalam suatu bahasa sasaran (target language).
Proses kompilasi dapat digambarkan melalui sebuah kotak hitam (black box) berikut :
program sumber kompilator bahasa sasaran
pesan)pesan kesalahan
(error messages)
Proses kompilasi dikelompokkan ke dalam dua kelompok besar :
1. analisa : program sumber dipecah)pecah dan dibentuk men$adi bentuk antara (inter-
mediate representation)
2. sintesa : membangun program sasaran yang diinginkan dari bentuk antara
3ase)2ase proses sebuah kompilasi adalah sebagai berikut :
program sumber
penganalisa leksikal
(scanner)
penganalisa sintaks
(parser)
pengelola tabel simbol penganalisa semantik penanganan kesalahan
pembangkit
kode antara
pengoptimal kode
pembangkit kode
bahasa sasaran
Program sumber merupakan rangkaian karakter. Berikut ini hal)hal yang dilakukan oleh
setiap 2ase pada proses kompilasi terhadap program sumber tersebut :
1. Penganalisa leksikal : membaca program sumber, karakter demi karakter. ederetan
(satu atau lebih) karakter dikelompokkan men$adi satu kesatuan
mengacu kepada pola kesatuan kelompok karakter (token) yang
ditentukan dalam bahasa sumber. -elompok karakter yang
membentuk sebuah token dinamakan lexeme untuk token
tersebut. etiap token yang dihasilkan disimpan di dalam tabel
simbol. ederetan karakter yang tidak mengikuti pola token
akan dilaporkan sebagai token tak dikenal (unidentified token).
'ontoh : #isalnya pola token untuk identifier ( adalah : ( < huruf(hurufangka)=.
"e4eme ab2c dikenali sebagai token sementara le4eme 2abc atau abC tidak
dikenal.
2. Penganalisa sintaks : memeriksa kesesuaian pola deretan token dengan aturan sintaks
yang ditentukan dalam bahasa sumber. ederetan token yang
tidak mengikuti aturan sintaks akan dilaporkan sebagai
kesalahan sintaks (sintax error). ecara logika deretan token
yang bersesuaian dengan sintaks tertentu akan dinyatakan
sebagai pohon parsing (parse tree).
'ontoh : #isalnya sintaks untuk ekspresi if-then , adalah : , if " then, " (+&,
( < huruf(hurufangka)=, + ><*><*<, & ?1...@. ,kspresi
if a2 > 9 then adalah ekspresi sesuai sintaksA sementara ekspresi if a2 > 9 do
atau if then a2B > 9 tidak sesuai. Perhatikan bah8a contoh ekspresi terakhir
$uga mengandung token yang tidak dikenal.
3. Penganalisa semantik : memeriksa token dan ekspresi dari batasan)batasan yang
ditetapkan. Batasan)batasan tersebut misalnya :
a. pan$ang maksimum token identifier adalah B karakter,
b. pan$ang maksimum ekspresi tunggal adalah B? karakter,
c. nilai bilangan bulat adalah )32CDB s%d 32CDC,
d. operasi aritmatika harus melibatkan operan)operan yang
bertipe sama.
4. Pembangkit kode antara : membangkitkan kode antara (intermediate code) berdasar)
kan pohon parsing. Pohon parse selan$utnya diter$emahkan
oleh suatu pener$emah yang dinamakan peneremah
berdasarkan sintak (s!ntax-directed translator). 0asil
pener$emahan ini biasanya merupakan perintah tiga alamat
(three-address code) yang merupakan representasi program
untuk suatu mesin abstrak. Perintah tiga alamat bisa
berbentuk "uadruples (op# arg$# arg2# result), tripels (op#
arg$# arg2). ,kspresi dengan satu argumen dinyatakan
dengan menetapkan arg2 dengan ) (strip, dash)
:. Pengoptimal kode : melakukan optimasi (penghematan space dan %aktu komputasi),
$ika mungkin, terhadap kode antara.
D. Pembangkit kode : membangkitkan kode dalam bahasa target tertentu (misalnya
bahasa mesin).
Berikut ini akan diberikan sebuah contoh skema pener$emahan suatu ekspresi dalam
bahasa sumber, yaitu : position :< initial . rate = &'.
position :< initial . rate = &'
penganalisa leksikal pembangkit
(scanner) kode antara

id$ :< id2 . id( = &' temp$ :< inttoreal(&')
temp2 :< id( = temp$
temp( :< id2 . temp2
penganalisa sintaks id$ :< temp(
(parser )
pengoptimal kode
: <
id$ .
id2 =
id( &' temp$ :< id( = &')'
id$ :< id2 . temp$
penganalisa semantik
pembangkit kode
MO*+ id(# ,2
:< M-.+ /&')'# ,2
id$ . MO*+ id2# ,$
id2 = 011+ ,2# ,$
id( inttoreal MO*+ ,$# id$
&'
-eterangan :
) id adalah token untuk identifier. 7iga lexeme untuk token ini adalah position, initial, dan
rate.
) penganalisa semantik secara logika membangkitkan pohon parse.
) penganalisa semantik mendeteksi mismatch t!pe. Perbaikan dilakukan dengan memang)
gil procedure inttoreal yang mengkon9ersi integer ke real.
) Euadruples dari : temp2 :< id( = temp$ adalah (=#id(#temp$#temp2), id$ :< temp( adalah
(assign#temp(#-#id$), temp$ :< inttoreal(&') adalah (inttoreal#&'#-#temp$).
) pembangkit kode dalam contoh ini menghasilkan kode dalam bahasa mesin.
!$% &a#asa Pemro'raman
Bahasa pemrograman adalah bahasa yang men$adi sarana manusia untuk berkomunikasi dengan
komputer. Pikiran manusia yang tidak terstruktur harus dibuat terstruktur agar bisa berkomunikasi dengan
komputer. -omputer memerlukan kepastian dan logika yang benar untuk dapat melakukan suatu instruksi
tertentu. Fntuk itu diperlukan algoritma yg baik dan benar.
Penggolongan bahasa pemrograman berdasarkan tingkat ketergantungannya dengan mesin :
a$ &a#asa Mesin
Bahasa mesin adalah bahasa yang berisi kode)kode mesin yang hanya dapat diinterpretasikan
langsung oleh mesin komputer. Bahasa mesin sering $uga disebut nati9e code (sangat tergantung pada
mesin tertentu). Bahasa ini merupakan bahasa le9el terendah dan berupa kode biner ? dan 1. ekumpulan
instruksi dalam bahasa mesin dapat membentuk microcode (semacam prosedur dalam bahasa mesin).
'ontoh:
untuk mesin (B#%3C?
???11?????11?1?1 < 1B3:
yang berarti mengkopikan isi register : ke register 3
-euntungan : ,ksekusi cepat
-erugian : angat sulit dipela$ari manusia
b$ &a#asa Assembl( )Mnemoni* Code+
#erupakan bentuk simbolik dari bahasa mesin, dianggap sebagai bahasa pemrograman yang pertama
kali berbentuk string dan lebih mudah dimengerti manusia. etiap kode bahasa mesin memiliki simbol
sendiri dalam bahasa assembly.
#isalnya &// untuk pen$umlahan, #F" untuk perkalian, FB untuk pengurangan, dan lain)lain.
ekumpulan kode ) kode bahasa assembly dapat membentuk makroinstruksi. Bahasa assembly $uga
memiliki program pendebug)nya, tidak seperti bahasa mesin.
#isalnya: 7urbo &ssembler dan debug pada /+.
&ssembler akan mencocokkan token simbol dari a8al s%d akhir, kemudian dikodekan men$adi bahasa
mesin.
-elebihan : ,ksekusi cepat, masih bisa dipela$ari daripada bahasa mesin, 2ile hasil sangat kecil.
-ekurangan : 7etap sulit dipela$ari, program sangat pan$ang.
*$ &a#asa Tin'kat Tin''i ),i'# Le-el Lan'ua'e+ . user oriented
Bahasa ini lebih dekat dengan bahasa manusia. Bahasa ini $uga memberikan banyak sekali 2asilitas
kemudahan pembuatan program, misalnya: 9ariabel, tipe data, konstanta, struktur kontrol, loop, 2ungsi,
prosedur dan lain)lain. 'ontoh: Pascal, Basic, '.., dan Ga9a. #endukung in2ormation hiding, enkapsulasi,
dan abstract data type.
Bahasa 7ingkat tinggi memiliki generasi, misalnya generasi ke)3 (Pascal, '%'..) dan generasi ke)4
(/elphi, HB, HB.I,7, Hisual 3o4pro)
-euntungan : ) #udah dipela$ari
) #endekati permasalahan yang akan dipecahkan
) -ode program pendek
-erugian : ,ksekusi lambat
d$ &a#asa (an' berorientasi pada masala# spesi/ik )specific problem oriented+$
Bahasa ini adalah bahasa yang digunakan langsung untuk memecahkan suatu masalah tertentu.
'ontoh : !" untuk aplikasi database, '+6+ untuk aplikasi teknik sipil, 1ege4 untuk mencocokkan pola
pada string tertentu, #at"ab untuk matematika, dll.
Bahasa problem oriented kadang digolongkan ke dalam bahasa tingkat tinggi.
!$0 Translator
7ranslator (pener$emah) melakukan pengubahan source code / source program (program sumber)
ke dalam target code / obect code / obect program (program ob$ek).
ource code ditulis dalam bahasa sumber, ob$ect code berupa bahasa pemrograman lain % bahasa
mesin pada suatu komputer.
Gadi pener$emah membaca suatu program yang ditulis dalam bahasa sumber dan mener$emahkan
bahasa sumber ke dalam suatu bahasa lain.
aat melakukan proses pener$emahan, pener$emah akan melaporkan adanya keanehan%kesalahan
yang mungkin diketemukan.
6ambar 1.1. &lur ker$a 7ranslator
&da beberapa macam translator, yaitu :
a$ Assembler
ource code adalah bahasa assembly, ob$ect code adalah bahasa mesin
contoh : 7urbo &ssembler, #acro &ssembler
6ambar 1.2. &lur ker$a &ssembler
b$ Interpreter
(nput berupa source code yaitu bahasa scripting seperti P0P, Basic, Perl, Ga9ascript, &P, Ga9a
bytecode, Basic, #atlab, #atematica, 1uby.
(nterpreter tidak menghasilkan ob$ect code. 0anya menghasilkan translasi internal. (nput dapat
berasal dari source code maupun dari inputan program dari user. ource code dan inputan data user
diproses pada saat yang bersamaan$
Pada interpreter, program tidak harus dianalisis seluruhnya dulu, tapi bersamaan dengan $alannya
program.
-euntungan : mudah bagi user, debuging cepat
-ekurangan : eksekusi program lambat, tidak langsung men$adi program executable.
6ambar 1.3. &lur ker$a (ntepreter
*$ Kompilator )Compiler+
(stilah compiler muncul karena dulu ada program yang menggunakan subrutin)subrutin atau pustaka)
pustaka untuk keperluan yang sangat khusus yang dikumpulkan men$adi satu sehingga diistilahkan
compiled)
(nput berupa source code program seperti Pascal, ', '... +b$ect code adalah bahasa assembly.
ource code dan data input diproses pada saat yang berbeda.
Compile time adalah saat pengubahan dari source code men$adi ob$ect code. ,untime adalah saat
eksekusi ob$ect code dan mungkin menerima input data dari user. +utput : bahasa assembly. -emudian
oleh linker dihasilkan 2ile ,J,.
-ekurangan : debugging lebih lambat
-euntungan : eksekusi program lebih cepat, menghasilkan 2ile executable yang berdiri sendiri.
6ambar 1.4. &lur ker$a -ompilator
!$1 Ta#ap2ta#ap Kompilasi
-ompilator (compiler) adalah sebuah program yang membaca suatu program
yang ditulis dalam suatu bahasa sumber (source language) dan menter$emah)kannya ke
dalam suatu bahasa sasaran (target language).
Proses kompilasi dikelompokan ke dalam dua kelompok besar:
1. 7ahap &nalisa (+ront-end)
#enganalisis source code dan memecahnya men$adi bagian)bagian dasarnya. #enghasilkan kode
le9el menengah dari source code input yang ada.
2. 7ahap intesa (Back-end)
#embangun program sasaran yang diinginkan dari bentuk antara.
7ahap)tahap yang harus dilalui pada saat mengkompilasi program, yaitu:
1. &nalisa "eksikal
2. &nalisa intaks Tahap analisa (front-end)
3. &nalisa emantik
4. Pembangkit -ode &ntara
:. 'ode optimi5ation Tahap sintesa (back-end)
D. +b$ect code generation
6ambar 1.:. kema blok kompilator
-eterangan :
- 0nalisa .eksikal 2scanner3
Ber2ungsi memecah teks program sumber men$adi bagian)bagian kecil yang mempunyai satu arti
yang disebut token, seperti : konstanta, nama 9ariabel, key8ord, operator.
- 0nalisa Sintaks2parser3
Ber2ungsi mengambil program sumber (sudah dalam bentuk barisan token) dan menentukan
kedudukan masing)masing token berdasarkan aturan sintaksnya dan memeriksa kebenaran dan urutan
kemunculan token.
- 0nalisa Semantik
Ber2ungsi menentukan 9aliditas semantiks%keberartian program sumber. Biasanya bagian ini digabung
dengan Pembangkit kode antara 2intermediate code generator3)
- Pembangkit 4ode 0ntara
Ber2ungsi membangkitkan kode antara.
- Code optimation
Ber2ungsi menge2isienkan kode antara yang dibentuk.
- Code generator
Ber2ungsi membangkitkan kode program target dalam bahasa target yang eki9alen dengan bahasa
sumber .
- S!mbol table management
Ber2ungsi mengelola tabel simbol selama proses kompilasi. 7abel simbol adalah struktur data yang
memuat record untuk tiap identi2ier dengan atribut)atribut identi2ier itu.
- Penangan 4esalahan 25rror handler3
Ber2ungsi menangani kesalahan yang berlangsung selama proses kompilasi.
Conto# "
pernyataan pemberian nilai (assignment) :
position 67 initial 8 rate 9 &'
Le3i*al anal(sis
#engelompokkan pernyataan tersebut men$adi token)token sebagai berikut :
1 1. 7oken identifier position
2 2. 7oken simbol assignment :<
3 3. 7oken identifier initial
4 4. 7oken tanda plus .
: :. 7oken identifier rate
D D. 7oken tanda perkalian =
C C. 7oken konstanta angka D?
-etika identi2ier pada program sumber ditemukan le4ical analy5er, identi2ier dimasukkan ke tabel simbol.
position :< initial . rate = D?
diubah men$adi
id1 :< id2 . id3 = D?
S(nta3 anal(sis
#emparsing atau membentuk pohon sintaks pernyataan, yaitu :
?
Semanti* anal(sis
#emeriksa kebenaran arti program sumber, mengumpulkan in2ormasi tipe bagi tahap berikutnya.
7ahap ini menggunakan pohon sintaks tahap s!ntax anal!sis untuk identi2ikasi operator dan operand suatu
ekspresi dan kalimat. -omponen penting analisis semantik adalah pemeriksaan tipe, memeriksa operator
yang harus mempunyai operand yang dii$inkan oleh spesi2ikasi bahasa sumber.
-arena misal adanya pernyataan deklarasi di a8al :
var
position, initial, rate : real
#aka konstanta D? dikon9ersi men$adi real dengan 2ungsi inttoreal)14+ men$adi konstanta bilangan real.
Intermediate Code Generator
(ntermediate code adalah representasi perantara antara bentuk bahasa tingkat tinggi dengan bahasa
mesin. -arena pada le9el berikutnya masih akan dilakukan optimasi, maka perlu dibuat representasi yang
memudahkan optimasi, yang bukan merupakan bahasa mesin.
temp1 := inttoreal(60)
temp2 := id3 * temp1
temp3 := id2 + temp2
id1 := temp3
Code Optimi5ation
7ahap code optimi5ation proses identi2ikasi dan membuang operasi)operasi yang tidak perlu dari
intermediate code generation untuk penyederhanaan sehingga nantinya kode mesin hasil men$adi lebih
cepat. -ode)kode tersebut dioptimasi men$adi :
Temp1 := id3 * 60.0
Id1 := id1 + temp1
Code Generator
7ahap akhir kompilator adalah pembangkitan kode target%ob$ek dan biasanya kode mesin atau
assembly yang dapat direlokasi. Pembangkitan kode sangat bergantung pada mesin yang dipakai, misal :
MO! id3, "2
M#$! %60.0, "2
MO! id2, "1
&''! "2, "1
MO! "1, id1
!$6 Prepro*essor
Preprocessor adalah suatu program khusus menanggulangi ter$adinya beberapa modul yang
terpisah saat melakukan penulisan bahasa sumber men$adi beberapa 2ile ke dalam suatu program baru.
uatu Preprocessor menghasilkan suatu input bagi suatu kompilator. 0al ini mungkin dilakukan oleh suatu
kompilator antara lain:
Pemrosesan #akro
#akro yang merupakan kependekan dari suatu bagian program yang lebih pan$ang memungkinkan
penulis program untuk memperpendek program yang ditulisnya. /alam hal ini perlu dilakukan dua
hal :
a. #ende2inisikan makro yang digunakan.
Parameter yang dide2inisikan pada makro disebut dengan parameter 2ormal.
b. #elakukan pemanggilan makro yang mungkin $uga mengandung beberapa parameter.
edangkan parameter yang digunakan untuk memanggil makro disebut dengan paramater
actual.
Pengikutsertaan berkas (3ile (nclusion)
uatu Preprocessor memungkinkan diikutsertakannya beberapa berkas program yang telah ditulis
sebelumnya ke dalam program yang sedang ditulis. Biasanya berkas program yang ditulis
sebelumnya merupakan segmen program yang sekali digunakan, banyak man2aatnya dan sering
ter$adi sudah merupakan bagian dari sistem bahasa yang digunakan.
#isalnya pada bahasa ', isi dari berkas global.h dapat diikutsertakan dalam program yang sedang
ditulis dengan menggunakan perintah Kinclude global.h.
Preprocessor 1asional
Preprocessor ini memberikan kemampuan baru dari suatu bahasa dengan 2asilitas pengendalian
aliran (2lo8)o2)control) atau struktur data yang lebih baik. #isalnya dengan menambahkan
kemampuan perintah 8hile, i2)then)else pada bahasa yang pada mulanya tidak mempunyai 2asilitas
tersebut. 0al ini biasanya dilakukan dengan menggunakan makro yang sudah ada dalam bahasa
tersebut.
Perluasan Bahasa
Preprocessor ini memungkinkan suatu bahasa untuk berinteraksi dengan sistem atau bahasa lainnya.
#isalnya pada bahasa ' yang ditambahkan kemampuannya untk dapat mengakses data dalam suatu
database. Fntuk itu praprosesor memungkinkan menggunakan tanda KK yang menyatakan bah8a
bagian ini bukan merupakan bagian dari bahasa ', tetapi berhubungan dengan sistem suatu paket
database lain yang sudah baku. /engan demikian bagian ini akan diter$emahkan kedalam
pemanggilan procedure untuk melakukan akses database.
!$7 Mutu Compiler
a$ Ke*epatan dan 8aktu proses kompilasi
0al ini tergantung dari algoritma untuk menulis kompiler itu dan kompiler pengkompilasi.
b$ Mutu pro'ram ob9ek
/ilihat dari ukuran dan kecepatan eksekusi program.
c. Integrated Development Environtment )I:E+
3asilitas)2asilitas terintegrasi yang dimiliki oleh kompiler. #isalnya untuk debugging, editing, dan
testing. 'ontoh : bandingkan antara compiler Pascal dan 'lipper.
!$; &ootstrap
#etode &ootstrap dikembangkan oleh Iikolaus ;rith, penulis bahasa Pascal. #etode Bootstrap
adalah pembuatan kompilator secara bertingkat.
6ambar 1.D. #etode Bootstrap
#etode ini menganggap bah8a ' dibangun dengan &ssembly, B dibangun dengan ', dan &
dibangun dengan B. Gadi compiler dapat dibangan secara keseluruhannya dengan bahasa)bahasa
sebelumnya. #etode Bootstrap berarti menulis suatu bahasa dengan kompiler 9ersi sebelumnya.

You might also like