REAKSI
KOMPILATOR PADA KESALAHAN DALAM SEBUAH PROGRAM
Reaksi
yang dapat diterima
Reaksi
yang sudah dapat dilakukan (dewasa ini), yaitu melaporkan kesalahan, dan
selanjutnya melakukan:
Recovery / pemulihan, lalu melanjutkan
menemukan kesalahan yang lain bila masih ada.
Repair / Perbaikan kesalahan, lalu
melanjutkan proses translasi dan menghasilkan program objek yang valid.
Reaksi
yang belum dapat dilakukan (dewasa ini), yaitu kompilator mengkoreksi
kesalahan, lalu menghasilkan program objek sesuai dengan yang diinginkan
pemrogram.
ERROR
RECOVERY
Tujuannya
mengembalikan parser ke kondisi stabil (supaya bisa melanjutkan proses parsing
ke posisi selanjutnya).
Strategi
yang dilakukan 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 :
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, 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.
Context
Sensitive Recovery
Berkaitan
dengan semantik, misal bila terdapat variabel yang belum dideklarasikan (undifined
variabel) maka diasumsikan tipenya berdasarkan kemunculannya.
Sekian...