Anda di halaman 1dari 6

TEKNIK KOMPILASI

Tony Darmanto,ST / Smt V – S1 – TI / STMIK WIDYA DHARMA/ Hal 1

1. PENDAHULUAN

Arti Kata Teknik Kompilasi


v Teknik adalah suatu Metode atau Cara
v Kompilasi adalah suatu Proses mengabungkan serta menterjemahkan sesuatu (source
program) menjadi bentuk lain.

Bahasa Pemrograman
Bahasa pemrograman berdasarkan tingkat ketergantungannya dengan mesin bisa meliputi jenis
bahasa berikut ini.

• Bahasa Assembly
Bahasa Assembly merupakan bentuk simbolik dari bahasa mesin. Setiap kode operasi
memiliki kode simbolik, misalnya ADD untuk penjumlahan dan MUL untuk perkalian.
Sekumpulan instruksi dalam bahasa assembly dapat dibentuk menjadi makroinstruksi. Pada
bahsa assembly tersedia alat bantu untuk diagnostik atau debug yang tidak terdapat pada
bahasa mesin. Contoh : Turbo Assembler, Macro Assembler, DEBUG dan Turbo Debugger.

• Bahasa Tingkat Tinggi (User Oriented)


Disebut bahasa tingkat tinggi karena lebih dekat dengan bahas manusia. Bahasa ini
memberikan fasilitas yang lebih banyak, kontrol program yang terstruktur, block dan prosedur.
Contohnya Pascal, Basic dan lain-lain.

• Bahasa Problem Oriented


Bahasa ini memungkinkan penyelesaian untuk suatu masalah atau aplikasi yang spesifik.
Contohnya : SQL (Stuctured Query Language) untuk aplikasi database, COGO untuk aplikasi
teknik sipil. Bahasa Problem Oriented kadang dimasukkan sebagai bahasa tingkat tinggi.

Keuntungan bahasa tingkat tinggi dibandingkan bahasa tingkat rendah :

