0% menganggap dokumen ini bermanfaat (0 suara)
118 tayangan19 halaman

Lexical Analysis

Analisis leksikal adalah proses yang membaca karakter demi karakter untuk mengidentifikasi token. Token kemudian disimpan dalam tabel simbol untuk mempermudah parsing. Analisis leksikal mengubah input teks menjadi bentuk yang lebih mudah diproses.

Diunggah oleh

nazrul_103650772
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
118 tayangan19 halaman

Lexical Analysis

Analisis leksikal adalah proses yang membaca karakter demi karakter untuk mengidentifikasi token. Token kemudian disimpan dalam tabel simbol untuk mempermudah parsing. Analisis leksikal mengubah input teks menjadi bentuk yang lebih mudah diproses.

Diunggah oleh

nazrul_103650772
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 19

Analisis leksikal (bahasa Inggris: lexical analysis) 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.


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 parser jadi lebih
mudah; daripada 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.
PERANAN LEXICAL ANALYZER (Scanner)

Membaca source program (input stream), mengenali,


mengidentifikasi lexeme (word) kemudian meng-
hasilkan rangkaian token sebagai output.

Scanner biasanya diimplementasikan dalam bentuk


subroutine dari program Parser
TUGAS LAIN LEXICAL ANALYZER

1.Membuang comment dan white space (blank, tab <indent>,


dan newline character).
2.Menghasilkan error messages.

BEBERAPA ISU DALAM LEXICAL ANALYSIS

1Alasan mengapa Lexical Analysis dipisahkan dari Syntax


Analysis :

1. Desain kompiler menjadi lebih sederhana.


2. Efisiensi kompiler meningkat
3. Portabilitas kompiler meningkat
TOKEN, PATTERN DAN LEXEME

Token (simbol atomic) :


Bagian terkecil yang dikenal oleh scanner. Token
dapat berupa bilang-an atau konstanta string
(x=makan, y=minum),literal(’a’,”lampet”), operator (+,-
,*,/,%, sqr, sqrt, exp, sin, cos,tan),exclamation(! ?),
functuation (; , . : ), keywords (begin, end, write, read,
var, cin, cout, if, while, for, {, }), karakter ganda
(:=,<>,+=,=+,--,++,!=,==,**,), identifier (proc, var,
name, const, type).
Lexeme :
Rangkaian karakter (word) yang sama (“matched”)
dengan pola (“pattern”) suatu token
Pattern :
Suatu pola/ rules/ aturan yang menggambarkan
struktur suatu token
Contoh : const pi = 3.14;
ATRIBUT-ATRIBUT TOKEN

Informasi tentang token (biasanya single atribut)


Dibutuhkan pointer untuk load/ store dalam simbol table entry
Lexeme sebuah identifier dan line number akan tersimpan dalam
simbol table entry

dituliskan : <token,attribut,value>
Contoh : E := M * C ** 2

Token-token yang akan dihasilkan :


< id, pointer to symbol table untuk E >
< assign_op, := >
< id, pointer to symbol table untuk M >
< mult_op, * >
< id, pointer to symbol table untuk C >
< exp_op, ** >
< num, integer value 2 >
INPUT BUFFERING

Fungsi : menyimpan hasil scanning untuk


menemukan token.
Untuk menemukan 2 token digunakan 2 pointer :
 Pointer forward :
menunjuk akhir token
 Pointer lexeme_beginning :
menunjuk awal token

Buffer hanya menampung satu baris perintah, dan


berhubungan dengan simbol table.
STRATEGI ERROR-RECOVERY
1. Menghapus suatu karakter yang tidak sesuai hingga ditemukan
suatu token yang sesuai
2. Menyisipkan sebuah karakter yang hilang.
3. Mengganti suatu karakter yang salah dengan karakter yang benar.
4. Menukarkan dua karakter yang berdampingan.

SYMBOL TABLE
 Symbol table adalah suatu struktur data yang digunakan untuk
menyim-pan informasi tentang komponen (token) suatu source
program.
 Informasi yang dimaksud :
- Lexeme (word)
- Bentuk identifier
Type identifier (procedure, variable, label)
Posisi penyimpanan
 Interaksi dengan simbol table
