Model Kompilator

Post on 05-Jul-2015

548 views 6 download

Transcript of Model Kompilator

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.