Anda di halaman 1dari 24

PROSES KOMPILASI

Desain Kompiler

Dr.Ir. ELVIAWATY MUISA ZAMZAMI, MT, MM


Tahap Utama Pada Kompilasi

 Proses kompilasi dari suatu kompilator pada


dasarnya terbagi dalam dua tahap utama:
Tahap analisis
Tahap sintesis
 Tahap analisis dan sintesis pada umumnya
tidak dapat secara jelas dipisahkan, karena
adanya keterkaitan yang sangat erat antara
kedua tahap tersebut.

1/13/2020
Desain Kompiler
8:18 PM
Tahap Analisis dan Tahap
Sintesis
 Tahap analisis
Program yang ditulis dalam bahasa
sumber dibagi dan dipecah kedalam
beberapa bagian yang kemudian akan
direpresentasikan kedalam suatu bentuk
antara dari program sumber.
 Tahap sintesis
Program sasaran dibentuk berdasarkan
representasi antara yang dihasilkan
pada tahap analisis.
1/13/2020
Desain Kompiler
8:18 PM
Proses Pada Tahap Analisis
dan Tahap Sintesis
 Tahap analisis dan tahap sintesis mempunyai
hubungan ke symbol table yang berisi semua simbol
yang digunakan dalam program sumber.
 Tahap Analisis
 Analisis leksikal
 Analisis sintaktik
 Analisis semantik
 Tahap Sintesis
 Optimasi kode
 Pembangkitan kode
1/13/2020
Desain Kompiler
8:18 PM
Praprosesor

 Untuk membentuk suatu target program,


selain suatu kompilator juga dibutuhkan
beberapa program lainnya.
Misalnya suatu program sumber dapat ditulis
dalam beberapa modul yang terpisah dan
disimpan dalam beberapa file yang terpisah.
 Untuk menanggulangi hal tsb digunakan
suatu program khusus yang disebut
praprosesor untuk mengumpulkan modul
yang saling lepas kedalam suatu program
baru.

1/13/2020
Desain Kompiler
8:18 PM
Jenis Praprosesor

 Pemrosesan makro
 Pengikutsertaan berkas
 Praprosesor rasional
 Perluasan bahasa

Input dari suatu kompilator dapat merupakan


hasil dari satu atau lebih praprosesor, dan
output kompilator juga masih harus
memerlukan proses lebih lanjut sebelum
dapat dijalankan dalam bentuk bahasa
mesin.
1/13/2020
Desain Kompiler
8:18 PM
Pemrosesan Makro

 Makro: kependekan dari suatu bagian


program yang lebih panjang,
memungkinkan penulis program untuk
memperpendek program yang ditulisnya.
 Dilakukan 2 hal:
 Mendefinisikan makro yang akan digunakan.
 Pemanggilan makro yang mungkin juga mengandung
beberapa parameter.
(Pada makro adalah parameter formal, dan pada pemanggil
adalah parameter aktual).

1/13/2020
Desain Kompiler
8:18 PM
Pengikutsertaan Berkas
(File Inclusion)
 Suatu praprosesor yg memungkinkan
diikutsertakannya beberapa berkas program yg
telah ditulis sebelumnya kedalam program yg
sedang ditulis.
 Biasanya berkas program yg ditulis sebelumnya
merupakan segmen program yg sering sekali
digunakan, banyak manfaatnya, dan sering terjadi
sudah merupakan bagian dari sistem bahasa yang
digunakan.
 Contoh: Pada bahasa C isi dari berkas global.h
dapat diikutsertakan dalam perintah yg sedang
ditulis dengan menggunakan perintah #include
global.h.
1/13/2020
Desain Kompiler
8:18 PM
Praprosesor Rasional

 Praprosesor ini memberikan kemampuan baru


dari suatu bahasa dengan fasilitas pengendalian
aliran (flow-of-control) atau struktur data yang
lebih baik.
 Misalnya dengan menambahkan kemampuan
