• Tidak ada hasil yang ditemukan

2. KOMPONEN KOMPILATOR - Teknik Kompilasi.zip

N/A
N/A
Protected

Academic year: 2018

Membagikan "2. KOMPONEN KOMPILATOR - Teknik Kompilasi.zip"

Copied!
12
0
0

Teks penuh

(1)

2. KOMPONEN KOMPILATOR

Secara umum kompilator terdiri atas 8 komponen utama, yaitu: 1. Penganalisis Leksikal (scanner)

2. Penganalisis Sintaks (parser)

3. Penganalisis Semantik (semantic analyzer)

4. Pembangkit kode antara (intermediate code generator) 5. Pengoptimal kode (code optimizer)

6. Pembangkit kode akhir (final code generator) 7. Pengelola tabel simbol (symbol table handler) 8. Penanganan kesalahan error (error handler)

Komponen utama dan alur proses pada sebuah kompilator dapat digambarkan sbb.:

Gambar 2.1. Komponen Utama dan Alur Proses Kompilator

1. Penganalisis Leksikal

Penganalisis leksikal (lexical analyzer) sering juga disebut sebagai penganalisis linier atau scanner atau pembacaan sekilas (scanning).

(2)

• Penganalisis leksikal berfungsi memecah teks program sumber menjadi bagian-bagian terkecil yang mempunyai satu arti yang disebut token. Contoh : konstanta, nama variabel, keyword, operator, dan lain-lain.

• Penganalisis leksikal bekerja dengan cara membaca program sumber setiap karakter demi karakter kemudian dikelompokkan dan dicocokkan dengan pola token yang ada.

• Mengacu pada spesifikasi leksikal bahasa sumber, sederetan karakter dikelompokkan menjadi satu kesatuan mengacu kepada pola kesatuan kelompok karakter yang disebut token yang ditentukan dalam bahasa sumber.

• Sederetan karakter bahasa sumber yang membentuk sebuah token dinamakan lexeme untuk token tersebut.

o Token adalah satuan yang terkecil dari bahasa sumber yang

mengandung arti, misalnya: konstanta, nama variabel (identifier), kata kunci (DO, IF, THEN dan lain sebagainya) dan juga operator-operator yang digunakan dalam bahasa pemrograman.

Contoh : Misalnya pola token untuk identifier I adalah :

I = huruf(huruf|angka)*

Jadi: lexeme ab2c dikenali sebagai token lexeme 2abc atau abC tidak dikenal.

• Kesalahan-kesalahan yang mungkin timbul pada tahap ini adalah adanya suatu rangkaian karakter yang tidak memenuhi spesifikasi leksikal. Sederetan karakter yang tidak mengikuti pola token akan dilaporkan sebagai token tak dikenal (unidentified token).

o Pada kebanyakan bahasa pemrograman, kesalahan semacam ini

dilaporkan sebagai "token tak dikenal".

• Selain itu, pada proses ini juga dilakukan pula proses penghilangan kolom-kolom atau ruang-ruang kosong atau baris-baris komentar yang tidak mempunyai arti atau tidak dilaksanakan di dalam program.

• Hasil dari proses leksikal ini berupa tabel token yang kemudian disimpan dalam tabel simbol.

Contoh 1 : statemen kondisional (conditional statement) berikut

IF A > B THEN X = Y;

(3)

Tabel 2.1. Tabel Token

token nomor token keterangan jenis token

IF

Kata baku kondisional Nama variabel Tanda akhir kalimat

Contoh 2 : statemen pemberian nilai (assignment statement) berikut X := A + B

melalui analisis leksikal disusun tabel token sebagai berikut

Tabel 2.2. Tabel Token untuk assignment statement

token nomor token keterangan jenis token

X

• Penganalisis sintaks (sintax analyzer) berfungsi mengambil program sumber (sudah dalam bentuk barisan token) dan menentukan kedudukan masing-masing token berdasarkan aturan sintaksnya.

→ memeriksa kebenaran dan urutan kemunculan token

• Penganalisis sintaks memeriksa kesesuaian pola deretan token dengan aturan sintaks yang ditentukan dalam bahasa sumber.

