MODEL KOMPILATOR

‡ Pengembangan kompilator untuk sebuah
bahasa merupakan pekerjaan yang kompleks

‡ Kompleksitas kompilator bisa dikurangi bila
perancang bahasa pemrograman mempertimbangkan bermacam-macam faktor perancangan.

TUGAS POKOK KOMPILATOR
‡ FUNGSI ANALISIS Fungsi Analisis biasa disebut front-end. Tugasnya melakukan dekomposisi program sumber menjadi bagian-bagian dasarnya. ‡ FUNGSI SINTESIS Fungsi sintesis biasa disebut back-end. Tugasnya melakukan pembangkitan dan optimasi program objek.

MODEL KOMPILATOR

`

SCANNER Memecah program sumber menjadi besaran leksik/token

`

PARSER Memeriksa kebenaran dan urutan kemuncukan token

`

ANALISIS SEMANTIK melakukan analisis semantik, biasanya dalam realisasi akan digabungkan dengan intermediate code generator (bagian yang berfungsi membangkitkan kode antara).

`

CODE GENERATOR membangkitkan kode abjek.

`

CODE OPTIMIZER memperkecil hasil dan mempercepat proses.

`

TABEL SIMBOL menyimpan semua informasi yang berhubungan dengan proses kompilasi.

Program sumber merupakan deretan simbol-simbol yang bisa berupa huruf, digit, atau simbol tertentu seperti +, -, dan,. Suatu program sumber memuat konstruksi bahasa yang mendasar seperti nama variabel, label, konstanta, keyword dan operator

Source program berikut merupakan masukan bagi lexical analyzer atau scanner. tujuannya untuk memisahkan teks yang masuk kedalam token seperti konstanta, nama variabel, keyword (seperti DO, IF dan THEN) dan Operator. Pada intinya, Lexical analyzer melakukan analisis sintaksis level rendah.

Untuk alasan efisiensi, setiap kelas dari token diberikan suatu angka representasi internal yang unik.
NAMA TOKEN VARIABEL KONSTANTA LABEL OPERATOR PENAMBAHAN DSB .. NILAI REPRESENTASI 1 2 3 4

Contoh Kasus
PERIKSA : IF A > B THEN X=Y;
Bisa itra slasi a le exical
TOKEN PERIKSA : IF A > B THEN X = Y ;

al zer e ala

ereta t e
NILAI 3 26 20 1 15 1 21 1 10 1 27

eri t :

€ Scanner

memberikan token ke Synta Analyzer € Token-token ini bisa berbentuk pasangan item.
€ Item

Pertama memberikan alamat atau lokasi dari token pada tabel simbol. Kedua adalah representasi internal dari token.

€ Item

€ Semua

token akan direpresentasikan dengan informasi yang panjangnya tetap, suatu address (atau pointer) dan sebuah integer.

y

Synta Analyzer lebih kompleks dari scanner

y

Fungsinya adalah untuk menentukan bagaimana dekomposisinya.

y

Proses ini dianalogikan dengan penentuan struktur dari suatu kalimat dalam bahasa Inggris. misalkan : kita ingin mengidentifikasikan klas seperti subject, predikat, verb, noun, dan adjective.

y

Dalam analisis sintaksis yang menjadi perhatian kita adalah pengelompokkan token ke dalam kelas sintaksis. seperti : ekspression, statement, dan procedure Parser memberikan suatu pohon sintaks, yang mana daunnya adalah token dan setiap elemen non-daun merepresentasikan suatu kelas sintaksis.

y

Contoh
Analisis suatu Statement :

(A+B) * (C+D)
Bisa menghasilkan kelas sintaksis <factor>, <term>, dan <e pression>, Kita lihat pohon sintaks nya

`

Dari pohon sintaks diatas, semantic analyzer harus menentukan aksi apa yang ditentukan oleh operator aritmatika penjumlahan dan pengurangan Saat parser mengenali simbol seperti ³+´ atau ³-´, akan memanggil rutin semantik yang menspesifikasikan aksi yang akan dilakukan.

`

`

Analisis semantik bisa menghasilkan intermediate form dari program sumber.

`

Misalkan untuk ekspresi (A+B)*(C+D), kode antaranya bisa kuadrupel berikut ( +, A, B, T1) (+, C, D, T2) (*, T1, T2, T3)
tambahkan A dengan B simpan di T1 tambahkan C dengan D simpan di T2 tambahkan T1 dengan T2 simpan di T3

`

Bentuk antara yang digunakan tergantung bagaimana pemrosesan yang dilakukan selama tahapan sintesis.

`

Suatu ekspresi infi bisa saja diubah ke bentuk antara dalam notasi Posfi .

` `

Notasi Infi (A+B)*(C+D) Diubah ke Notasi Posfi menjadi
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 kasus kuadrupel
AB+CD+* Dengan menggunakan bahasa assembly format 1-alamat dapat kita lihat sintaksnya berikut ini

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

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

Interaksi antara Scanner dan Parser
y Scanner menghasilkan suatu token untuk diproses oleh

parser. Parser akan memanggil scanner bila token berikutnya diperlukan.
y Scanner menghasilan semua token yang berhubungan

dengan source program sebelum meneruskan ke parser. Pada kasus ini scanner telah memeriksa keseluruhan source program, disebut sperate pass

Faktor yang mempengaruhi jumlah pass yang akan dilakukan tergantung pada :
y Ketersediaan memori y Ukuran dan kecepatan kompilator y Ukuran dan kecepatan program objek y Fasilitas debugging yang diperlukan y Teknik deteksi dan pemulihan kesalahan yang diinginkan y Jumlah orang dan waktu yang diperlukan untuk

menyelesaikan proyek penulisan kompilator.

Kesulitan yang sebenarnya pada pengembangan kompilator adalah pada tahapan analisis semantik, pembangkitan dan optimasi kode.