perintah while,if-then-else pada bahasa yang
mulanya tidak mempunyai fasilitas tersebut. Hal
ini biasanya dilakukan dengan menggunakan
makro yang sudah ada dalam bahasa tersebut.

1/13/2020
Desain Kompiler
8:18 PM
Perluasan Bahasa
 Praprosesor ini memungkinkan suatu bahasa untuk
berinteraksi dengan sistem atau bahasa lainnya.
 Misalnya pada bahasa C yang ditambahkan
kemampuannya untuk dapat mengakses data
dalam suatu basis data. Untuk itu praprosesor
memungkin-kan digunakannya tanda ## yg
menyatakan bahwa bagian ini bukan merupakan
bagian dari bahasa C, tetapi berhubungan
dengan sistem suatu paket basis data lain yang
sudah baku. Dengan demikian bagian ini akan
diterjemahkan kedalam pemanggilan procedure
untuk melakukan akses basis data.
1/13/2020
Desain Kompiler
8:18 PM
Hasil Kompilasi

 Beberapa kompilator menghasilkan kode dalam


bahasa Assembly yg kemudian akan dibaca oleh
assembler untuk proses selanjutnya.
 Beberapa kompilator lainnya sudah melakukan
tugas dan fungsi assembler, sehingga kompilator
tsb akan menghasilkan suatu kode mesin yg
masih dapat dialihletakkan (relocatable machine
code), yang kemudian akan diproses oleh suatu
editor penghubung (link-editor/loader).

1/13/2020
Desain Kompiler
8:18 PM
Kode Assembly

 Kode Assembly : suatu versi lain dari suatu kode


bahasa mesin, dimana digunakan nama-nama
sebagai pengganti kode biner untuk operasi,
demikian pula penggunaan nama untuk lokasi
dari memori.

1/13/2020
Desain Kompiler
8:18 PM
Assembler
 Assembler dalam bentuk yg paling sederhana melakukan
pembacaan input dua kali (two-pass assembler).
 Pembacaan pertama, setiap identifier yg menunjukkan
suatu lokasi tempat penyimpanan yg baru disimpan dalam
suatu tabel simbol assembler yg berbeda dengan tabel
simbol kompilator.
 Pembacaan kedua, menerjemahkan setiap kode operasi
kedalam notasi biner dari bahasa mesin dan
menerjemahkan setiap identifier yg menyatakan suatu
tempat dengan alamat dari identifier tsb dalam tabel
simbol. Hasil dari pembacaan kedua biasanya dalam kode
mesin yg dapat dialihtempatkan.

1/13/2020
Desain Kompiler
8:18 PM
Editor Penghubung (Link-
editor)
 Umumnya melakukan loading dan link-editing.
 Loading: pengambilan kode mesin yg dapat
dialihletakkan, kemudian alamat-alamat yg
dapat dialihletakkan diganti dan kemudian
perintah beserta data yg diperoleh diletakkan
pada memori pada tempat yg seharusnya.
 Link-editing: memungkinkan terbentuknya satu
program dari beberapa berkas yg masing-masing
merupakan kode mesin yg dapat dialihletakkan.
Berkas-berkas ini mungkin merupakan hasil dari
beberapa proses kompilasi yg berbeda, yg salah
satunya mungkin merupakan rutin yg telah
disediakan oleh sistem operasi dan dapat
Desain Kompiler
1/13/2020
8:18 PM

digunakan oleh program yg membutuhkannya.


Editor Penghubung (Link-
editor)
 Umumnya melakukan loading dan link-editing.
 Loading: pengambilan kode mesin yg dapat
dialihletakkan, kemudian alamat-alamat yg
dapat dialihletakkan diganti dan kemudian
perintah beserta data yg diperoleh diletakkan
pada memori pada tempat yg seharusnya.
 Link-editing: memungkinkan terbentuknya satu