(4)

• Pada tahap analisis sintaks ini token yang diperoleh dari analisis leksikal disusun dan dikelompokkan dalam suatu hirarki tertentu yang mempunyai arti yang disebut sebagai pohon sintaks atau pohon parsing.

• Oleh karena itu analisis sintaks sering juga disebut sebagai analisis hirarki.

• Pohon sintaks yang diperoleh dari proses ini sering disebut juga sebagai intermediate program.

Contoh : Misalnya sintaks untuk ekspresi if-then 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.

Pohon Sintak

• Pada pohon sintaks terdapat simpul-simpul atau nodal yang disebut sebagai nodal akar, nodal daun, dan nodal dalam.

• Nodal akar mencerminkan pokok pikiran atau pokok permasalahan yang disampaikan oleh sebuah kalimat atau statemen.

• Nodal daun (nodal ujung) dari pohon sintaks tersebut merupakan suatu token, sedangkan nodal lain yang bukan merupakan daun (yaitu nodal dalam atau internal node) menyatakan salah satu tipe dari kelompok sintaks seperti ekspresi, perintah, procedure, dan lain lain.

¾ Hasil yang diperoleh dalam proses analisis sintaktik ini adalah intermediate program yang berupa pohon sintaks, seperti contoh berikut:

Contoh 3: statemen pemberian (assignment statement) X := A + B

(5)

Gambar 2.2. Pohon Sintaks

Contoh 4. Pohon sintaks dari statemen position := initial + rate * 60 adalah sbb.:

Gambar 2.3. Pohon Sintaks

Contoh 5. Pohon sintaks dari statemen id1 := id2 + id3 * 60

adalah sbb.:

Gambar 2.4. Pohon Sintaks

Assignment statement

Identifier

X := Expression Expression

A

Expression B

(6)

Penganalisis Semantik

Pada proses analisis semantik dilakukan pengecekan terhadap struktur akhir yang telah diperoleh dari analisis sebelumnya dan diperiksa kesesuaiannya dengan komponen-komponen program yang ada, dengan kata lain ditentukan validitas semantic/keberartian program sumber.

• Tahap semantic analysis adalah tahap pemeriksaan kebenaran arti program sumber, mengumpulkan informasi tipe bagi tahap berikutnya.

• Dalam analisis semantik ditentukan arti atau semantik dari program sumber, selain itu juga dilakukan pengecekan tipe argumen dari operator yang digunakan. Untuk operasi tertentu maka argumen yang digunakan juga harus mempunyai tipe tertentu pula.

• Informasi mengenai tipe argumen diperoleh dari tabel simbol, sehingga interaksi antara proses analisis semantik dengan tabel simbol selalu dilakukan.

• Tahap ini menggunakan pohon sintaks dari tahap syntax analysis untuk identifikasi operator dan operand suatu ekspresi dari suatu kalimat.

• Komponen penting analisis semantik adalah pemeriksaan tipe, memeriksa operator yang harus mempunyai operand yang diijinkan oleh spesifikasi bahasa sumber.

• Pemeriksaan token dan ekspresi didasarkan pada 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 operand yang bertipe sama.

Pembentukan Kode Antara (Intermediate Code Generator).

• Tahapan setelah proses analisis semantik adalah pembentukan kode perantara antara bentuk bahasa tingkat tinggi dengan bahasa mesin.

• Tahap ini akan menghasilkan suatu hasil antara berupa kode sumber yang biasanya merupakan perintah 3 alamat atau perintah kuadrupel.

(7)

( + , A, B, T1 ) ( + , C, D, T2 ) ( * , T1, T2, T3 )

• kuadrupel (+,A,B,T1) berarti "jumlahkan A dan B dan letakkan hasilnya ke dalam tempat sementara T1",

• kuadrupel (+,C,D,T2) berarti "jumlahkan C dan D dan letakkan hasilnya ke dalam tempat sementara T2", dan

• kuadrupel (*,T1,T2,T3) berarti "kalikan isi T1 dengan isi T2 dan hasilnya diletakkan ke dalam tempat sementara T3".

