Kamis, 25 April 2013

Tugas Analisis Leksikal

NAMA : LISA OKTAVIA SUNARYA
NPM : 14110046
KELAS : 3KA33

ANALISIS LEKSIKAL

Analisis Leksikal merupakan antarmuka antara kode program sumber dan analisis sintaktik (parser). Scanner melakukan pemeriksaan karakter per karakter pada teks masukan, memecah sumber program menjadi bagian-bagian disebut Token.

Analisis 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 Analisis Sintaktik.

Model dasar untuk membentuk suatu Analisis Leksikal adalah Finite-State Automata.

2 aspek penting pembuatan Analisis Leksikal adalah:
- Menentukan token-token bahasa.
- Mengenali token-token bahasa dari program sumber.

Tahap Pelaksanaan Analisis Leksikal
- Pada single one pass
Terjadi interaksi antara scanner dan parser. Sacnner dipanggil saat parser memerlukan token berikutnya. Pendekatan ini lebih baik karena bentuk internal program sumber yang lengkap tidak perlu dibangun dan disimpan di memori sebelum parsing dimulai.

- Pada separate pass
Scanner memproses secara terpisah, dilakukan sebelum parsing. Hasil scanner disimpan dalam file. Dari file tersebut, parsing melakukan kegiatannya.

Scanner mengirim nilai-nilai integer yang mempresentasikan bentuk internal token, bukan nilai-nilai string.

Keunggulan cara ini adalah ukurannya kecil dan tetap. Parser sangat lebih efisien bekerja dengan nilai integer yang mempresentasikan simbol daripada string nyata dengan panjang variabel.


Implementasi Analisis Leksikal

1. Pengenalan Token
- Scanner harus dapat mengenali token
- Terlebih dahulu dideskripsikan token-token yang harus dikenali

2. Pendeskripsian Token
- Menggunakan reguler grammar. Menspesifikasikan aturan-aturan pembangkit token-token dengan kelemahan reguler grammar menspesifikasikan token berbentuk pembangkit, sedang scanner perlu bentuk pengenalan.

- Menggunakan ekspresi grammar. Menspesifikasikan token-token dengan ekspresi reguler.

- Model matematis yang dapat memodelkan pengenalan adalah finite-state acceptor (FSA) atau finite automata.

3. Implementasi Analisis Leksikal sebagai Finite Automata
Pada pemodelan analisis leksikal sebagai pengenal yang menerapkan finite automata, analisis leksikal tidak cuma hanya melakukan mengatakan YA atau TIDAK. Dengan demikian selain pengenal, maka analisis leksikal juga melakukan aksi-aksi tambahan yang diasosiasikan dengan string yangsedang diolah.

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. yaitu:

- "Panic mode" dengan menghapus karakter-karakter berikutnya sampai analisis leksikal menemukan token yang terdefinisi bagus

- Menyisipkan karakter yang hilang

- Mengganti karakter yang salah dengan karakter yang benar

- Mentransposisikan 2 karakter yang bersebelahan.

Salah satu cara untuk menemukan kesalahan-kesalahan di program adalah menghitung jumlah transformasi kesalahan minimum yang diperlukan untuk mentransformasikan program yang salah menjadi program yag secara sintaks benar.
 
Sumber : http://www.globalkomputer.com/Bahasan/Teknik-Kompilasi/Topik/Analisis-Leksikal.html

Dibawah ini contoh pemograman sederhana untuk analisisleksikal menggunakan pemograman java


Source Codenya


Output Programnya :



Logika :
Dimana :
·         Import javax.swing, digunakan untuk memanggil prosedure pada java.
·         Public class menu, digunakan untuk memanggil prosedure menu.
·         Public static void main (String arg[]), digunakan untuk membuat objek pada class prosedure.
·      String nama = JoptionPane.showInputDialog (“nama=”), yang berarti akan menampilkan data nama anda pada layar monitor, serta dapat menginput data nama.
·         String npm = JoptionPane.showInputDialog (“npm=”), yang berati bahwa akan memunculkan data npm pada monitor, serta dapat mengisi data npm anda.
·         String kelas = JoptionPane.showInputDialog (“kelas=”), yang berarti kan menampilkan data kelas pada layar anda, serta dapat menginput data kelas.
·         JoptionPane.showMessageDialog(null,”nama anda= “ +nama+”\npm anda = “ +npm+”\nkelas anda, yang berarti bahwa saat kita meng-running program tersebut akan muncul data nama anda, npm anda dan data kelas anda dengan membacanya ke bawah.
·         JoptionPane.showMessageDialog(null,”nilai anda: “ +bil+”\genap”) yang berarti bahwa saat kita meng-running program tersebut akan muncul data nilai anda dan akan keluar data-data bilangan genap bila kita menulis angka genap.
·         JoptionPane.showMessageDialog(null,”nilai anda: “ +bil+”\ganjil”) yang berarti bahwa saat kita meng-running program tersebut akan muncul data nilai anda dan akan keluar data-data bilangan ganjil bila kita menulis angka ganjil.
·         JoptionPane.showInputDialog(“Masukkan angka:”) yang berarti bahwa saat kita meng-running program tersebut akan muncul data “Masukkan angka:” pada layar.
·         Exit, digunakan untuk keluar dari program menu tersebut.
·         }, tanda tersebut berfungsi untuk menutup program tersebut.