Tm teknik kompilasi juni 2013

10

Click here to load reader

Transcript of Tm teknik kompilasi juni 2013

Page 1: Tm   teknik kompilasi juni 2013

TUGAS MANDIRI

TEKNIK KOMPILASI

Soal :

Silahkan anda menganalisa Model Kompilator VB.Net dan Model Kompilator di bawah ini

Bagan Pokok Proses Kompilasi

Presentasi Ernastuti & Sulistyo (Universitas Gunadarma)

Termasuk :

1. Penanganan Kesalahan

2. Error recovery

3. Error Repair

Page 2: Tm   teknik kompilasi juni 2013

Definisi Compiler 1. Kompilator (Inggris: compiler) adalah sebuah program komputer yang berguna untuk

menerjemahkan program komputer yang ditulis dalam bahasa pemrograman tertentu menjadi

program yang ditulis dalam bahasa pemrograman lain. 1

2. Compiler adalah suatu program yang melakukan proses translasi dari HLL ke dalam bahasa

mesin di komputer. Disamping program translasi, compiler juga mempunyai beberapa fungsi

penting, seperti diagnostik, contohnya kemampuan pendeteksian error/kesalahan.

Pelannggaran spesifikasi HLL akan terdeteksi dan dilaporkan kepada programmer oleh

compiler agar segera diperbaiki hingga mempermudah pembentukan machine language

equivalent.2

3. “…interpret sequences of particular instructions, but not program texts. Therefore, the

program text must be translated into a suitable instruction sequence before it can be

processed by a computer. This translation can be automated, which implies that it can be

formulated as a program itself…” 3

Dari kedua definisi di atas dapat disimpulkan bahwa Compiler adalah sebuah perangkat lunak komputer

yang digunakan sebagai alat bantu dalam melakukan proses penterjemahan intruksi dan kode secara

otomatis ke dalam bahasa mesin (assembler) tertentu sebagai perantara dan juga memiliki fungsi sebagai

alat deteksi kesalahan dan memperbaiki hingga mempermudah pembentukan machine language

equivalent.

Gambar 1 – Proses Penterjemahan

1 http://id.wikipedia.org/wiki/Kompilator 2 Bahan Ajar, karmila.staff.gunadarma.ac.id/ 3 Niklaus Wirth, Compiler Construction, ISBN 0-201-40353-6, Addison-Wesley, 1996

Page 3: Tm   teknik kompilasi juni 2013

Dari penjelasan di atas terlihat bahwa tugas dari Compiler adalah :

Melakukan translasi dari HLL program sebagai input (source program) ke dalam

equivalent machine language program.

Menghasilkan pesan hasil diagnostik kepada programmer bila terjadi penyimpangan

spesifikasi HLL(source language).

Arsitektur kompilator modern biasanya bukan lagi merupakan program tunggal namun merupakan

rangkaian komunikasi antar program dengan tugas spesifik masing-masing.

1. Compilator itu sendiri, yang menerima kode sumber dan menghasilkan bahasa tingkat rendah

(assembly)

2. Assembler, yang menerima keluaran kompilator dan menghasilkan berkas objek dalam bahasa mesin

3. Linker, yang menerima berkas objek keluaran assembler untuk kemudian digabungkan dengan

pustaka-pustaka yang diperlukan dan menghasilkan program yang dapat dieksekusi (executable)

Proses Pokok Model Kompilator Dalam ilmu komputer, kode sumber (Inggris: source code) atau kode program adalah suatu

rangkaian pernyataan atau deklarasi yang ditulis dalam bahasa pemrograman komputer yang

terbaca manusia. Kode sumber yang menyusun suatu program biasanya disimpan dalam satu

atau lebih berkas teks, dan dapat pula ditampilkan dalam bentuk cuplikan kode (code snippet)

yang dicetak pada buku atau media lainnya. Kode sumber sebelum dikonversikan menjadi

bentuk berkas yang dapat dieksekusi komputer harus melalui proses kompilasi terlebih dahulu.

Konversi ini bisa dilakukan oleh suatu kompilator, atau langsung dari bentuk terbaca manusia

dengan bantuan interpreter.4

Gambar 2 - Bagan Pokok Proses Kompilasi

Presentasi Ernastuti & Sulistyo (Universitas Gunadarma)

4 http://id.wikipedia.org/wiki/Kode_sumber

Page 4: Tm   teknik kompilasi juni 2013

Tahap Analysis

Analisa Leksikal (Scanner) merupakan antarmuka antara kode program sumber dan analisa

sintaktik (Parser). Scanner melakukan pemeriksaan karakter per karakter pada teks masukan,

memecah sumber program menjadi bagian-bagian disebut Token.5

Dua aspek penting pembuatan Analisa Leksikal adalah :

