Mar 17

Kompilasi merupakan sebuah proses membaca sebuah program yang ditulis dalam bahasa tertentu(source language) dan kemudian menterjemahkannya ke bahasa yang ditargetkan (target language). Contoh nya source language dalam bahasa PASCAL diterjemahkan ke dalam target language asembly.

Proses kompilasi sebuah bahasa tersebut dapat dibagi ke dalam beberapa tahap, seperti yang tertera pada diagram berikut :

1. Lexical Analyzer

Lexical Analyzer merupakan proses membaca rangkaian kata pada code kemudian mengubah nya menjadi rangkaian token. Token yang dimaksud adalah serangkaian kata yang bermakna. Token ini akan didefinisikan oleh aturan masing-masing bahasa menggunakan regular expression.

Contoh lexical Analyzer :

Luas = panjang * lebar;

oleh lexical analyzer code diatas akan diubah menjadi token berikut :

id1 : Luas

asignment operator : =

id2 : panjang

arithmatic operator : *

id3 : lebar

akhir statement : ;

2. Syntax Analyzer

Syntax Analyzer merupakan tahapan mengubah token menjadi sebuah struktur program, biasanya dalam bentuk sebuah tree yang dilakukan dengan mengacu pada teori context-free grammar. Proses ini dilakukan secara rekursif dengan menentukan komponen mana yang bisa menjadi sebuah expresi dan bagaimana urutan kemunculan masing-masing nya. Ekspresi ini dapat berupa sebuah variabel atau merupakan sebuah operator.

Contoh Syntax Analyzer :

3. Semantic Analyzer

Jika syntax memberikan struktur dan expresi, maka semantic analyzer memberikan informasi atau arti bagi setiap token yang ada pada tree. Pada tahap dilakukan beberapa proses berikut :

  • Type check error : melakukan pengecekan pada kesalahan pengetikan
  •  Object binding : melakukan pengecekan apakai variabel dan fungsi telah sesuai dengan apa yang didefinisikan, misalnya range nilai untuk data tipe apakah sesuai dengan aturan bahasa.
  •  definite asignment : mengharuskan setiap variabel yang akan digunakan telah dinisialisasi terlebih dahulu

4. Intermediate Code Generator

Merupakan kode perantara sebelum source code diubah ke target source. Intermediate code generator biasanya akan kompleks dibandikan source code namun lebih simpel jika dibandingkan dengan target source. Pada tahap intermediate ini code dapat direpresentasikan dengan tiga cara yaitu :

  • Syntax tree
  • Postfix notation
  • Three address code

Biasanya Intermediate code ini ditulis dengan aturan three address code yaitu x= y op z. Artinya hanya ada 3 variabel dan satu operator.

Contoh jika ada statement  profit = totalBarang * harga – diskon maka akan menjadi :

temp 1 = totalBarang * harga

profit = temp 1 – diskon

5. Code Optimization

Optimization ada proses merubah code yang ada ke dalam bentuk yang lebih effisien baik dari segi waktu atau pun ruang memori yang digunakan tanpa merubah hasil akhirnya. Proses ini akan membuat code yang ada menjadi lebih baik dan efisen tapi tidak menjadi sempurna, karena code optimization tetap bergantung pada bagaimana si programmer merancang code nya.

Banyak cara yang dapat dilakukan untuk dapat mengoptimalkan suatu code, bergantung kepada kasus yang dihadapi. Salah satu tipe optimasi ada dengan machine independent optimization yang berfokus pada memaksimalkan kode yang ada. Optimasi dengan tipe ini dapat berupa :

– menghilangkan expresi yang redundant

contoh :

a = b + c                            disederhanakan menjadi : a= b + c

d = e + b + c                                                                           d= e + a

– optimasi perulangan

contoh :

for(int i=0; i< 3 ;i ++ )              dapat disederhanakan menjadi : a[0] =1, a[1]=2, a[2]=3

{

      a[i] = i;

}

– memindahkan operasi ke tempat yang jarang dieksekusi

6. Code Generator

Tahap ini merupakan proses dimana intermediate code akan diubah kedalam bahasa mesin agar dapat dieksekusi oleh mesin. Pada tahap ini juga masih bisa dilakukan code optimization untuk menambah efisiensi code. Proses-proses utama yang ada pada tahap ini adalah instruction selection (memilih instruksi sesuai tree) , instruction scheduller (mengatur urutan pemberian instruction), dan register allocation (alokasi variabel ke registrasi prosesor) .

 
binus.ac.id

Leave a Reply