Anda di halaman 1dari 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 pesan)pesan kesalahan (error messages) Proses kompilasi dikelompokkan ke dalam dua kelompok besar : bahasa sasaran

1. analisa : program sumber dipecah)pecah dan dibentuk men$adi bentuk antara (intermediate 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 pembangkit kode antara pengoptimal kode pembangkit kode bahasa sasaran penanganan kesalahan

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 pener emah 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 (scanner) id$ :< id2 . id( = &' penganalisa sintaks (parser ) pembangkit kode antara temp$ :< inttoreal(&') temp2 :< id( = temp$ temp( :< id2 . temp2 id$ :< temp(

pengoptimal kode :< id$ id2 id( penganalisa semantik pembangkit kode :< id$ id2 id( . = inttoreal &' -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:

. = &' temp$ :< id( = &')' id$ :< id2 . temp$

MO*+ id(# ,2 M-.+ /&')'# ,2 MO*+ id2# ,$ 011+ ,2# ,$ MO*+ ,$# id$

yang berarti mengkopikan isi register : ke register 3 -euntungan -erugian b$ : ,ksekusi cepat : angat sulit dipela$ari manusia

&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 -ekurangan : ,ksekusi cepat, masih bisa dipela$ari daripada bahasa mesin, 2ile hasil sangat kecil. : 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 d$ : ,ksekusi lambat

&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 / ob ect code / ob ect 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. diproses pada saat yang bersamaan$ Pada interpreter, program tidak harus dianalisis seluruhnya dulu, tapi bersamaan dengan $alannya program. -euntungan : mudah bagi user, debuging cepat ource code dan inputan data user

-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 -euntungan : debugging lebih lambat : 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 3. &nalisa emantik 4. Pembangkit -ode &ntara :. 'ode optimi5ation D. +b$ect code generation Tahap sintesa (back-end) Tahap analisa (front-end)

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 2 3 4 : D C 1. 7oken identifier position 2. 7oken simbol assignment :< 3. 7oken identifier initial 4. 7oken tanda plus . :. 7oken identifier rate D. 7oken tanda perkalian = 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 0al ini tergantung dari algoritma untuk menulis kompiler itu dan kompiler pengkompilasi.

a$ Ke*epatan dan 8aktu proses kompilasi 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.

Anda mungkin juga menyukai