Menentukan token-token bahasa.

Mengenali token-token bahasa dari program sumber.

Tugas – tugas analisa leksikal antara lain :

a. Melakukan pembacaan kode sumber dengan merunut karakter demi karakter.

b. Mengenali besaran leksik (identifier, keywords, dan konstanta).

c. Mentransformasi menjadi sebuah token dan menentukan jenis tokennya.

d. Mengirimkan token.

e. Membuang atau mengabaikan white-space dan komentar dalam program.

f. Menangani kesalahan.

g. Menangani tabel simbol.

Proses Analisa Sintaks (Parsing) dilakukan terhadap descriptor dari analisa leksikal untuk

menentukan struktur sintaks dari input statement. Proses tersebut dikenal dengan nama

“Parsing”. Output dari Parsing adalah representasi dari struktur sintaks suatu statement. Analisa

semantik memanfaatkan pohon sintaks yang dihasilkan pada proses parsing (analisa sintaks).

Fungsi dari analisa semantik adalah untuk menentukan makna dari serangkaian instruksi yang

terdapat dalam program sumber. Untuk mengetahui makna, maka rutin analisa semantik akan

memeriksa :

• Apakah variabel yang ada telah didefinisikan sebelumnya,

• Apakah variable-variabel tersebut tipenya sama,

• Apakah operan yang akan dioperasikan tersebut ada nilainya dan seterusnya.

Untuk dapat menjalankan fungsi tersebut dengan baik, semantic analyzer seringkali

menggunakan tabel simbol. Pemeriksaan bisa dilakukan pada tabel identifier, tabel display dan

tabel blok, misal pada field link. Pengecekan yang dilakukan oleh analisis semantik adalah :

1. Memeriksa keberlakuan nama – nama meliputi pemeriksaan :

Duplikasi, pengecekan apakah sebuah nama terjadi pendefinisian lebih dari dua kali.

Pengecekan dilakukan pada bagian pengelola blok.

Terdefinisi, pengecekan apakah sebuah nama yang dipakai pada tubuh program sudah

terdefinisi atau belum. Pengecekan dilakukan pada semua tempat kecuali blok.

2. Memeriksa tipe

Melakukan pemeriksaan terhadap kesesuaian tipe dalam statement – statement yang ada.

Misal : Bila ada operasi antara dua operan, maka tipe operan pertama harus bisa dioperasikan

dengan operan kedua.

5 Iwan Binanto, 2005, Konsep Bahasa Pemrograman : Penerbit Andi dari Rizki Pramudiningtyas,

http://rizkistitek.blogspot.com/2012/03/tahap-analisa-fase-analysis.html

Page 5: Tm   teknik kompilasi juni 2013

Kode Antara (Intermediate Code) merupakan hasil dari tahapan analisis, yang dibuat oleh

kompilator pada saat mentranslasikan program dari bahasa tingkat tinggi. Kegunaan dari Kode

Antara/intermediate code :

Untuk memperkecil usaha dalam membangun kompilator dari sejumlah bahasa ke sejumlah

mesin

Proses optimasi lebih mudah (dibandingkan pada program sumber atau kode assembly dan

kode mesin).

Bisa melihat program internal yang gampang dimengerti.

Tahap Sintesa

Tahapan akhir suatu tranlasi terfokus pada pembangunan program yang executable dari output

yang dihasilkan oleh semantic analyzer6. Tahap ini melibatkan penghasil kode (code generation)

jika dibutuhkan dan melibatkan juga optimisasi pada program yang sudah dihasilkan. Jika

subprogram ditranslasikan secara terpisah atau jika pustaka subprogram digunakan maka tahapan

final linking dan loading dibutuhkan untuk menghasilkan suatu program lengkap yang siap

dieksekusi.

a. Pembentukan/Pembangkitan Kode

Dalam tahap ini bentuk antara dari bahasa sumber yang berupa suatu pohon sintaks

diterjemahkan ke dalam suatu bahasa assembli atau bahasa mesin. Tahap ini membangkitkan

kode antara (intermediate code) berdasarkan pohon parsing. Pohon parsing selanjutnya

diterjemahkan oleh suatu penerjemah, misalnya penerjemah berdasarkan sintaks (syntax-

directed translator). Hasil penerjemahan ini biasanya merupaka perintah tiga alamat (three-

address code) yang merupakan representasi program untuk suatu mesin abstrak. Bahasa

mesin yang dihasilkan adalah bahasa assembli yang merupakan suatu perintah 1 alamat, 1

akumulator. Perintah tiga alamat bisa berbentuk quadruples (op, arg1, arg2, result), triples

(op, arg1, arg2). Ekspresi dengan satu argumen dinyatakan dengan menetapkan arg2 dengan –

(strip, dash).

