Anda di halaman 1dari 50

MATERI PERKULIAHAN

TEKNIK KOMPILASI

PENANGANAN KESALAHAN,
OPTIMASI KODE,
TABEL INFORMASI

10

Ken Kinanti Purnamasari


PENANGANAN KESALAHAN
> JENIS PENANGANAN
Jenis Penanganan

- Kesalahan LEKSIKAL
- Kesalahan SINTAKS
- Kesalahan SEMANTIK
Kesalahan LEKSIKAL

- Kesalahan mengeja keyword


contoh :
THEN ditulis sebagai TEN
Kesalahan SINTAKS

- Kesalahan penulisan urutan token


contoh :
Operasi aritmatika yang jumlah tanda kurung-nya
kurang / tidak pas.
A := B + ( C *( D + E );
Kesalahan SEMANTIK

- Kesalahan aturan makna


contoh :
 Tipe Data
VAR
Siswa : integer;
BEGIN
Siswa := “Budi”;
END;
Kesalahan SEMANTIK

- Kesalahan aturan makna


contoh :
 Variabel belum didefinisikan
VAR
A : integer;
BEGIN
B := A + 1;
END;
> LANGKAH PENANGANAN
Langkah Penanganan

- Mendeteksi kesalahan
- Melaporkan kesalahan
- Solusi perbaikan
> ISI LAPORAN KESALAHAN
Isi Laporan Kesalahan

- Kode Kesalahan
- Pesan Kesalahan
- Nama dan Atribut Identifier
- Tipe Data
Isi Laporan Kesalahan

Contoh :
Error 14 Hitung : unknown identifier

Artinya :
- Kode Kesalahan : 14
- Pesan Kesalahan : unknown identifier
- Nama Identifier : Hitung
> REAKSI KOMPILATOR
Reaksi Kompilator

Tingkatan reaksi kompilator pada kesalahan :


- Tidak dapat diterima
- Benar, tapi kurang dapat diterima
- Dapat diterima
Reaksi Kompilator

- Reaksi yang tidak dapat diterima


 Compiler crash
 Looping tak berhingga
 Menghasilkan Program Objek yang salah
Reaksi Kompilator

- Reaksi yang kurang dapat diterima


 Setiap menemukan suatu kesalahan,
kompilator melaporkan-nya,
tetapi kemudian berhenti
(harus mengulang proses kompilasi)
Reaksi Kompilator

- Reaksi yang dapat diterima


 Recovery/Memulihkan suatu kesalahan (men-
stabilkan), kemudian menemukan error lainnya

 Repair/Memperbaiki kesalahan (memodifikasi


source-code) dan membuatnya valid
> RECOVERY
Error Recovery

Mengembalikan compiler ke kondisi stabil


(supaya dapat melanjutkan proses)

Beberapa strategi yang digunakan :


- Mekanisme Ad Hoc
- Syntax Directed Recovery
- Secondary Error Recovery
- Context Sensitive Recovery
Error Recovery

- Mekanisme Ad Hoc
Dilakukan berdasarkan keinginan pembuat
kompilator.
Error Recovery

- Syntax Directed Recovery


Dilakukan berdasarkan sintaks.

Contoh :
begin
A:= A + 1
B := B – 1;
C := B – A;
end;

Dikenali sebagai
begin <stmt> ? <stmt> ; <stmt>; end;
Error Recovery

- Secondary Error Recovery


Dilakukan untuk melokalisasi error.

Terdapat 2 jenis, yaitu :


 Panic Mode
maju terus sampai bertemu delimiter (misalnya “;”)

 Unit Deletion
menghapus keseluruhan unit sintaktik
Error Recovery

- Context Sensitive Recovery


Mengatasi kesalahan semantik.

Contoh :
VAR
A : integer;
BEGIN
B := A + 1;
END;

Maka, tipe data B diasumsikan bertipe integer.


> REPAIR
Error Repair

Proses modifikasi program sumber.


(supaya dapat ditranslasi)

Beberapa strategi yang digunakan :


- Mekanisme Ad Hoc
- Syntax Directed Repair
- Context Sensitive Repair
- Spelling Repair
Error Repair

- Mekanisme Ad Hoc
Dilakukan berdasarkan keinginan pembuat
kompilator.
Error Repair

- Syntax Directed Repair


Menyisipkan simbol terminal yang hilang /
menghapus terminal penyebab kesalahan.

Contoh :
WHILE A <= 1
A:= A + 1;

Maka keyword ”DO” akan ditambahkan


Error Repair

- Context Sensitive Repair


Memperbaiki kesalahan semantik.

 Tipe Data
VAR
A : integer;
BEGIN
B := A + 1;
END;

Maka, dibuat definisi variabel baru B yang bertipe integer


Error Repair

- Spelling Repair
Perbaikan kesalahan pengetikan.
WHILLE A>1 DO
Maka, WHILLE akan diganti menjadi WHILE
OPTIMASI KODE
Jenis Optimasi

Menghasilkan program yang lebih efisien.


(ukuran lebih kecil, eksekusi lebih cepat)

Berdasarkan ketergantungan pada mesin :


- Machine Dependent  tergantung mesin
- Machine Independent  tidak tergantung mesin
Jenis Optimasi

Optimasi Machine Independent, dibagi 2 :


- Lokal  fokus di suatu blok sederhana
- Global  kaitan antara blok-blok sederhana
Optimasi LOKAL

- Folding
mengganti ekspresi dengan nilai komputasi.
Contoh :
A := 2 + 3 + B
Diubah menjadi
A := 5 + B
Optimasi LOKAL

- Redundant-Subexpression Elimination
memakai hasil komputasi yang sudah ada.
Contoh :
A := B + C
X := Y + B + C
Bila belum ada perubahan nilai variabel, baris terakhir
dapat diubah menjadi :
X := Y + A
Optimasi LOKAL

- Optimasi Iterasi
 Loop Unrolling
Mengganti perintah perulangan, dengan
menulis perintah beberapa kali.
Contoh :
FOR i:=1 TO 2 DO
B[i] := 0;
Menjadi :
B[1] := 0;
B[2] := 0;
Optimasi LOKAL

- Optimasi Iterasi
 Frequency Reduction
mengeluarkan operasi yang tidak berubah
kondisi dari dalam perulangan
Optimasi LOKAL

Contoh :
FOR I:=1 TO 10 DO
BEGIN
X := 5;
B := B + X;
END;

Menjadi :
X := 5;
FOR I:=1 TO 10 DO
BEGIN
B := B + X;
END;
Optimasi LOKAL

- Strength Reduction
Penggantian suatu operasi dengan operasi
lain yang lebih cepat dieksekusi.
Contoh :
A := A + 1;
Menjadi :
INC(A);
Optimasi GLOBAL

- Biasanya menggunakan Analisis Flow.

- Analisis ini menggunakan graf untuk


menggambarkan berbagai alur yang
memungkinkan untuk eksekusi program
Optimasi GLOBAL

- Optimasi oleh Programmer

 Bagian kode yang tidak digunakan


Contoh :

X := 5;
IF X=0 THEN
A := A + 1;

Kode A := A + 1 tidak pernah digunakan


Optimasi GLOBAL

- Optimasi oleh Programmer

 Parameter yang tidak digunakan


Procedure Hitung(a,b,c:integer);
var
X : integer
begin
X := a + b;
end;

Parameter C tidak pernah digunakan


Optimasi GLOBAL

- Optimasi oleh Programmer

 Variabel yang tidak digunakan


Program Input;
var
a, b : integer;
begin
a := 5;
end;

Variabel b tidak pernah digunakan


Optimasi GLOBAL

- Optimasi oleh Programmer

 Variabel tanpa nilai awal


Program Tes;
var
a, b : integer;
begin
a := 5;
a := a + b;
end;

Variabel b belum diberikan nilai awal


Optimasi GLOBAL

- Optimasi oleh Kompilator

 Efisiensi program
 Penghapusan kode yang tidak digunakan
TABEL INFORMASI
Jenis Tabel Informasi

 Tabel Identifier  list identifier dalam program


 Tabel Array  list info tambahan untuk array
 Tabel Blok  list variabel pada blok yang sama
 Tabel Real  list elemen tabel bernilai real
 Tabel String  list informasi string
 Tabel display  list blok yang aktif
REFERENSI . . .

Alfred v. a. & ullman J.D., Compilers Principles


Technique and Tools, Addison Wesley, 1988
TUGAS BESAR

Buatlah MAKALAH
dari COMPILER yang dibangun !
(source-code input, source-code
compiler, .exe compiler, laporan)

DEADLINE : H-1 Pertemuan Selanjutnya


Format Laporan :
> MASUKAN
> ANALISIS LEKSIKAL (Deskripsi & Contoh)
> ANALISIS SINTAKSIS (Deskripsi & Contoh)
> ANALISIS SEMANTIK (Deskripsi & Contoh)
> PENANGANAN KESALAHAN (Deskripsi & Contoh)
> PEMBANGKITAN KODE (Deskripsi & Contoh)
> OPTIMASI KODE (Deskripsi & Contoh)
> KELUARAN (Contoh Input Kode & Keluarannya)
> KESIMPULAN
(Kekurangan & Kelebihan dari Compiler)
> Lampiran :
USER MANUAL (Cara Penggunaan Compiler)

Anda mungkin juga menyukai