Analisis leksikal Scanner Istiqomah S Kom Teknik Kompilasi

  • Slides: 18
Download presentation
Analisis leksikal (Scanner) Istiqomah, S. Kom. [Teknik Kompilasi UNIKOM 2013]

Analisis leksikal (Scanner) Istiqomah, S. Kom. [Teknik Kompilasi UNIKOM 2013]

Proses Kompilasi Object Code

Proses Kompilasi Object Code

Definisi q Bagian dari proses compiler yang berfungsi untuk mengubah deretan karakter-karakter menjadi deretan

Definisi q Bagian dari proses compiler yang berfungsi untuk mengubah deretan karakter-karakter menjadi deretan token-token. q Misalnya : Imagine recognizing ‘while’ as ‘w’ ‘h’ ‘i’ ‘l’ ‘e’

Tugas Scanner q Melakukan pembacaan kode sumber dengan menurut karakter demi karakter q Mengenali

Tugas Scanner q Melakukan pembacaan kode sumber dengan menurut karakter demi karakter q Mengenali besaran leksik/token q Mentransformasi menjadi sebuah token dan menentukan jenis token nya q Mengirimkan token q Membuang / mengabaikan blank dan komentar dalam program q Menangani kesalahan q Menangani tabel simbol

Alat Bantu q Scanner bekerja berdasarkan mesin FSA yang ada pada bahasa regular q

Alat Bantu q Scanner bekerja berdasarkan mesin FSA yang ada pada bahasa regular q Untuk membantu mengkonstruksi scanner dapat menggunakan diagram keadaan

Besaran Leksik/Token q Besaran leksikal/token meliputi : 1. Identifier 2. Nilai Konstanta 3. Operator

Besaran Leksik/Token q Besaran leksikal/token meliputi : 1. Identifier 2. Nilai Konstanta 3. Operator dan Delimiter

1. Identifier q Token yang bisa berupa keyword atau nama ü keywords adalah kata

1. Identifier q Token yang bisa berupa keyword atau nama ü keywords adalah kata kunci yang sudah didefinisikan oleh suatu bahasa seperti BEGIN, END, IF, ELSE dalam Pascal. ü Nama dideklarasikan sendiri oleh pemakai, seperti nama sebuah variabel.

1. Identifier (lanjutan) q Contoh : VAR nomor : INTEGER; suhu : REAL; VAR,

1. Identifier (lanjutan) q Contoh : VAR nomor : INTEGER; suhu : REAL; VAR, INTEGER dan REAL termasuk token identifier berupa keyword. Nomor dan suhu termasuk token identifier berupa nama

2. Nilai Konstanta q Adalah suatu konstanta yang terdapat pada program q Berupa konstanta

2. Nilai Konstanta q Adalah suatu konstanta yang terdapat pada program q Berupa konstanta integer, real, Boolean, character, string dan sebagainya q Misal : N : = R + 5 * 10 Kata : = kata 1 + ‘makan’ A : = 0. 333 Selesai : = True Maka 5, 10, ‘makan’, 0. 333, TRUE termasuk token nilai konstanta dalam program tersebut

3. Operator dan Delimeter q Operator misalnya operator matematika (+, -, *, /) dan

3. Operator dan Delimeter q Operator misalnya operator matematika (+, -, *, /) dan operator logika (<, =, >) q Delimeter berguna sebagai pemisah/pembatas, misalnya ( ), ; , : , white-space (spasi yang diabaikan di dalam program), enter, end of file.

Contoh q Ada urutan karakter yang disebut dengan statement : fahrenheit : = 32

Contoh q Ada urutan karakter yang disebut dengan statement : fahrenheit : = 32 + celcius * 1, 8, q Token yang terbentuk : identifier Fahrenheit operator : = integer 32 operator penjumlahan + identifier celcius operator perkalian * real 1, 8

Implementasi Scanner q Scanner biasanya diimplementasikan sebagai sebuah prosedur yang dipanggil oleh Parser. q

Implementasi Scanner q Scanner biasanya diimplementasikan sebagai sebuah prosedur yang dipanggil oleh Parser. q Prosedur Scan sederhana: q Didefinisikan dulu Procedure Get. Char untuk mengambil sebuah karakter dari file input. Procedure Get. Char; begin Read (File. Input, Kar); end;

Implementasi Scan Sederhana Dimana : File. Input: text, Kar: character Pada scanner kita akan

Implementasi Scan Sederhana Dimana : File. Input: text, Kar: character Pada scanner kita akan maju satu-satu per karakter untuk mendapatkan token. Selanjutnya kita akan buat Procedure Scan Begin While Kar=‘ ‘ do Get. Char {selama ketemu spasi maju terus} repeat

Case kar OF ‘<‘: begin Get. Char; Case Kar OF ‘=‘: begin token: =t_LE;

Case kar OF ‘<‘: begin Get. Char; Case Kar OF ‘=‘: begin token: =t_LE; exit end; ‘>’: begin token: =t_NE; exit end; Else Begin token: =t_L; exit; end; ‘=‘: begin token: =t_E exit; end; ‘>’: begin Get. Char; If Kar=‘=‘ then begin token: =t_GE; exit; end; Else begin token: =t_G; exit; end; End;

‘{‘: begin Repeat get. Char; { maju sampai ketemu penutup komentar} until Kar= ‘

‘{‘: begin Repeat get. Char; { maju sampai ketemu penutup komentar} until Kar= ‘ }’ Get. Char; {lanjutkan maju, tanpa memperoleh token} end; EOF: exit; {akhir file} Until false {sampai ketemu sebuah token atau akhir file} End;

Implementasi Scan Sederhana Dari procedure scan didapatkan himpunan token : q Token={ <, >,

Implementasi Scan Sederhana Dari procedure scan didapatkan himpunan token : q Token={ <, >, =, <=, >=, <} q Atau dibaca sebagai token-token: q t_L (less), t_G(greater), t_E(equal), t_LE, t_GE, t_NE(not equal)

Latihan: Tentukan Token Leksikal yang terbentuk dari potongan program berikut: BEGIN ……………. Luas. Segitiga

Latihan: Tentukan Token Leksikal yang terbentuk dari potongan program berikut: BEGIN ……………. Luas. Segitiga : = alas*tinggi*0. 5; Readln; END.

Latihan: Buatlah prosedur scan sederhana yang mampu membaca bilangan bulat dan identifier : q

Latihan: Buatlah prosedur scan sederhana yang mampu membaca bilangan bulat dan identifier : q Bilangan bulat : diawali digit 0. . 9, bisa diikuti digit q Identifier : diawali A. . Z, a. . z, bisa diikuti A. . Z, a. . z, 0. . 9.