Translator
Suatu program dimana mengambil input sebuah program yang ditulis pada suatu bahasa program
(source language ke bahasa lain (object or target language).

Ada beberapa macam translator :


1. Assembler
Source code adalah bahasa Assembly, object code adalah bahasa mesin. Contohnya : Turbo
Assembler dan Macro Assembler.

2. Compiler
Source code adalah bahasa tingkat tinggi, object code adalah bahasa mesin atau bahasa
assembly. Source code dan data diproses pada saat yang berbeda. Contoh Turbo Pascal.
TEKNIK KOMPILASI
Tony Darmanto,ST / Smt V – S1 – TI / STMIK WIDYA DHARMA/ Hal 2

3. Interpreter
Interpreter tidak membangkitkan object code, hasil translasi hanya dalam bentuk internal.
Contoh interpreter : Basic / GW-Basic, LISP, SmallTalk. Source code dan data diproses pada
saat yang sama.

Model Kompilator
Pengembangan kompilator untuk sebuah bahasa merupakan pekerjaan yang kompleks.
Kompleksitas kompilator bisa dikurangi bila perancang bahasa pemrograman
mempertimbangkan bermacam-macam faktor perancangan. Sebuah kompilator umumnya
memiliki dua tugas pokok sebagai berikut :

• Fungsi Analisis
Fungsi Analisis biasa disebut sebagai Front End. Tugasnya melakukan dekomposisi
program sumber menjadi bagian-bagian dasarnya.
• Fungsi Sintesis
Fungsi Sintesis biasa disebut sebagai Back End. Tugasnya melakukan pembangkitan dan
optimasi program objek.

Program sumber merupakan rangkaian karakter. Berikut ini hal-hal yang dilakukan oleh setiap
fase pada proses kompilasi terhadap program sumber tersebut :
• Penganalisa Leksikal
Membaca program sumber, karakter demi karakter. Sederetan (satu atau lebih) karakter
dikelompokkan menjadi satu kesatuan mengacu kepada pola kesatuan kelompok karakter
(token) yang ditentukan dalam bahasa sumber. Kelompok karakter yang membentuk sebuah
token dinamakan lexeme untuk token tersebut. Setiap token yang dihasilkan disimpan di
dalam tabel simbol. Sederetan karakter yang tidak mengikuti pola token akan dilaporkan
sebagai token tak dikenal (unidentified token).
Contoh : Misalnya pola token untuk identifier I adalah : I = huruf(hurufangka)*. Lexeme
ab2c dikenali sebagai token sementara lexeme 2abc atau abC tidak dikenal.
TEKNIK KOMPILASI
Tony Darmanto,ST / Smt V – S1 – TI / STMIK WIDYA DHARMA/ Hal 3

• Penganalisa Sintaks
Memeriksa kesesuaian pola deretan token dengan aturan sintaks yang ditentukan dalam
bahasa sumber. Sederetan token yang tidak mengikuti aturan sintaks akan dilaporkan sebagai
kesalahan sintaks (sintax error). Secara logika deretan token yang bersesuaian dengan
sintaks tertentu akan dinyatakan sebagai pohon parsing (parse tree).
Contoh : Misalnya sintaks untuk ekspresi if-then E adalah : E → if L then, L → IOA, I =
huruf(hurufangka)*, O → < |= |> |<= |>=, A → 0 |1 |... |9. Ekspresi if a2 < 9 then adalah
ekspresi sesuai sintaks; sementara ekspresi if a2 < 9 do atau if then a2B < 9 tidak sesuai.
Perhatikan bahwa contoh ekspresi terakhir juga mengandung token yang tidak dikenal.
• Penganalisa Semantik
Memeriksa token dan ekspresi dari batasan-batasan yang ditetapkan. Batasan-batasan
tersebut misalnya :
a. panjang maksimum token identifier adalah 8 karakter,
b. panjang maksimum ekspresi tunggal adalah 80 karakter,
c. nilai bilangan bulat adalah -32768 s/d 32767,
d. operasi aritmatika harus melibatkan operan-operan yang bertipe sama.
• Pembangkit Kode Antara
Membangkitkan kode antara (intermediate code) berdasarkan pohon parsing. Pohon parse
selanjutnya diterjemahkan oleh suatu penerjemah yang dinamakan penerjemah berdasarkan
sintak (syntax-directed translator). Hasil penerjemahan ini biasanya merupakan perintah tiga
alamat (three-address code) yang merupakan representasi program untuk suatu mesin
abstrak. Perintah tiga alamat bisa berbentuk quadruples (op, arg1, arg2, result), tripels (op,
arg1, arg2). Ekspresi dengan satu argumen dinyatakan dengan menetapkan arg2 dengan -
(strip, dash)
• Pengoptimal Kode
Melakukan optimasi (penghematan space dan waktu komputasi), jika mungkin, terhadap
kode antara.
• Pembangkit Kode
Membangkitkan kode dalam bahasa target tertentu (misalnya bahasa mesin).

Berikut ini akan diberikan sebuah contoh skema penerjemahan suatu ekspresi dalam bahasa
sumber, yaitu : position := initial + rate * 60.
TEKNIK KOMPILASI
Tony Darmanto,ST / Smt V – S1 – TI / STMIK WIDYA DHARMA/ Hal 4

Lexical analyzer harus memproses blank dan komentar, meskipun keduanya bukan merupakan
bagian executable.

Scanner memberikan token ke syntax analyzer. Token-token bisa berbentuk pasangan item. Item
pertama memberikan alamat dari token pada tabel simbol. Item kedua adalah representasi
internal dari token.

Syntax analyzer lebih kompleks dari scanner. Fungsinya adalah untuk menentukan bagaimana
dekomposisinya. Dalam analisis sintaksis dilakukan pengelompokan token ke dalam kelas
sintaksis, seperti expression, statement dan procedure.

Syntax Analyzer / Parser memberikan suatu pohon sintaks, yang mana daunnya adalah token
dan setiap elemen non-daun merepresentasikan suatu kelas sintaksis.
Sekumpulan aturan yang disebut grammar dipergunakan untuk mendefinisikan/ menentukan
struktur dari program sumber.

Semantic analyzer adalah untuk menentukan ‘maksud’ dari suatu program sumber. Analisis
Semantik merupakan proses yang unik pada suatu kompilator. Semantic analyzer harus
menentukan aksi apa yang ditentukan oleh operator aritmatika.
Rutin ini akan memeriksa apakah operan telah dideklarasikan.

Analisis semantik bisa menghasilkan intermediate form dari program sumber. Misalkan ekspresi
(A+B)*(C+D), kode antaranya bisa berupa kuadrupel berikut :
(+, A, B, T1)
(+, C, D, T2)
(*, T1, T2, T3)
Suatu ekspresi infix bisa saja diubah ke bentuk antara dalam notasi Polish, maka ekspresi infix
(A+B)*(C+D) akan dikonversi ke notasi Polish-sufix : AB+CD+*

Keluaran dari semantic analyzer diberikan ke code generator. Pada tahap ini bentuk antara dari
program sumber, biasanya ditranslasikan ke dalam bahasa assembly atau bahasa mesin. Contoh
translasi dari kuadrapel sebelumnya bisa menghasilkan instruksi bahasa assembly format1-
alamat berikut :

LDA A
ADD B
STO T1
LDA C
ADD D
STO T2
LDA T1
MUL T2
STO T3

Keluaran dari code generator diberikan ke code optimizer. Proses ini bertujuan untuk
menghasilkan program objek yang lebih efisien seperti mengevaluasi ekspresi konstan,
pemakaian properti operator tertentu (asosiatif, komutatis dan distributif) dan deteksi
subekspresi. Contoh :
LDA A
ADD B
STO T1
LDA C
ADD D
MUL T1
STO T2
TEKNIK KOMPILASI
Tony Darmanto,ST / Smt V – S1 – TI / STMIK WIDYA DHARMA/ Hal 5

Optimasi global lebih lanjut bisa dilakukan. Optimasi ini termasuk optimasasi machine-
independent. Alokasi register secara optimal merupakan salah satu contoh optimasasi yang
machine-dependent. Suatu code optimizer yang baik bisa menghasilkan kode yang lebih baik
daripada pemrogram assembler yang berpengalaman.

Pada beberapa kompilator, fase-fase kompilasi bisa dikombinasika. Interaksi antara scanner dan
parser terdapat dua kemungkinan sebagai berikut :

Beberapa kompilator membuat pass sesedikit mungkin. Faktor yang mempengaruhi jumlah pass
yang akan dilakukan tergantung pada :
Mutu Kompilator
Mutu sebuah kompilator tergantung dari beberapa faktor sebagai berikut :

• Mutu Program Objek


Mutu suatu program objek (hasil kompilasi) ditentukan oleh ukuran dan kecepatan eksekusi
dari program objek.
• Integrated Environment
Integrated environment merupakan fasilitas-fasilitas terintegrasi yang dimiliki oleh kompilator
tersebut. Biasa disebut juga sebagai IDE (Integrated Development Environment). Misal Turbo
Pasca bisa untuk kompilasi dan debug dalam satu lingkungan pemrograman.

Pembuatan Kompilator
Bahasa Mesin
• Sangat sukar dan sangat sedikit kemungkinannya untuk membuat compiler dengan bahasa ini,
karena manusia susah mempelajari bahasa mesin,
• Sangat tergantung pada mesin,
• Bahasa mesin kemungkinan digunakan pada saat pembuatan Assembler.
Assembly
• Hasil dari program mempunyai ukuran yang relatif kecil
• Sulit dimengerti karena statement/ perintahnya singkat-singkat, butuh usaha yang besar untuk
membuat compiler dengan bahasa ini
• Fasilitas yang dimiliki terbatas

Bahasa Tingkat Tinggi (High Level Language)


• Lebih mudah dipelajari
• Fasilitas yang dimiliki lebih baik (banyak)
• Memiliki ukuran yang relatif besar, misal membuat compiler pascal dengan menggunakan
bahasa C
• Untuk mesin yang berbeda perlu dikembangkan tahapan-tahapan tambahan. Misal membuat
compiler C pada DOS berdasarkan compiler C pada Unix

BootStrap
• Untuk membangun sesuatu yang besar, dibangun/dibuat dulu
bagian intinya (Niklaus Wirth-saat membuat Pascal Compiler)
• P0 dibuat dengan Assembly, P1 dibuat dari P0, dan P2 dibuat dari
P1, jadi compiler untuk bahasa P dapat dibuat tidak harus dengan
menggunakan assembly secara keseluruhan.
TEKNIK KOMPILASI
Tony Darmanto,ST / Smt V – S1 – TI / STMIK WIDYA DHARMA/ Hal 6

Contoh Source Program ke dalam Kode Mesin: