Tahapan pada Teknik Kompilasi


Analisis sintak lebih sering disebut penguraian (parsing). Tujuan utama dari analisis sintak adalah memeriksa apakah urutan token-token yang dihasilkan sesuai dengan tata bahasa dari bahasa yang bersangkutan. Misalnya bahasa C mengenal kalimat: jumlah++; yang berarti menaikkan harga variabel jumlah dengan angka satu. Tetapi kalimat di atas akan salah jika dikompilasi dengan kompilator bahasa Pascal, karena tidak sesuai dengan tata bahasa Pascal.

Dalam analisis sintak, tata bahasa yang digunakan untuk mendefinisikan aturan sintak suatu bahasa disebut tata bahasa bebas konteks (Context Free Grammar). Tata bahasa ini memiliki empat komponen penting yaitu himpunan simbol terminal, himpunan non-terminal, himpunan produksi dan simbol awal. Dalam bahasa pemrograman, yang disebut terminal adalah token. Contoh terminal adalah token. Contoh token misalnya kata kunci (keyword) if, while, dan identifier serta bilangan. Sedangkan non-terminal merupakan variabel-variabel sintak yang menyatakan himpunan terminal maupun non-terminal. Dalam proses parsing terjadi proses penggantian suatu non terminal dengan sederetan himpunan non terminal dan terminal yang berada dalam sisi kanan produksnya. Proses ini disebut sebagai derivasi. Contohnya non-terminal if_stmt merupakan himpunan terminal if, then, else, dan non-terminal expr dan stmt, yang membentuk aturan produksi : if_stmt ?? if expr then stmt else stmt. Dari semua simbol non-terminal yang digunakan, ada satu simbol yang bertindak sebagai simbol awal, yaitu simbol yang pertama kali diderivasi. Aturan produksi menggambarkan bagaimana kombinasi non-terminal dan terminal yang benar menurut tata bahasa yanbg bersangkutan. Dalam proses penguraian, token-token yang dihasilkan dalam analisis leksikal dibentuk menjadi pohon urai (parse tree). 

Pohon urai merupakan hasil derivasi dari aturan –aturan produksi. 
Ada dua jenis derivasi, yaitu derivasi terkiri (Left Most Derivation) dan derivasi terkanan (Right Most Derivation). Derivasi terkiri akan menderivasi suatu aturan produksi mulai dari non-terminal yang paling kiri. Sedangkan derivasi terkanan akan menderivasi suatu aturan produksi mulai dari non-terminal yang paling kanan. 
Jika proses derivasi aturan-aturan produksi suatu tata bahasa terhadap suatu masukan menghasilkan lebih dari satu pohon urai maka tata bahasa tersebut dikatakan rancu (ambiguous).
 Proses Analisis Simantik
 
Analisa semantik berperan dalam memeriksa kesalahan yang bersifat semantic. Salah satu peranannya analisa semantic yang penting adalah pemeriksaan tipe variable. Contohnya operator * hanya digunakan untuk operan dengan tipe integer ataupun real. Sedangkan operator and,  or, digunakan untuk operand dengan tipe boolean.

Penganalisaan semantik dapat dilakukan dengan dua bentuk notasi yaitu : DBS(Defenisi Berdasarkan Sintaks) dan Skema Translasi.
DBS merupakan tata bahasa dengan himpunan aturan semantic yang akan menentukan struktur sintaks dari suatu masukan, sedangkan Skema Translasi adalah suatu tata bahasa bebas konteks dengan penyisipan suatu bagian program, yang disebut aksi semantik, pada sisi kanan produksi. 
Fungsi dari analisa semantik adalah untuk menentukan makna dari serangkaian instruksi yang terdapat dalam program sumber. Untuk mengetahui makna, maka rutin analisa semantik akan memeriksa :
a.  Apakah variabel yang ada telah didefenisikan didefenisikan sebelumnya
b.  Apakah variabel-variabel tersebut tipenya sama
c.  Apakah operan yang akan dioperasikan tersebut ada nilainya dan seterusnya.
Pengecekan yang dilakukan oleh analisa semantik adalah:
Ø  Memeriksa pemberlakuan nama-nama yang meliputi Duplikasi (pengecekan apakah sebuah nama terjadi duplikasi) dan Terdefenisi (Pengecekan apakah sebuah nama yang dipakai pada tubuh program sudah terdefenisi atau belum)
Ø  Memeriksa tipe disini dilakukan pemeriksaan misal dalam penjumlahan 
A+ B = C disini diperiksa apakah A,B dan C bertipe number atau tidak. 
Setelah pengecakan dilakukan dan proses analisa semantik akan beraksi maka dibutuhkan tabel simbol. Tabel simbol digunakan untuk pembuatan dan implementasi dari analisa semantik Tabel simbol berfungsi untuk :
v  Menyimpan inforamasi tentang :
·  Nama variabel dan tipe datanya
·  Informasi detail untuk record dan array 
·  Nama prosedur dan fungsi yang ada 
·  Jumlah, nama, tipe data dan parameter fungsi/prosedur
·  Nama label
·  Konstanta dan String
v  Membantu memeriksa kebenaran semantic dari source code
v  Membantu mempermudah dalam pembuatan intermediate code dan code
generation.


