Jumat, 26 November 2010

Analisa Leksikal dalam Teknik Kompilasi

Analisa Leksikal (Scanner)
Dalam kaitan ini aliran karakter yang membentuk program sumber dibaca dari kiri ke kanan dan dikelompokkan dalam apa yang disebut token yaitu barisan dari karakter yang dalam suatu kesatuan mempunyai suatu arti tersendiri. Analisa ini melakukan penerjemahan masukan menjadi bentuk yang lebih berguna untuk tahap-tahap kompilasi berikutnya.

Analisa Leksikal merupakan antarmuka antara kode program sumber dan analisa sintaktik (parser). Scanner melakukan pemeriksaan karakter per karakter pada teks masukan, memecah sumber program menjadi bagian-bagian disebut Token. Analisa Leksikal mengerjakan pengelompokkan urutan-urutan karakter ke dalam komponen pokok: identifier, delimeter, simbol-simbol operator, angka, keyword, noise word, blank, komentar, dan seterusnya menghasilkan suatu Token Leksikal yang akan digunakan pada Analisa Sintaktik. Model dasar untuk membentuk suatu Analisa Leksikal adalah Finite-State Automata.

Dua aspek penting pembuatan Analisa Leksikal adalah :

- Menentukan token-token bahasa.

- Mengenali token-token bahasa dari program sumber.

Token-token dihasilkan dengan cara memisahkan program sumber tersebut dilewatkan ke parser. Analisa Leksikal harus mengirim token ke parser. Untuk mengirim token, scanner harus mengisolasi barisan karakter pada teks sumber yang merupakan 1 token valid. Scanner juga menyingkirkan informasi seperti komentar, blank, batas-batas baris dan lain-lain yang tidak penting (tidak mempunyai arti) bagi parsing dan Code Generator.

Scanner juga harus dapat mengidentifikasi token secara lengkap dan membedakan keyword dan identifier. Untuk itu scanner memerlukan tabel simbol. Scanner memasukkan identifier ke tabel simbol, memasukkan konstanta literal dan numerik ke tabel simbol sendiri setelah konversi menjadi bentuk internal.

Analisa Leksikal merupakan komponen kompilasi independen yang berkomunikasi dengan parser lewat antarmuka yang terdefinisi bagus dan sederhana sehingga pemeliharaan analisa leksikal menjadi lebih mudah dimana perubahan-perubahan terhadap analisa leksikal tidak berdampak pada pengubahan kompilator secara keseluruhan. Agar dapat memperoleh fitur ini, maka antarmuka harus tidak berubah. Kebanyakan kode yang menyusun analisa leksikal adalah sama untuk seluruh kompilator, tidak peduli bahasa.

Pada analisa leksikal yang dituntun tabel (table-driven lexical analyzer), maka satu-satunya yang berubah adalah tabel itu sendiri. Kadang diperlukan interaksi analisa leksikal dan analisa sintaktik yang lebih kompleks. Sehingga analisa leksikal harus dapat menganggap string sebagai token bertipe, bukan identifier. Untuk itu perlu komunikasi tingkat lebih tinggi yang biasanya dilakukan suatu struktur data dipakai bersama seperti tabel simbol.

Analisa Sintaktik dapat memasukkan string ke tabel simbol, mengidentifikasi sebagai Type atau typedef, sehingga analisa leksikal dapat memeriksa tabel simbol untuk menentukan apakah lexeme adalah tipe token atau identifier.


Tugas tugas analisa leksikal antara lain :
  1. Melakukan pembacaan kode sumber dengan merunut karakter demi karakter.
  2. Mengenali besaran leksik (identifier, keywords, dan konstanta).
  3. Mentransformasi menjadi sebuah token dan menentukan jenis tokennya.
  4. Mengirimkan token.
  5. Membuang atau mengabaikan white-space dan komentar dalam program.
  6. Menangani kesalahan.
  7. Menangani tabel simbol.

Tidak ada komentar:

Posting Komentar