SYMBOL TABLE INTERFACE
Rutin untuk operasi Save dan Retieve terhadapa Lexeme adalah :
insert (s,t): menghasilkan indeks entry baru untuk string s, token t
lookup (s) : menghasilkan indeks entry baru untuk string s, atau 0
bila s tak ditemukan.

RESERVED KEYWORDS HANDLING


Reserved keywords disimpan dalam symbol-table saat inisialisasi
proses kompiler.
contoh rutin yang menangani reserved keywords :
insert (“div”, div_sym)
insert (“mod”, mod_sym)
Sehingga bila dilakukan
lookup(“div”)
 menghasilkan token div_sym
 div tidak bisa digunakan sebagai identifier
IMPLEMENTASI SYMBOL TABLE
Symbol table harus memungkinkan penambahan / pencarian yang efisien
Bisa diimplementasikan dengan : Array, List.

SPESIFIKASI TOKEN
STRING DAN LANGUAGES
Alphabet class adalah suatu himpunan terbatas dari simbol-simbol.
String adalah rangkaian simbol-simbol dari alpabetik.
Panjang string S ditulis dengan |S| adalah banyaknya simbol dalam string s
misalnya : S=abc maka |S| = 3.
Empty string ditulis dengan  dengan panjang string nol (0)
Empty set ditulis dengan Ø atau {}

Concatenation adalah menggabung 2 buah atau lebih string.


Contoh : x=dog dan y=house maka concatenation x dan y adalah doghouse

Himpunan {0,1} adalah binary alphabet


ISTILAH-ISTILAH PENTING STRING
Contoh : Bila s = abc, maka
prefix s : ε, a, ab, abc
proper prefix s : a, ab
suffix s : abc, bc, c, ε
proper suffix s : bc, c
substring s : prefix s  suffix s  b
: ε, a, ab, abc, bc, c, b
proper substring s : substring s – abc - ε
subsequence s : substring s  ac

EKSPONENSIASI STRING
s0 = ε
s1 = s untuk i > 0, maka
s2 = ss si = si-1s
s3 = sss
sehingga : Ln = Ln-1 L dan L0 = {}
BEBERAPA OPERASI TERHADAP BAHASA

Union ()
Concatenation (.)
Closure :
- Kleene Closure (*)
Kleene closure dari L adalah L*

- Positive Closure (+)


Positive closure dari L adalah L+
~
REGULAR EXPRESSION (RE)
Digunakan untuk mendefenisikan set dan token-token dari suatu bahasa.
Misalnya :
Token identifier ditulis dengan :
letter ⇒letter (letter | digit)*
dimana :
letter ={a,b,..,z, A,B,C,...,Z}
digit ={0,1,2,...,9}
| berarti “atau”
( ) berarti subexpression
* berarti “nol atau lebih”

SIFAT-SIFAT R.E.
r|s = s|r
r|(s|t) = (r|s)|t
(rs)t = r(st)
r(s|t) = rs|rt
r = r  = r
r* = (r|)*
r** = r*
r* = r +|
r+ = rr*
Contoh : alphabet  = {a, b}
1. RE ab menyatakan himpunan {a,b}
2. RE (a|b)(a|b) menyatakan {aa,ab,ba,bb}
3. RE a* menyatakan {ε,a,aa,aaa,...}
4. RE a+ menyatakan {a,aa,aaa,...}
5. RE (a|b)* menyatakan himpunan
string yang terdiri dari nol atau
beberapa a atau beberapa b.
6. RE a|(a*b) menyatakan himpunan string yang terdiri dari a
atau beberapa a, diikuti oleh sebuah b.

REGULAR DEFINITION (RD)

RD adalah suatu sekuensi/ rangkaian definisi dalam bentuk :


d1  r1 dimana : di nama unik ri
d2  r2 r1 yaitu RE yang terdiri dari
........... simbol-simbol dalam 
........... {d1,d2,...dI-1}
dn  rn

Contoh :
1. regular definition untuk identifier :
letter  A|B|...|Z|a|b|...|z
digit  0|1|...|9
id  letter(leter|digit)*

RD untuk unsigned numbers:


digit  0|1|…|9
digits  digit digit*
optional_fraction .digits|ε
optional_exponent (E(+|-|ε)digits)|ε
num  digits optional_fraction
optional_exponent

Anda mungkin juga menyukai