Powered By Blogger

Selasa, 09 Juli 2013

Teknik Kompilasi



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 ‘;
*        Second Error Recovery : untuk melokalisir kesalahan
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

Tidak ada komentar:

Posting Komentar