Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Kuliah 2 : Analisis Leksikal

Presentasi serupa


Presentasi berjudul: "Kuliah 2 : Analisis Leksikal"— Transcript presentasi:

1 Kuliah 2 : Analisis Leksikal

2 Peranan membaca karakter input dan menghasilkan output berupa token.Token akan akan dipakai oleh pengurai parser sebagai input untuk analisa sintak membuang komentar, spasi,tab, newline dan karakter lain yang ‘tak berguna’, menghubungkan pesan kesalahan kompilator dengan program sumbernya. Contoh : baris dari program

3 Alasan pemisahan analisa leksikal dan Analisa penguraian (parsing)
rancangan yang lebih sederhana Tugas parser akan rumit jika harus menangani komentar spasi dsb, Efisiensi, pemakaian teknik bufering tertentu untuk membaca input dan membagi bagi menjadi token token dapat mempercepat proses, Portabilitas, representasi simbol khusus atau nonstandard dapat diisolasi pada analisa leksikal

4 Beberapa istilah Leksim adalah sebarisan karakter program sumber yang sesuai dengan pola suatu token. Contoh :: const pi = Maka pi adalah leksim untuk token identier. Token adalah himpunan karakter yang mempunyai arti khusus, Pola Pattern adalah aturan pembentukan suatu token reserved string artinya string yang sudah ditentukan, dan tidak dapat diubah atau dipakai. Contoh : keywords

5 Atribut - atribut suatu token
Def : Informasi tambahan yang berhubungan dengan suatu token Contoh : nilai atribut dan token untuk statement FORTRAN, E = M*C**2, atribute ditulis dalam bentuk pasangan token dan atribut <id, pointer e entri tabel simbol untuk E> <assign_op, > <id, pointer e entri tabel simbol untuk M> <mult_op, > <id, pointer e entri tabel simbol untuk C> <exp_op, > <num, nilai integer 2>

6 Kesalahan leksikal Sedikit yang dapat dideteksi, Contoh :: jika fi ditemukan pada program C fi ( a == f (x)) ……….. penganalisa leksikal tidak dapat menentukan bahwa fi salah ejaan. Kesalahan ini akan dideteksi di fase lain yakni parser6

7 Yang dapat dilakukan jika ada kesalahan pada awal token
menghapus karakterkarakter sampai token dapat dibentuk menghapus karakter yang berlebihan menyisipkan karakter yang hilang mengganti karakter dengan karakter yang benar mengubah posisi dua karakter yang berdampingan

8 Input Buffering Digunakan karena pada kebanyakan bahasa sumber penganalisa leksikalnya kadang kadang perlu mengetahui beberapa karakter tambahan di luar leksim untuk menentukan bahwa leksim yang ditemukan sesuai dengan salah satu pola token. Proses ini sangat memakan waktu.

9 Teknik Input Buffering: skema input dua buffer
Suatu bufer dibagi menjadi 2 bagian masingmasing dapat memuat N karakter. N = satu blok disk (1024, 4096) N karakter input dibaca sekaligus oleh suatu perintah Jika terdapat < N karakter, EOF dibaca sebagai akhir input Dua pointer yang menunjuk buffer dipakai. Pada awalnya dua pointer menunjuk karakter pertama dari suatu leksim yang akan dicari. Karakter antara dua pointer adalah leksim yang akan dicari. Satu pointer forward membaca satu karakter sampai leksim sesuai dengan suatu pola. Jika sudah ditemukan pointer forward menunjuk bagian akhir kanan leksim lalu ke dua pointer menunjuk karakter berikutnya Jika pointer forward akan melewati bagian tengah buffer, sisi kanan buffer diisi. Jika akan melewati akhir buffer, sisi kiri diisi Kelemahan: tidak dapat diproses jika jarak yang harus ditempuh oleh pointer forward melebihi panjang buffer

10 Algoritma pointer forward
if forward pada akhir bufer kiri then baca N karakter ke bufer kanan forward := forward+1 end else if forward pada akhir bufer kanan then baca N karakter ke bufer kiri pindahkan forward ke awal bufer kiri else forward := forward+1 Ada maksimal 2 kali test (akhir bufer kiri dan akhir buffer kanan) setiap kali baca satu karakter. Jadi maksimum ada 4N test.

11 Skema input dua buffer dengan sentinel
Suatu karakter sentinel biasanya eof diletakkan pada akhir kedua sisi buffer. forward := forward +1 if forward not = eof then begin if forward pada akhir sisi kiri then begin baca N karakter ke bufer kanan forward := forward+1 else if forward pada akhir sisi kanan then begin baca N karakter ke bufer kiri pindahkan forward ke awal bufer kiri end else /* eof merupakan akhir input */ hentikan analisa leksikal Ada 2 ( n + 2 ) test

12 Spesifikasi token: definisi
Alfabet / kelas karakter adalah sembarang himpunan simbol, banyaknya hingga. Contoh : {0,1}, ASCII EBCDIC, string terhadap alfabet adalah barisan hingga dari simbol simbol, dibentuk dari alfabet. (Dalam teori bahasa, Panjang string S, |S| adalah banyaknya simbol yang muncul pada S. String kosong ( ) adalah string yang panjangnya nol, Bahasa adalah sembarang himpunan string terhadap alfabet tertentu Penggabungan string x dan y (concatenation) ditulis sebagai xy

13 Beberapa istilah pada string S
prefik dari S adalah string yang diperoleh dengan menghapus nol atau lebih simbol-simbol akhir string S sufik dari S adalah string yang diperoleh dengan menghapus nol atau lebih simbol-simbol awal string S, substring S adalah string yang diperoleh dengan menghapus prefik dan sufik dari S proper prefik , sufik atau substring S adalah sembarang string tak kosong x yang merupakan prefik, sufik atau substring dimana x not= S subbarisan dari S adalah sembarang string yang dibentuk dengan menghapus (tidak harus berdampingan) nol atau lebih simbol dari S

14 Operasi operasi pada bahasa: union, concatenation, closure

15 Contoh

16 Ekspresi beraturan (Regular Expression)

17

18

19

20

21

22

23

24 Ref: ASU-Fig 3.12

25 Ref: ASU-fig 3.13

26 Ref: ASU – fig 3.14

27

28 Any questions?


Download ppt "Kuliah 2 : Analisis Leksikal"

Presentasi serupa


Iklan oleh Google