b. Optimalisasi Kode

Hasil pembentukan kode yang diperoleh kemudian dibuat lebih kompak lagi dengan

melakukan beberapa teknik optimasi supaya dapat diperoleh program yang lebih efisien.

Dalam hal ini dilakukan beberapa hal seperti pendeteksian suatu ekspresi yang sering terjadi,

sehingga pengulangan tidak perlu terjadi dan lain sebagainya. Pada tahap ini melakukan

optimasi (peghematan space dan waktu komputasi) jika mungkin terhadap kode antara.

Semantic analyzer biasanya menghasilkan suatu output program executable yang sudah

ditranslasi yang berbentuk intermediate code, yang kadangkala merupakan kode yang buruk

atau tidak efisien.

6 Bahan Ajar, octa_bl.staff.gunadarma.ac.id/

Page 6: Tm   teknik kompilasi juni 2013

c. Penghasil Kode

Setelah program yang ditranslasi dan representasi internalnya dioptimalisasi maka harus

dibentuk sebagai statemen bahasa assembly, kode mesin, atau program objek yang lainnya

yang menjadi output dari translasi. Kode output ini mungkin dapat langsung dieksekusi, atau

membutuhkan langkah translasi berikutnya, yaitu Linking dan Loading.

d. Linking dan Loading

Tahapan akhir yang bersifat opsional adalah menggabungkan potongan-potongan kode yang

dihasilkan dari translasi terpisah suatu subprogram ke dalam suatu program final executable

yang utuh. Hal ini dapat terjadi karena potongan-potongan kode tersebut mempunyai loader

tables yang dihasilkan oleh translator. Loader tables inilah yang digunakan oleh linking loader

untuk menggabungkan potongan-potongan kode tersebut di memori sehingga menghasilkan

program final executable yang siap untuk dieksekusi.

Pada tahap Analys dan Sintesa seluruh sumber input dan output berada pada Table, dimana

fungsi Table itu sendiri adalah untuk menyimpan semua informasi yang berhubungan dengan

proses kompilasi.

Program Sasaran dapat berupa bahasa pemrograman lain atau bahasa mesin pada suatu

computer.

Kompilator dalam VB.Net Informasi dalam berkas ditentukan oleh pembuatnya7. Ada banyak beragam jenis informasi yang

dapat disimpan dalam berkas. Hal ini disebabkan oleh struktur tertentu yang dimiliki oleh berkas,

sesuai dengan jenisnya masing-masing. Contohnya :

• Text file; yaitu urutan karakter yang disusun ke dalam baris-baris

• Source file; yaitu urutan subroutine dan fungsi yang nantinya akan dideklarasikan

• Object file; merupakan urutan byte yang diatur ke dalam blok-blok yang dikenali oleh linker

dari system

• Executable file; adalah rangkaian code section yang dapat dibawa loader ke dalam memori

dan dieksekusi

Compiler dan Assemblers membuat file objek yang berisi kode biner dan data yang

dihasilkan untuk file sumber. Linker menggabungkan beberapa file menjadi satu objek, loader

