Anda di halaman 1dari 16

MEET #3 TEKNIK KOMPILASI

ANALISA LEKSIKAL
(SCANNER)
Dewi Widyawati, S.Kom., M.Kom
DEFINISI ANALISIS LEKSIKAL (SCANNER)
 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 ini melakukan penerjemahan masukan menjadi bentuk
yang lebih berguna untuk tahap- tahap kompilasi berikutnya.
 Imagine recognizing “while” as ‘w’ ‘h’ ‘i’ ‘l’ ‘e’ .
STRUKTUR KOMPILER
PENGENALAN TOKEN
 Sebuah token (lexeme or syntactic unit) adalah komponen dasar
leksikal dari program. Token adalah himpunan karakter yang
mempunyai arti khusus, dapat berupa :
• Kata kunci (key word), operator, identifier constant, rangkaian
huruf (literal string);
• Simbol baca, misalnya tanda kurung, koma, titik koma, dsb.
 Misal: fi(a = = f(x)) dalam bahasa C, maka lexical analyzer
(Analisa Lexical) tidak dapat menjelaskan apa fi tersebut betul
sebagai identifier atau salah eja yang seharusnya adalah if.
 Kesalahan ini akan dideteksi di fase lain yakni parser.
JENIS TOKEN
 Identifier (e.g. variable & function names, etc.)
 Keywords (like while, if, function, etc.)
 Operators (like +, -, *, ++, +=, etc.)
 Literals (constant values like 27.3, "Hello", etc.)
 Punctuation (like kurung-buka, kurung-tutup, titik, koma, titik-
dua, titik-koma).
 Delimiter . Berguna sebagai pemisah/ pembatas, pemisah yang
diabaikan oleh program, seperti (white-space). enter, spasi, ganti
baris, akhir file
Contoh Analisa Leksikal
TUGAS ANALISA LEKSIKAL
1. Membaca program sumber karaker demi karakter atau dari
satu state ke state yang lain.
2. Membaca karakter input & menghasilkan token.
3. Membuang komentar, spasi, tab, newline dan karakter lain
yang 'tak berguna'.
4. Menghubungkan pesan kesalahan kompilator dengan
program sumbernya. Contoh: baris dari program.
5. Mengenali identifier dan keyword. Menangani tabel simbol.
– Identifier = variables, arrays, function, token, dll
– Keyword = fixed characters: begin, end, if, dll.
TUGAS ANALISA LEKSIKAL
 Konversi program sumber menjadi barisan token mengubah
program sumber yang dipandang sebagai barisan
byte/karakter menjadi token.
 Menangani kerumitan sistem masukkan/keluaran karena
analisis leksikal biasanya berhubungan langsung dengan
kode sumber yang diwadahi file, maka analisis leksikal juga
bertindak sebagai benteng untuk komponen-komponen lain
di kompilator dalam mengatasi keanehan-keanehan sistem
masukkan/keluaran sistem operasi dan sistem komputer.
FUNGSI SCANNER
1. Melakukan pembacaan kode sumber dengan merunut karakter
demi karakter
2. Mengenali besaran leksik.
3. Mentransformasi menjadi sebuah token dan menentukan jenis
tokennya.
4. Mengirim token.
5. Membuang blank dan komentar dalam program.
6. Menangani kesalahan.
7. Beberapa scanners memasukkan simbol ke dalam tabel simbol
(dibahas kemudian).
Contoh Analisa Leksikal
Token:
 latihan, tugas merupakan identifiers
 Package, public, class, static, void,
main, String, args,
System.out.println merupakan
keywords
 Hello, World merupakan literals
 “{“, “}”, “[“,”]”, “(“, “)”, “;”
merupakan punctuation
Scanning Berdasarkan Finite State Machine
 Hampir sebagian besar teknik yang digunakan untuk membangun
scanners menggunakan mesin stata hingga (MSHs)
 MSHs dapat dengan mudah digunakan untuk mengenali
kontruksi bahasa (i.e. tokens) yang digambarkan dengan bahasa
regular

MSH/FSM (Finite State Machine) adalah sebuah varians


automata hingga. MSH sering juga disebut sebagai automata
hingga beroutput atau mesin sekuensial.
Membangun Scanner
 Bagaimana scanner berinteraksi dengan parser?
– parser akan menjadi bagian selanjutnya dari kompilasi
 Perhatikan gambar berikut:
Aksi Scanner (1)
 Karena scanner mengubah dari state ke state, maka harus dilakukan
sesuatu dengan karakter-karakter tersebut untuk mengenali sesuai
dengan pembentukan token yang akan dikembalikan pada tahap
parser.
 Dalam beberapa kasus, harus menambahkan character seperti terlihat
pada pembentukan token dan memanfaatkannya (menjadikan
karakter masukan berikutnya menjadi kelihatan) – E.g. when scanning
characters in an identifier.
Aksi Scanner (2)
 Dalam kasus lainnya harus menjaga character dan mengembalikan
dalam token lengkap.
 Aksi kemungkinan lainnya adalah menghilangkan karakter agar lebih
sederhana – E.g. karakter pada komentar.
Latihan
Thankyou !

Anda mungkin juga menyukai