Upload
jhon-izzy-fadel
View
547
Download
6
Embed Size (px)
Citation preview
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 ANALISISFungsi Analisis biasa disebut front-end.Tugasnya melakukan dekomposisi program sumber menjadi bagian-bagian dasarnya.
• FUNGSI SINTESISFungsi 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
Sebagai contoh
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 NILAI REPRESENTASI
VARIABEL 1
KONSTANTA 2
LABEL 3
OPERATOR PENAMBAHAN 4
DSB…..
Contoh Kasus
PERIKSA : IF A > B THEN X=Y;
TOKEN NILAI
PERIKSA 3
: 26
IF 20
A 1
> 15
B 1
THEN 21
X 1
= 10
Y 1
; 27
Bisa ditranslasikan oleh Lexical Analyzer ke dalam deretan token berikut :
Scanner memberikan token ke Syntax Analyzer
Token-token ini bisa berbentuk pasangan item.
Item Pertama memberikan alamat atau lokasi dari token pada tabel simbol.
Item Kedua adalah representasi internal dari token.
Semua token akan direpresentasikan dengan informasi yang panjangnya tetap, suatu address (atau pointer) dan sebuah integer.
Syntax Analyzer lebih kompleks dari
scanner
Fungsinya adalah untuk menentukan
bagaimana dekomposisinya.
Proses ini dianalogikan dengan
penentuan struktur dari suatu kalimat
dalam bahasa Inggris.
misalkan : kita ingin mengidentifikasikan
klas seperti subject, predikat, verb, noun,
dan adjective.
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.
Contoh
Analisis suatu Statement :
(A+B) * (C+D)
Bisa menghasilkan kelas sintaksis <factor>, <term>, dan <expression>,
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) tambahkan A dengan B simpan di T1
(+, C, D, T2) tambahkan C dengan D simpan di T2
(*, T1, T2, T3) tambahkan T1 dengan T2 simpan di T3
Bentuk antara yang digunakan tergantung
bagaimana pemrosesan yang dilakukan
selama tahapan sintesis.
Suatu ekspresi infix bisa saja diubah ke
bentuk antara dalam notasi Posfix.
Notasi Infix (A+B)*(C+D)
Diubah ke Notasi Posfix 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 AADD B
STO T1LDA CADD DSTO T2LDA T1MUL T2STO T3
LDA AADD B
STO T1LDA CADD DMUL T1STO T2
Interaksi antara Scanner dan Parser
Scanner menghasilkan suatu token untuk diproses
oleh parser.
Parser akan memanggil scanner bila token berikutnya
diperlukan.
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 :
Ketersediaan memori
Ukuran dan kecepatan kompilator
Ukuran dan kecepatan program objek
Fasilitas debugging yang diperlukan
Teknik deteksi dan pemulihan kesalahan yang diinginkan
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.