Lexical Analysis
Lexical Analisys atau Analisis Leksikal adalah analisis yang menguraikan source code menjadi unit-unit kecil yang mempunyai arti dan disebut sebagai TOKEN.
Contoh:
for i:=1 to max do
x[i] :=0;
Penguraian ke dalam bentuk token disebun TOKENIZING.
Keyword : for, to, do
Identifier : i, max, x
Constants : 1, 0
Operator : :=
Puctuation : ;
Brackets : [ , ]
Tokenizing berguna untuk:
- membuang command line
- mengurai semua huruf besar/kecil menjadi bentuk yang seragam (terutama, untuk case intensitif seperti Pascal).
Tugas utama penganalisis Leksikal adalah memecah tiap baris source menjadi token-token.
- Membuang komentar
- Menyeragamkan hutuf kapital
- Membuang white space
- Menginterpretasi kompiler directive
- Berkomunikasi degngan symbol table (identifier - type - size)
- Membuat listing
Token dan Lexemes
Untuk keperluan parsing, identifier tidak dibedakan satu dengan lainnya atau operasi relasi tidak dibedakan antara >, <, >=, dan sebagainya. Pada saat parsing, bila ditemukan identifier (id), maka id tersebut akan dimasukkan dalam symbol table yang sama. Demikian juga untuk operasi relasi. Untuk kepentingan selanjutnya identifier-identifier tersebut perlu dibedakan satu sama lainnya. Demikian juga dengan operasi relasi, > harus dibedakan dengan <. Jadi dapat dikatakan bahwa token adalah kumpulan dari lexemes-lexemes. Token menyatakan suatu kelompok, misalnya kelompok identifier (id) atau kelompok operasi relasi (relop), sedangkan lexemes menjelaskan anggota-anggota dari token yang bersangkutan.
Contoh :
if distance >=rate * (end_time - start_time) then distance := maxdist; dipisahkan menjadi token dan lexemes berikut:
Token - Lexemes |
if id relop id * (id-id) then id :=id;
Tugas lain dari penganalisis leksikal adalah bila menemukan Id maka harus berhubungan dengan bagian pengendali symbol table. Bila id telah dideklrasikan typenya maka lexemes-nya akan disimpan pada symbol table di penganalisis semantic.