mengambil objek file dan memasukannya ke dalam memori. (Dalam lingkungan pemrograman

terpadu, kompiler, perakit, dan linker dijalankan secara implisit ketika pengguna akan membuat

program.

Dalam pemrograman komputer, Runtime Library adalah Application Programming

Interface yang digunakan oleh compiler untuk memanggil beberapa pola dari sistem runtime.

Sistem runtime mengimplementasikan model pelaksanaan dan pola yang mendasar dari bahasa

pemrograman. Runtime Library dapat mengimplementasikan sebagian dari pola sistem runtime,

tetapi jika panggilan membaca kode baru tersedia yang dibalut dalam informasi pake dan 7 Bahan Ajar, saefudin.staff.jak-stik.ac.id/

Page 7: Tm   teknik kompilasi juni 2013

mengirimkannya ke sistem runtime. Namun, terkadang Runtime Library dimaksudkan untuk

menyertakan kode dari sistem runtime itu sendiri, meskipun banyak kode yang tidak dapat

terhubung secara langsung melalui library.

Gambar 3 - Model Kompilator dalam VB.Net8

Linker adalah suatu program yang menterjemahkan program objek (bereksention OBJ) ke

bentuk program eksekusi (berekstension EXE atau COM). Sedangkan untuk membuat file object

ke bentuk file yang dapat dieksekusi (berekstension .COM atau .EXE) bisa anda gunakan file

TLINK.EXE.

Gambar 4 – Visual Basic Compiled and Run9

8 http://www.webopedia.com/FIG/COMPILE.gif

Page 8: Tm   teknik kompilasi juni 2013

Pada Gambar 4 menunjukkan bagaimana sebuah program Visual Basic dikompilasi dan

dijalankan. Untuk memulai, Anda menggunakan Visual Studio untuk membuat sebuah proyek,

yang terdiri dari file sumber yang berisi pernyataan (statement). Sebuah proyek pemrograman

juga dalam Visual Basic dapat berisi jenis file lainnya, seperti suara, gambar atau teks file.

Setelah Anda memasukkan kode Visual Basic untuk sebuah proyek, Compiler Visual Basic

dalam Visual Studio akan membangun atau mengkompilasi kode sumber Visual Basic ke dalam

Microsoft Intermediate Language.

Intermediate Language disimpan pada disk dalam sebuah file yang disebut assembly.

Selain Intermediate Language, dalam assembly sudah termasuk referensi kelas yang dibutuhkan

oleh aplikasi. Assembly dapat dijalankan pada setiap PC yang telah memiliki Common

Language Runtime. Ketika assembly dijalankan, Common Language Runtime mengubah

Intermediate Language ke kode asli yang dapat dijalankan oleh sistem operasi Windows.

Standar Operasi

1. Programmer menggunakan Visual Studio untuk membuat proyek yang mencakup Visual

Basic file source. Dalam beberapa kasus, proyek juga akan berisi jenis file lainnya, seperti

gambar grafis atau file suara.

2. Compiler Visual Basic menerjemahkan Visual Basic source code proyek ke dalam Microsoft

Intermediate Language. Bahasa ini disimpan pada disk dalam sebuah assembly yang juga

berisi referensi kelas yang dibutuhkan. Assembly adalah file executable yang memiliki exe.

Atau ekstensi dll.

3. Assembly ini dijalankan oleh Common Language Runtime NET. Framework. The Common

Language Runtime mengelola semua aspek bagaimana perakitan dijalankan, termasuk

mengubah Intermediate Language ke kode asli yang dapat dijalankan oleh sistem operasi,

pengelolaan memori untuk assembly, dan keamanannya.

Error Handling Error Handling atau yang biasa disebut dengan penanganan kesalahan, terdiri atas beberapa

mekanisme, yaitu :

Jenis Kesalahan Contoh Kesalahan Langkah Penyelesaian

Kesalahan leksikal Kesalahan dalam mengetik Mendeteksi kesalahan

Melaporkan kesalahan

Tindak lanjut perbaikan Kesalahan Sintaks

Kesalahan dalam menuliskan

symbol operasi aritmatika

Kesalahan Semantics Tipe data yang salah

Variable belum didefinisikan

9 http://centurion2.com/VBHomework/VB1/vb1.php

Page 9: Tm   teknik kompilasi juni 2013

Reaksi Compiler Pada kesalahan

Ada beberapa reaksi compiler menangani kesalahan :

Reaksi-reaksi yang tidak dapat

diterima

Compilator crash: Berhenti atau hang

Looping : compilator tidak bisa berhenti

(infinite/onbounded loop)

Menghasilkan Obyek program yang salah : berbahaya,

bisa diketahui/muncul setelah program dieksekusi

Reaksi yang benar, tapi kurang

dapat diterima dan kurang

bermanfaat

Compilator menemukan kesalahan pertama,

melaporkannya, lalu berhenti (halt)

Pemrogram membuang waktu untuk melakukan

pengulangan compilasi untuk setiap kali terdapat

sebuah error

Reaksi yang sudah dapat dilakukan Compilator melaporkan Error dan melakukan Recovery

atau Repair

Reaksi yang belum dapat dilakukan

Compiler mengkoreksi kesalahan

Menghasilkan obyek program sesuai yang diinginkan

pemrogram

Compiler memiliki kemampuan untuk mengetahui

maksud dari pemrogram

Belum diimplementasikan pada program (sekarang ini)

Error Recovery

Bertujuan mengembalikan parser ke kondisi stabil agar supaya dapat melanjutkan proses parsing

ke posisi selanjutnya.

Mekanisme Ad Hoc

Recovery yang dilakukan tergantung dari si pembuat

compiler

Tidak terikat pada suatu aturan tertentu

Syntax directed Recovery

Menyisipkan atau membuang symbol terminal yang

dianggap menyebabkan error

Secod Error Recovery Melokalisir kesalahan

Context Sensitive Recovery Biasanya berkaitan dengan semantic

Error Repair

Memperbaiki kesalahan dan membuat source program valid dengan memodifikasi.

Mekanisme Ad Hoc Tergantung si pembut compiler

Syntax Directed Repair Menyisipkan atau membuang symbol terminal yang

dianggap menyebabkan error

Context Sensitive Repair Biasanya berkaitan dengan semantic

Bila kesalahan identifier, maka compilator akan

memperbaiki kesalahan dengan membuat identifier baru.

Page 10: Tm   teknik kompilasi juni 2013