Anda di halaman 1dari 4

LA 1 Teknik Kompilasi - Leksikal

Analisa Leksikal

Analisis leksikal adalah sebuah proses yang mendahului parsing sebuah rangkaian
karakter. Ia menerima masukan serangkaian karakter (seperti dalam dokumen plain-text
atau source code) dan menghasilkan deretan simbol yang masing-masing dinamakan token;
proses parsing akan lebih mudah dilakukan bila inputnya sudah berupa token.

Analisis leksikal terdiri dari dua tahap. Tahap pertama adalah pemindaian (scanning);
scanner biasanya dibuat berdasarkan prinsip Finite State Machine ("mesin dengan jumlah
keadaan terbatas"). Pada tahap ini, scanner akan membaca input karakter-ke-karakter,
mengubah keadaannya sendiri berdasarkan karakter yang tengah dibaca. Setiap kondisi final
(input dianggap valid) akan dicatat, bersama dengan lokasi input. Pada akhirnya scanner
akan menemui keadaan penolakan, yang tidak akan berubah dengan input karakter apapun.
Deteksi rekursi semacam ini akan mengakhiri proses pemindaian dan memindahkan
keadaan scanner ke keadaan final terakhir, dan karenanya menyimpan informasi jenis dan
besar lexeme valid yang terpanjang di dalam input.

Namun lexeme tersebut belum punya nilai semantik apapun; pemberian nilai semantik
pada setiap unit leksikal adalah tugas dari evaluator yang memeriksa semua karakter setiap
lexeme dan memberinya nilai tertentu. Saat sebuah lexeme telah memiliki informasi
mengenai tipe dan nilainya, ia dapat secara valid disebut sebagai token.

Analisis leksikal membuat pekerjaan membuat sebuah parser jadi lebih mudah
ketimbang membangun nama setiap fungsi dan variabel dari karakter-karakter yang
menyusunnya, dengan analisis leksikal parser cukup hanya berurusan dengan sekumpulan
token dan nilai sintaksis masing-masing. Terlepas dari efisiensi pemrograman yang dapat
dicapai dengan penggunaannya, proses kerja analisis leksikal yang membaca lebih dari sekali
setiap karakter dari input yang diberikan menjadikan penganalisa leksikal sebagai sub-
sistem yang paling intensif melakukan komputasi, terutama bila digunakan dalam sebuah
kompilator.

Kompilator adalah sebuah program yang membaca suatu program yang ditulis dalam
suatu bahasa sumber (source language) dan menterjemah-kannya ke dalam suatu bahasa
sasaran (target language).

1
LA 1 Teknik Kompilasi - Leksikal

Kompilator Interpreter
Contoh: C, C++, java, pascal Contoh: Visual Basic
Menerjemahkan keseluruhan Menerjemahkan instruksi per instruksi
Akan dihasilkan executable program Tidak dihasilkan executable program
Akan dihasilkan object program Tidak dihasilkan object program

Proses kompilasi dapat digambarkan melalui sebuah kotak hitam (black box) berikut :

program sumber kompilator bahasa sasaran

pesan-pesan kesalahan
(error messages)

Fase-fase proses sebuah kompilasi adalah sebagai berikut :

program sumber

penganalisa leksikal
(scanner)

penganalisa sintaks
(parser)

pengelola tabel simbol penganalisa semantik penanganan kesalahan

pembangkit
kode antara

pengoptimal kode

pembangkit kode

bahasa sasaran

2
LA 1 Teknik Kompilasi - Leksikal

Listing Program

Contoh program di bawah ini menggunakan bahasa pemrograman C++. Program ini akan
melakukan penginputan karakter dan akan memunculkan karakter yang telah diinput tadi.

#include<iostream.h>
#include<conio.h>

void main()
{
clrscr();
char nama[40];
cout<<"Masukkan Nama : ";
cin>>nama;
cout<<"Nama anda ";
cout<<nama;
getch();
}

Output Program

Setelah user memasukkan nama, maka tampilan berikutnya adalah sebagai berikut:

Nama yang telah diinput oleh user, akan ditampilkan oleh program.

Analisa Leksikal

# -> t_simbol > -> t_delimiter


include -> t_identifier # -> t_simbol
< -> t_delimiter include -> t_identifier
iostream.h -> t_identifier < -> t_delimiter

3
LA 1 Teknik Kompilasi - Leksikal

conio.h -> t_identifier “ -> t_simbol


> -> t_delimiter ; -> t_simbol
void -> t_identifier cin -> t_identifier
main -> t_identifier >> -> t_simbol
( -> t_delimiter nama -> t_var
) -> t_delimiter ; -> t_simbol
{ -> t_delimiter cout -> t_identifier
clrscr -> t_identifier << -> t_simbol
( -> t_delimiter “ -> t_simbol
) -> t_delimiter Nama anda -> t_string
; -> t_simbol “ -> t_simbol
char -> t_identifier ; -> t_simbol
nama -> t_var cout -> t_identifier
[ -> t_delimiter << -> t_simbol
40 -> t_int nama -> t_var
] -> t_delimiter ; -> t_simbol
; -> t_simbol getch -> t_identifier
cout -> t_identifier ( -> t_delimiter
<< -> t_simbol ) -> t_delimiter
“ -> t_simbol ; -> t_simbol
Masukkan Nama : -> t_string } -> t_delimiter

T_identifier merupakan reserved word dari bahasa pemrograman C++.


T_delimiter merupakan simbol yang bisa diabaikan (dibuang) oleh compiler. Contohnya
tanda kurung, kurung kurawal, kurung siku.
T_simbol merupakan tanda-tanda khusus yang memiliki arti masing-masing.
T_var merupakan token untuk variabel.
T_string merupakan token untuk string, biasanya kalimat yang berada di dalam tanda kutip
atau komentar.
T_int merupakan token untuk menyatakan integer. Biasanya ini menyatakan angka.