Dalam analisis sintak, tata bahasa yang digunakan untuk mendefinisikan aturan sintak suatu bahasa disebut tata bahasa bebas konteks (Context Free Grammar). Tata bahasa ini memiliki empat komponen penting yaitu himpunan simbol terminal, himpunan non-terminal, himpunan produksi dan simbol awal. Dalam bahasa pemrograman, yang disebut terminal adalah token. Contoh terminal adalah token. Contoh token misalnya kata kunci (keyword) if, while, dan identifier serta bilangan. Sedangkan non-terminal merupakan variabel-variabel sintak yang menyatakan himpunan terminal maupun non-terminal. Dalam proses parsing terjadi proses penggantian suatu non terminal dengan sederetan himpunan non terminal dan terminal yang berada dalam sisi kanan produksnya. Proses ini disebut sebagai derivasi. 

Contohnya non-terminal if_stmt merupakan himpunan terminal if, then, else, dan non-terminal expr dan stmt, yang membentuk aturan produksi : if_stmt ?? if expr then stmt else stmt. Dari semua simbol non-terminal yang digunakan, ada satu simbol yang bertindak sebagai simbol awal, yaitu simbol yang pertama kali diderivasi. Aturan produksi menggambarkan bagaimana kombinasi non-terminal dan terminal yang benar menurut tata bahasa yanbg bersangkutan. Dalam proses penguraian, token-token yang dihasilkan dalam analisis leksikal dibentuk menjadi pohon urai (parse tree).



Pohon urai adalah pohon binari, pohon yang setiap nodenya, jika terpecah maka terpecah maksimal dalam dua pecahan node.


Pohon urai dilakukan berdasarkan:
Blok demi blok
Kurung demi kurung
Operasi demi operasi
Ekspresi demi ekspresi.

Blok demi blok, dimulai dengan blok terluar sebagai node awal, lalu urai ke blok2 berikut. Lalu dari setiap blok diurai ekspresi demi ekspresi.

Pada suatu ekspresi, bila dinyatakan sebagai kurung demi kurung, maka dibuat anak pohon baru (yg bisa tetap tersambung induknya atau terpisah) yang menyatakan pohon kurung demi kurung mulai dengan kurung dengan prioritas tertinggi sebagai node paling awal.

Pada suatu eksprsi jika terdapat ekspresi yang mengandung operasi2, maka dilakukan pembentukan anak pohon baru (yg boleh tersambung dengan induk atau terpisah), kemudian pohon dibentuk berdasrkan prioritas operasi. Node awal diisi oleh operasi dengan prioritas tertinggi.

Bagaimana analisis sintaks berhubungan dengan analisis leksikal?
Pertama:
Analisis leksikal menghasilkan senarai token.

Kedua:
Parser pada analisis sintaks, menerima/membaca token satu persatu, tidak langsung satu baris string.

Ketiga:
Setiap token yang terbaca, parser menebak aturan produksi yang mesti digunakan untuk, lalu parser berdasrkan aturan produksi itu menghasilkan string sementara.
Hingga jika terbaca sebuah token dimana hasil string sementara yang diperoleh tepat sama dengan barisan string yang hendak dibaca, maka string tersebut diterima.

Komentar

Postingan populer dari blog ini

Tugas Individu Teknik Kompilasi (E)

Matriks

Rangkaian Listrik Pasif dan Aktif