ANALISA LEKSIKAL
Pengertian analisa leksikal
Analisis leksikal atau scanner bertugas mengidentifikasi semua besaran pembangun bahasa (leksikal) yang ada pada kode sumber (source code). Scanner menerima masukan kode sumber berupa serangkaian karakter kemudian memilah-milahnya ke dalam satuan leksikal, yaitu token. Token-token ini akan menjadi masukan bagi analisis selanjutnya yaitu analisis sintaksis. Dari fungsi scanner secara umum seperti telah disebutkan di atas, maka tugas scanner secara rinci adalah:
1. membaca serangkaian karakter dari kode sumber
2. mengenalinya ke dalam satuan leksikal
3. mengubahnya menjadi token dan menentukan jenis tokennya.
4. mengirimkan token ke proses analisis selanjutnya, yaitu analisis sintaksis
5. mengabaikan karakter white space (spasi, enter, ganti baris, penanda akhir file) dan komentar (remark) apabila ada di dalam kode sumber
6. menangani kesalahan
7. menangani tabel simbol Scanner bekerja berdasarkan prinsip mesin finite state automata (FSA). Diagram keadaan dapat digunakan untuk membantu mengkonstruksi scanner.
Besaran pembangun bahasa (leksikal) meliputi:
1. Identifier
Identifier atau pengenal dapat berupa: a. kata tercadang atau kata kunci (reserve word) yang telah didefinisikan oleh bahasa pemrograman b. kata yang dideklarasikan sendiri oleh pemakai (si pembuat program) disebut dengan variabel. Contoh (dalam bahasa Pascal) var nama : string alamat : string jumlah_anak : byte nominal_tabungan : real begin clrscr; end. Dari contoh di atas, maka identifier yang dideklarasikan sendiri oleh pemakai (variabel) adalah: nama, alamat, jumlah_anak, dan nominal_tabungan. Sedangkan identifier kata tercadang (reserve word) adalah: var, string, byte, real, begin, clrscr, dan end.
Contoh :
begin dan end
di bahasa Pascal →kata tercadang di bahasa
C → boleh digunakan untuk nama variabel
{ dan }
di bahasa Pascal → ‘kata’ lebih tepatnya delimiter atau pembatas untuk memberikan komentar pada kode sumber.
di bahasa C → delimiter untuk mengawali dan mengakhiri sebuah blok program
2. Nilai konstanta
Nilai konstanta disini dapat berupa: integer, real, boolean, character, string, dan sebagainya. Melalui contoh berikut ini, bedakan antara nilai (atau isi) dengan variabel yang digunakan untuk menyimpannya.
Contoh :
(dalam bahasa Pascal)
hitung_luas := panjang * lebar; x := 1000;
ulang := false;
luas_lingkaran := 3.14 * jejari * jejari;
nama := budi hartono;
Dari contoh di atas, maka: 1000, false, 3.14, ’budi hartono’ termasuk besaran leksikal berupa nilai konstanta. Sedangkan hirung_luas, panjang, lebar, x, ulang, luas_lingkaran, jejari, dan nama termasuk besaran leksikal identifier variabel.
3. operator dan delimineter
Operator aritmatika ( +, -, *, / )
Operator logika (<, =, >, <=, >=, !=, <>)
Delimiter berguna sebagai pemisah atau pembatas, contoh:
Karakter sebagai berikut ( ) { } ; . , :
Karakter white space, antara lain:
karakter spasi → kode ASCII 32
karakter enter (carriage return) → kode ASCII 13
karakter ganti baris (line feed) karakter penanda akhir file (end of file)
Implementasi Analisis Leksikal
1. Pengenalan Token o Scanner harus dapat mengenali token o Terlebih dahulu dideskripsikan token-token yang harus dikenali
2. Pendeskripsian Token o Menggunakan reguler grammar. Menspesifikasikan aturan-aturan pembangkit token-token dengan kelemahan reguler grammar menspesifikasikan token berbentuk pembangkit, sedang scanner perlu bentuk pengenalan. o Menggunakan ekspresi grammar. Menspesifikasikan token-token dengan ekspresi reguler. o Model matematis yang dapat memodelkan pengenalan adalah finite- state acceptor (FSA) atau finite automata.
3. Implementasi Analisis Leksikal sebagai Finite Automata Pada model analisis leksikal sebagai pengenal yang menerapkan finite automata, analisis leksikal tidak hanya mengatakan YA atau TIDAK. Analisis leksikal dapat dibangun dengan menumpangkan pada konsep pengenal yang berupa finite automata dengan cara menspesifikasikan rutin-rutin (aksi-aksi) tertentu terhadap string yang sedang dikenali.
4. Penanganan Kesalahan di Analisis Leksikal
Hanya sedikit kesalahan yang diidentifikasi di analisis leksikal secara mandiri karena analisis leksikal benar-benar merupakan pandangan sangat lokal terhadap program sumber. Bila ditemui situasi dimana analisis leksikal tidak mampu melanjutkan proses karena tidak ada pola token yang cocok, maka terdapat beragam alternatif pemulihan. Alternatif pemulihan tersebut adalah: o "Panic mode" dengan menghapus karakter-karakter berikutnya sampai analisis leksikal menemukan token yang terdefinisi bagus o Menyisipkan karakter yang hilang o Mengganti karakter yang salah dengan karakter yang benar o Mentransposisikan 2 karakter yang bersebelahan.
Salah satu cara untuk menemukan kesalahan pada program adalah menghitung jumlah transformasi kesalahan minimum yang diperlukan untuk mentransformasikan program yang salah menjadi program yang secara sintaks benar.
Input Buffering
Perancangan analisis leksikal seharusnya dapat membuat buffering masukkan yang membantu mempercepat proses pembacaan dari file serta mempunyai fleksibelitas yang tinggi agar analisis leksikal tidak bergantung platform sehingga mempunyai portabilitas yang tinggi.
Cara umum untuk membentuk suatu penganalisis leksikal adalah :
- dengan membuat suatu diagram yang menggambarkan struktur token dari suatu bahasa sumber, dan
- kemudian menerjemahkan diagram tersebut secara manual ke dalam program untuk mencari token tersebut.

Komentar
Posting Komentar