• Pembangkit kode antara : membangkitkan kode antara (intermediate code) berdasarkan pohon parsing. Pohon parsing 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), atau tripels (op, arg1, arg2). Ekspresi dengan satu argumen

dinyatakan dengan menetapkan arg2 dengan - (strip, dash)

• Karena pada level berikutnya masih akan dilakukan optimasi, maka perlu dibuat representasi yang memudahkan optimasi, yang bukan merupakan bahasa mesin.

• Sebagai contoh deretan statemen berikut: temp1 := inttoreal(60)

temp2 := id3 * temp1 temp3 := id2 + temp2 id1 := temp3

Pengoptimal Kode atau

Code Optimizer

¾ Pada proses optimasi kode ini dilakukan pendeteksian ekspresi atau kalimat yang sering terjadi.

¾ Maksud dari optimasi kode ini adalah untuk dapat membentuk program sasaran yang lebih efisien.

(8)

¾ Proses optimasi kode ini adalah antara lain melakukan satu kali penghitungan saja untuk beberapa ekspresi matematika yang sama, menghilangkan perintah-perintah yang tidak berubah dalam satu kalang (loop) dengan meletakkan perintah-perintah tersebut di luar kalang.

¾ Sebagai contoh, bahasa asembli yang telah diperoleh pada contoh di atas dapat dioptimasi menjadi sebagai berikut:

¾ Pada tahap ini juga dilakukan optimasi (penghematan space dan waktu komputasi), jika mungkin, terhadap kode antara.

Contoh 1.5 : optimasi kode dari contoh 1.4. LDA A

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

Bagian program ini akan memberikan nilai ekspresi yang sama seperti contoh sebelumnya, yaitu (A+B)*(C+D).

Pembentukan Kode atau

Code Generator

.

Pada tahap pembentukan kode akhir ataupun pada tahap pembentukan kode antara, keluaran dari analisis semantik diterjemahkan ke dalam suatu bahasa asembli atau bahasa mesin yang berbentuk perintah satu alamat (single address), atau satu akumulator sebagai berikut:

Contoh 1.4 : pembentukan kode dari ekspresi (A+B)*(C+D)

LDA A masukkan nilai A ke dalam akumulator ADD B tambahkan nilai B ke dalam akumulator

STO T1 simpan isi akumulator ke dalam tempat sementara T1 LDA C masukkan nilai C ke dalam akumulator

ADD D tambahkan nilai D ke dalam akumulator

STO T2 simpan isi akumulator ke dalam tempat sementara T2 LDA T1 panggil isi T1, masukkan ke dalam akumulator

MUL T2 kalikan isi T2 dengan isi akumulator

(9)

Bagian Penanganan Kesalahan (

Error Handler

)

Bagian penanganan kesalahan akan bekerja jika terjadi kesalahan dalam program sumber, baik kesalahan sintaks maupun kesalahan semantik.

• Ada beberapa hal yang bisa dilakukan pada bagian ini, di antaranya adalah mendeteksi dan melaporkan kesalahan serta melakukan suatu tindakan untuk mempertahankan kelangsungan proses kompilasi.

• Hal yang terakhir ini dapat menimbulkan kesalahan rambatan (propagation error) di mana kesalahan dideteksi pada bagian yang "sebenarnya tidak salah" sebagai akibat dari tindakan penanganan kesalahan sebelumnya.

• Ada beberapa tanggapan yang terjadi dalam sebuah kompilator bila menemukan kesalahan (error).

• Beberapa tanggapan ini dapat diklasifikasi seperti yang ditunjukkan dalam Tabel 2.3. sebagai berikut:

Tabel 2.3. Klasifikasi tanggapan kesalahan

I. Tanggapan yang tak dapat diterima

1. Tanggapan yang tidak benar (kesalahannya tidak dilaporkan) a) Proses kompilasi menjadi ruwet,

b) Kalang proses kompilasi menjadi tak terbatas,

c) Proses kompilasi berlanjut, menghasilkan program sasaran yang tidak benar.

2. Tanggapan yang benar (tetapi hampir tak berguna)

a) Kompilator melaporkan kesalahan pertama yang dijumpai dan kemudian berhenti berproses.

