Translator
Melakukan
pengubahan source code/program sumber ke dalam target code/object code. Source
code ditulis dalam sumber sedangkan object code bisa dalam bahasa pemrograman
lain atau bahasa mesin pada suatu komputer.
Macam – macam Translator
1.
Assembler
Source code adalah bahasa assembly, object
code adalah bahasa mesin contoh :
Turbo Assembler dan Macro Assembler
2.
Kompilator ( Compiler)
Source code adalah bahasa tingkat tinggi,
object code adalah bahasa mesin atau
bahasa assembly. Source code dan data
diproses pada waktu yang berbeda.
Contoh ; Turbo Pascal. Compile time adalah
saat pengubahan dari source code
ke object code sedangkan Run Time adalah
saat eksekusi object code.
Model
Kompilator
Kompilator umumnya
mempunyai dua tugas pokok :
1.
Fungsi Analisis, biasa disebut Front-end à melakukan
dekomposisi
program sumber menjadi bagian-bagian
dasarnya.
2.
Fungsi Sintesis, biasa disebut Back-end
àmelakukan
pembangkitan dan
optimasi program objek.
Scanner :
Memecah program sumber menjadi besaran
Leksik/Token
Parser : memeriksa kebenaran
dan urutan kemunculan Token
Analisis Semantik : melakukan analisis semantik,biasanya
dalam realisasi
kan digabungkan dengan
Intermediate code generator
(bagian
yang berfungsi membangkitkan kode antara
Code Generator :
membangkitkan kode objek
Code Optimizer :
memperkecil hasil dan mempercepat proses
Tabel Simbol : menyimpan semua informasi yang
berhubungan
dengan
proses kompilasi
Mutu
Kompilator
Mutu dari suatu kompilator
tergantung dari beberapa faktor :
1.
Kecepatan dan waktu proses
Tergantung
dari penulisan Algoritma Kompilator dan kompilator
Pengkompilasi.
2.
Mutu program objek
mutu suatu program objek ditentukan
oleh ukuran dan kecepatan
eksekusi dari program objek.
3.
Integrated Environment
Merupakan fasilitas terintegrasi yang
dimiliki oleh kompilator.
Pembuatan Kompilator
Dapat dilakukan
dengan cara :
1.
Mempergunakan bahasa mesin
2.
Mempergunakan bahasa tingkat tinggi
3.
Mempergunakan bahasa tingkat tinggi lain pada mesin yang sama
4.
Mempergunakan bahasa tingkat tinggi yg sama pada mesin yang
berbeda.
5.
Bootstrap ( gagasan dari Nirklaus Wirth : membangun suatu yang besar
dengan terlebih dahulu membuat bagian
intinya).
3.
Interpreter
Interpreter
tidak membangkitkan object code, hasil translasi hanya dalam bentuk internal.
Contoh: BASICA/GW-BASIC,LIPS,SMALLTALK.
Source
code dan data diproses pada saat yang sama.
Input berupa source code yaitu bahasa scripting seperti
PHP, Perl, Javascript, ASP, Java bytecode, Basic. Interpreter tidak
menghasilkan object code. Hanya menghasilkan translasi internal. Input dapat
berasal dari source code maupun dari inputan program dari user. Source code dan
inputan data user diproses pada saat yang bersamaan. Pada interpreter: program tidak harus dianalisis seluruhnya dulu,
tapi bersamaan dengan jalannya program. Keuntungan: mudah bagi
user, debuging cepat dan kekurangannya adalah
eksekusi program lambat, dan
tidak langsung menjadi program executable.
Kesalahan-kesalahan pada translator
Sebuah kompilator akan sering menemui program yang mengandung kesalahan,
maka kompilator harus memiliki strategi apa yang harus dilakukan untuk
menangani kesalahan - kesalahan tersebut.
1 Jenis –
jenis Kesalahan
a. Kesalahan Leksikal
Misalnya kesalahan mengeja keyword,
contoh: then ditulis ten
b. Kesalahan Sintaks
Misalnya pada operasi aritmatika kekurangan jumlah paranthesis (kurung).
contoh
: A:=X+(B*(C+D)
c. Kesalahan Semantik
Tipe data yang salah, misal tipe data integer
digunakan untuk variabel string.
Contoh
: Var Siswa : Integer
Siswa :=
'Aka' {tipe string}
Variabel
belum didefinisikan tetapi digunakan dalam operasi.
Contoh : B := B + 1 {B belum didefinisikan}
2 Penanganan Kesalahan
Prosedur
penanganan kesalahan terdiri dari :
·
Mendeteksi kesalahan
·
Melaporkan kesalahan
·
Tindak lanjut perbaikan /
pemulihan
Pelaporan kesalahan yang dilakukan oleh sebuah
kompilator yang menemukan kesalahan meliputi :
·
Kode kesalahan
·
Pesan kesalahan dalam bahasa
natural
·
Nama dan atribut identifier
·
Tipe – tipe yang terkait bila type
checking
Contoh : Error Message : Error 162 jumlah: unknown identifier
Ø Kode kesalahan = 162
Ø Pesan kesalahan = unknown identifier
Ø Nama identifier = jumlah
Adanya
pesan kesalahan tersebut akan memudahkan pemrogram dalam mencari dan mengoreksi
sumber dari kesalahan.
Pada saat kompilator menemukan kesalahan terdapat
beberapa tingkatan reaksi diantaranya adalah :
a.
Reaksi yang tidak dapat
diterima (tidak melaporkan error)
·
Kompilator crash :
berhenti atau hang
·
Looping :
kompilator masih berjalan tapi tidak pernah berakhir karena looping tak
berhingga (indefinite/onbounded loop)
·
Menghasilkan program objek yang
salah : kompilator melanjutkan proses sampai selesai tapi program objek yang
dihasilkan salah. Ini berbahaya bila tidak diketahui pemrogram, karena baru
akan muncul saat program dieksekusi.
b.
Reaksi yang benar tapi kurang
dapat diterima dan kurang bermanfaat. Kompilator menemukan kesalahan pertama,
melaporkannya, lalu berhenti (halt). Ini bisa muncul bila pembuat
kompilator menganggap jarang terjadi kemunculan error dalam program sehingga
kemampuan kompilator untuk mendeteksi dan melaporkan kesalahan hanya satu untuk
setiap kali kompilasi. Pemrogram akan membuang waktu untuk melakukan
pengulangan kompilasi setiap kali terdapat sebuah error.
c.
Reaksi yang dapat diterima
·
Reaksi yang sudah dapat dilakukan,
yaitu kompilator melaporkan kesalahan / error, dan selanjutnya melakukan:
Ø Recovery / pemulihan, lalu melanjutkan menemukan kesalahan
/ error yang lain bila masih ada.
Ø Repair / Perbaikan kesalahan, lalu
melanjutkan proses translasi dan menghasilkan program objek yang valid
Kebanyakan
kompilator dewasa ini sudah memiliki kemampuan recovery dan repair.
·
Reaksi yang belum dapat
dilakukan, yaitu kompilator mengkoreksi kesalahan, lalu menghasilkan program
objek sesuai dengan yang diinginkan pemrogram. Disini komputernya sudah
memiliki kecerdasan untuk mengetahui maksud pemrogram. Tingkatan respon ini
belum dapat diimplementasikan pada kompilator yang ada dewasa ini.
3 Pemulihan Kesalahan
Tujuannya
mengembalikan kondisi parser ke kondisi stabil (supaya bisa melanjutkan
proses parsing ke posisi selanjutnya). Strategi yang dilakukan error
recovery sebagai berikut :
· Mekanisme Ad Hoc
Recovery yang dilakukan tergantung dari pembuat kompilator
sendiri/Spesifik, dan tidak terikat pada suatu aturan tertentu. Cara ini biasa
disebut juga special purpose error recovery.
· Syntax Directed Recovery
Melakukan recovery berdasarkan syntax
Contoh : ada program
begin
A:=A+1
B:=B+1;
C:=C+1
end;
kompilator akan mengenali sebagai (dalam
notasi BNF)
begin <
statement>?<statement>;<statement>end;
? akan diperlakukan sebagai “;”
· Secondary Error Recovery
Berguna untuk melokalisir kesalahan /
error, caranya :
· Panic mode
Maju terus dan mengabaikan teks sampai bertemu delimeter (misal ‘;’)
contoh :
IF A := 1
Kondisi := true;
Teks diatas terjadi kesalahan karena tidak ada instruksi THEN,
kompilator
akan maju terus sampai bertemu ‘;’
· Unit deletion
Menghapus keseluruhan suatu unit sintaktik (misal:
<block>,<exp>,<statement> dan sebagainya), efeknya sama
dengan panic mode tetapi unit deletion memelihara kebenaran
sintaksis dari source program dan mempermudah untuk melakukan error repairing
lebih lanjut.
·
Context Sensitive Recovery
Berkaitan dengan semantik,misal bila terdapat variabel yang belum
dideklarasikan(undifined variabel) maka diasumsikan tipenya berdasarkan
kemunculannya.
Contoh :
B:= 'nama'
sementara diawal program variabel B belum dideklarasikan, maka berdasarkan
kemunculannya diasumsikan variabel B bertipe string.
4 Error Repair
Bertujuan untuk memodifikasi source program dari kesalahan
dan membuatnya valid sehingga memungkinkan kompilator untuk melakukan translasi
program yang mana akan dialirkan ketahapan selanjutnya pada proses kompilasi.
Mekanisme error repair meliputi :
Ø
Mekanisme Ad Hoc
Tergantung dari pembuat kompilator sendiri / spesifik.
Ø
Syntax Directed Repair
Menyisipkan simbol terminal yang dianggap hilang
atau membuang
terminal
penyebab kesalahan
Contoh :
While a<1
I:=I+1;
Kompilator akan
menyisipkan DO karena kurang simbol DO
contoh lain :
Procedure
Increment;
begin
x:=x+1;
end;
end;
terdapat kelebihan simbol end, yang menyebabkan
kesalahan maka
kompilator akan membuangnya.
Ø
Context Sensitive Repair
Perbaikan dilakukan pada kesalahan :
·
Tipe identifier.
Diatasi dengan membangkitkan identifier
dummy, misalkan :
Var A : string;
begin
A:=0;
end;
·
Tipe konstanta. Diatasi dengan
membangkitkan konstanta baru
dengan tipe yang tepat.
Ø
Spelling repair
Memperbaiki kesalahan pengetikan pada
identifier, misal :
WHILLE A = 1 DO
Identifier yang salah tersebut akan diperbaiki menjadi WHILE
Referensi