Kesalahan Program
Kesalahan Program dapat berupa
ü Kesalahan leksikal
•
Kesalahan
dalam mengetik/mengeja
•
Misal
THEN dituliskan dengan TEN atau THN
ü Kesalahan Sintaks
•
misalnya
dalam operasi aritmatika dengan tanda
kurung yang jumlahnya kurang, contoh
•
A:=
X + (B * (C+D)
ü Kesalahan Semantics
•
Tipe data yang salah
Contoh : VAR c :
integer;
c = 1.5 * 0.78
•
Variable belum didefinisikan
Misal : B := B + 1
tetapi b belum
didefinisikan
Error Handling - Penanganan
Kesalahan
ü Misal: compiler
menemukan kesalahan, yang bisa meliputi
•
Kode kesalahan
•
Pesan Kesalahan dalam bahasa alami
•
Nama dan atribut identifier
•
contoh
: error 162 Jumlah: Unknow identifier
•
Dapat
diartikan: Kode kesalahan =162, pesan kesalahan = unknown identifier,
nama identifier = jumlah
Error Handling - Reaksi terhadap
Kesalahan
ü Reaksi-reaksi
yang tidak dapat diterima
l Compilator crash: Berhenti atau
hang
l Looping : compilator tidak
bisa berhenti (infinite/onbounded loop)
l Menghasilkan
Obyek program yang salah : berbahaya, bisa diketahui/muncul setelah program
dieksekusi
ü Reaksi yang
benar, tapi kurang dapat diterima dan kurang bermanfaat
l Compilator
menemukan kesalahan pertama, melaporkannya, lalu berhenti (halt)
l Pemrogram
membuang waktu untuk melakukan pengulangan compilasi untuk setiap kali terdapat
sebuah error
Error Handling - Error Recovery
Bertujuan mengembalikan parser ke
kondisi stabil agar supaya dapat melanjutkan proses parsing ke posisi
selanjutnya.
ü Mekanisme Ad Hoc
l Recovery yang
dilakukan tergantung dari si pembuat compiler
l Tidak terikat
pada suatu aturan tertentu
l Disebut juga
dengan istilah purpose error recovery
ü Syntax directed
Recovery
misal
begin
A := A + 1 ;
B := B + 1;
C := C + 1
end ;
Pada contoh diatas, compiler akan
mengenali sebagai (dalam Notasi BNF)
begin <statement> ?
, statement> ;
<statement> end;
? Akan diperlakukan sebagai ‘;’

l Panic Mode
•
Maju terus sampai ketemu delimiter
•
Contoh : IF A = 1
Kondisi := true;
•
Pada kondisi diatas THEN tidak ada, compiler melanjutkan sampai ketemu
delimiter (;)
l Unit Deletion
•
Menghapus keseluruhan suatu unit sintaksik (misalnya
: <block>, <exp>, <statement> dan sebagainya
•
Mempermudah untuk melakukan error repairing
Error Handling - Error repair
Memperbaiki kesalahan dan membuat source
program valid (memodifikasi)
ü Mekanisme Ad Hoc
l Tergantung pada
sipembuat compiler
ü Syntax directed
Repair
l Menyisipkan /
membuang simbol terminal yang dianggap hilang atau yang menyebabkan error
l contoh WHILE A < 1
I := I = 1;
l compiler akan
menyisipkan DO
l Contoh lain
Procedure Increment ;
begin
x := X + 1
end;
end;
l Kelebihan simbol end,
yang menyebabkan kesalahan, maka compiler akan membuangnya
ü Context Sensitive
Repair
l Tipe identifier:
membuat identifier dummy
var
A : String
begin
A := 0;
end
maka compilator akan memperbaiki
kesalahan dengan membuat identifier baru , misalnya B bertipe integer
l Spelling Repair:
memperbaiki kesalahan pengetikan pada identifier, misalnya:
WHILLE A = 1 DO
identifier yang salah tersebut
diperbaiki menjadi WHILE
Teknik Optimasi : Optimasi Lokal
Optimasi Lokal : adalah optimasi
yang dilakukan hanya pada suatu blok dari source code, dengan cara:
ü Folding
menganti konstata atau ekpresi
yang bisa dievaluasi pada saat compile
time dengan nilai komputasinya. Misalnya:
A := 2 + 3 + B bisa diganti dengan A:= 5 + B
5 dapat mengantikan ekspresi 2 + 3
ü Redundant-Subexpression
Elimination
hasilnya digunakan lagi dari pada
dilakukan computasi ulang, contoh:
A:= B + C
X := Y + B + C
ü Optimasi dalam
sebuah Iterasi
l Loop Unrrolling:Menganti suatu loop dengan menulis statement yang ada dalam loop
ditulis beberapa kali
l Karena sebuah
iterasi pada implemnetasi ke level rendah, memerlukan :
•
Inisialisasi nilai awal, pada loop dilakukan sekali
pada saat permulaan eksekusi loop
•
Penge-test-an, apakah variabel loop telah mencapai
kondisi terminasi
•
Adjustment yaitu: penambahan atau pengurangan nilai
pada variabel loop dengan jumlah tertentu
•
Operasi yang terjadi
pada tubuh perulangan (loop body)
n Contoh :
FOR I := 1 to 2 DO
A[I] := 0;
dapat dioptimasikan menjadi
A[1] := 0;
A[2] := 0;
n Frequency
Reduction: Pemindahan statement ke tempat yang lebih jarang dieksekusi, contoh
FOR I:= 1 to 10 DO X := 5
BEGIN
FOR I:= 1 to 10 DO
X := 5 BEGIN
A := A + 1 A := A + 1
END: END:
ü Strength
Reduction
–
Penggantian suatu operasi dengan operasi lain yang
lebih cepat dieksekusi
–
misalnya: pada komputer operasi perkalian memerlukan
waktu eksekusi lebih banyak dari pada operasi penjumlahan
–
contoh lain
A:=
A + 1
–
dapat digantikan dengan
INC(A)
Teknik Optimasi : Optimasi Global
–
Unused parameter : parameter yang
tidak pernah digunakan dalam procedure
•
Misalnya :
procedure
penjumlahan(a,b,c ; Integer);
var
x : integer;
begin
x := a + b;
end
Parameter c tidak pernah digunakan sehingga tidak perlu
diikut sertakan
•
Variabel : variabel yang
dipakai tanpa nilai awal. Contoh
Program Awal;
var a, b: integer
begin
a := 5
a := a + b;
end;
n variabel b
digunakan tetapi tidak memiliki harga awal
ü Bagi Compiler
–
Meningkatkan
efisiensi eksekusi program
–
Menghilangkan useless code/kode yang tidak terpakai
ü var A, B, C, D, E, I, J, X, Y : integer;
ü begin
ü B := 5;
ü A := 10 - B / 4 * 3 + 2;
ü C := A + B;
ü Y := 10;
ü D := A + B – E;
ü for I := 1 to 85 do
ü begin
ü X := X + 1;
ü B := B – X;
ü Y := 7;
ü end
ü While Y< 5 do
ü E := E – B;
ü end