program dari beberapa berkas yg masing-masing
merupakan kode mesin yg dapat dialihletakkan.
Berkas-berkas ini mungkin merupakan hasil dari
beberapa proses kompilasi yg berbeda, yg salah
satunya mungkin merupakan rutin yg telah
disediakan oleh sistem operasi dan dapat
Desain Kompiler
1/13/2020
8:18 PM

digunakan oleh program yg membutuhkannya.


Tahap Kompilasi
INPUT

LEXICAL ANALYSIS

SYNTAX ANALYSIS

SEMANTIC ANALYSIS
SYMBOL ERROR
TABLE DETECTION

INTERMEDIATE
CODE GENERATOR

CODE OPTIMIZER

CODE GENERATOR

OUTPUT

1/13/2020
Desain Kompiler
8:18 PM
Analisis Leksikal

 Analisis Leksikal atau analisis linier atau


pembacaan sekilas (scanning).
 Membaca/scanning program sumber dari kiri ke
kanan dan dikelompokkan kedalam apa yang
disebut token.
 Token: barisan dari karakter yang dalam suau
kesauan yang mempunyai suatu arti tersendiri.
 Juga dilakukan kegiatan untuk menghilangkan
informasi-informasi yang berlebihan dari program
sumber. Misalnya spasi dan komentar.

1/13/2020
Desain Kompiler
8:18 PM
Waktu Untuk Analisis Leksikal

Waktu yang dibutuhkan pada analisis leksikal


paling besar dan merupakan tahap paling
rumit karena:
 Membaca satu demi satu karakter dari kiri
ke kanan dan dicocokkan pada symbol
table.
 Mengelompokkan menjadi token yang
dimengerti kompilator.

1/13/2020
Desain Kompiler
8:18 PM
Contoh Proses Analisis
Leksikal
 Contoh 1:
100 LET A=50
menjadi 100LETA=50

 Contoh 2:
100 FOR I=0 TO 50
110 LET A(I)=0 : REM INIT ARRAY
120 NEXT I
menjadi
100FORI=0TO50\110LETA(I)=0\120NEXTI
 Tujuan: menghemat memori.
1/13/2020
Desain Kompiler
8:18 PM
Analisis Sintaktik
 Analisis sintaktik atau analisis hirarki atau tahap
parse tree.
 Karakter atau token yang diperoleh pada
analisis leksikal disusun dan dikelompokkan
dalam suatu hirarki tertentu yang secara
keseluruhan mempunyai arti tertentu.
 Sintaks selanjutnya disebut sebagai struktur dari
program atau grammar dari source program.
 Contoh: post:=init+nilai*bil
2 1

1/13/2020
Desain Kompiler
8:18 PM
Analisis Semantik
 Pengecekan pada struktur akhir yang telah
diperoleh dan diperiksa kesesuaiannya dengan
komponen program yang ada.
 Hasil yang diperoleh dari pengkodean dapat
dinyatakan lebih tepat dan teliti.
 Contoh: penggunaan single precision dan
double precision.

1/13/2020
Desain Kompiler
8:18 PM
Intermediate Code
Generator
 Membentuk kode menengah pada proses
kompilasi.
 Pada tahap ini dikenal dengan sistem three
address code yang terdiri dari instruksi-instruksi
yang berurutan dimana instruksi tersebut
biasanya mempunyai 3 operand.
 Contoh:
temp1:=inttoreal(60)
temp2:=id3*temp1

1/13/2020
Desain Kompiler
8:18 PM
Code Optimizer

 Memperbaiki kode yang dihasilkan pada tahap


intermediate untuk memperoleh kode yang
lebih efisien.
 Tujuan: mempercepat proses
 Tidak semua kompilator menggunakan tahap
optimasi kode.
 Contoh:
temp1:=id3*60.0

1/13/2020
Desain Kompiler
8:18 PM
Code Generator

 Menghasilkan object code dari source


program.
 Kode dapat berupa kode mesin atau kode
assembly.

1/13/2020
Desain Kompiler
8:18 PM

Anda mungkin juga menyukai