II. Tanggapan yang dapat diterima

1. Tanggapan yang mungkin

a) Kompilator melaporkan kesalahan dan menutupnya (recovers), kemudian proses terus berlanjut untuk menemukan kesalahan (error) berikutnya jika masih ada.

b) Kompilator melaporkan kesalahan dan memperbaiki kesalahan tersebut, kemudian melanjutkan proses penerjemahan dan menghasilkan program sasaran yang sahih.

2. Tanggapan yang belum mungkin dengan teknik yang sekarang ada a) Kompilator mengoreksi kesalahan dan menghasilkan program

(10)

Pengelolaan Tabel Simbol (

Symbol Table Management

)

Pengelolaan tabel simbol merupakan bagian dari kompilasi yang

mencatat informasi-informasi penting tentang nama-nama yang terdapat pada program sumber.

• Setiap kali nama ditemukan di dalam teks sumber, nama dan informasinya di cari di dalam tabel simbol.

• Perubahan akan terjadi pada tabel simbol jika suatu nama baru atau informasi baru tentang suatu nama yang sudah ada ditemukan. Bila ternyata di dalam tabel simbol belum terdapat nama dan informasi tersebut, maka akan dicatat sebagai nama dan informasi baru.

• Tabel simbol ini disajikan dengan suatu struktur data yang disebut sebagai tabel simbol (symbol table) dan mempunyai peranan sangat penting dalam analisis semantik.

• Pengelolaan tabel simbol memiliki kemampuan-kemampuan sebagai berikut :

- Menentukan apakah suatu nama (identifier) berada dalam tabel. - Memasukkan nama baru ke dalam tabel.

- Mengakses informasi mengenai suatu nama.

- Memasukkan informasi baru untuk suatu nama, dan - Menghapus sebuah nama atau beberapa nama dari tabel.

Sedangkan informasi-informasi mengenai nama yang perlu disimpan dalam tabel simbol adalah :

- Untai karakter yang menyajikan nama.

- Atribut-atribut nama, seperti kegunaan nama (konstanta, pengenal, label, dan lain-lain), tipe data (bilangan bulat, bilangan pecahan, karakter, dan lain-lain), dan sebagainya.

- Parameter, seperti dimensi deret serta batas bawah dan batas atas masing-masing dimensi.

- Alamat dan besar RAM yang dialokasikan kepada nama.

(11)

Keterangan :

• id adalah token untuk identifier. Tiga lexeme untuk token ini adalah position, initial, dan rate.

• penganalisa semantik secara logika membangkitkan pohon parse.

• penganalisa semantik mendeteksi mismatch type. Perbaikan dilakukan dengan memanggil procedure yang mengkonversi integer ke real.

• quadruples dari : temp2 := id3 * temp1 adalah (*,id3,temp1,temp2), id1 := temp3 adalah (assign,temp3,-,id1), temp1 := inttoreal(60) adalah (inttoreal,60,-,temp1).

(12)

Pertanyaan Pendalaman Materi

1. Jelaskan komponen-komponen utama sebuah kompilator. Jelaskan pula fungsi masing-masing kompilator tersebut.

2. Jelaskan apa yang dimaksud dengan penganalisis leksikal. Jelaskan pula proses-proses yang dilakukan pada penganalisis leksikal.

3. Jelaskan apa yang dimaksud dengan pohon sintak. Berikan contoh dengan membuat sebuah pohon sintak dari sebuah statemen.

4. Jelaskan apa yang dimaksud dengan penganalisis semantik. Jelaskan pula beberapa batasan yang ada dalam penganalisis semantik.

5. Jelaskan proses-proses yang dilakukan dalam tahap pembentukan kode antara (Intermediate Code Generator).

6. Jelaskan apa yang dimaksud dengan pengoptimal kode (code optimizer).

7. Jelaskan beberapa tanggapan yang dilakukan apabila sebuah kompilator menemui kesalahan (error).

Gambar

Gambar 2.1. Komponen Utama dan Alur Proses Kompilator
Tabel 2.2. Tabel Token untuk assignment statement
Gambar 2.3. Pohon Sintaks

Referensi

Dokumen terkait