TEKNI TEKNI K KOM PILASI ILASI Tony Tony Darm Darma anto,S nto,ST T / Smt Smt V – S1 – TI / STM STM I K WI D YA DH ARM A/ H al 16 16
4. ANALISIS LEKSIKAL Struktur Kompiler Analis Analisis isLe Leks ksikal ikal – Apa Apa itu? itu? •
•
• •
•
Masuka Masukan n bagi bagi sebuah sebuah compiler compiler/in /interp terprete reterr adalah adalah program program sumber sumber yang yang struktur strukturnya nya berupa deretan dari karakter-karakter o or rather unstructured Pemrosesan individual karakter yang ketidakefisiennya sangat tinggi o Imagine recognizing ‘while’ as ‘w’ ‘h’ ‘i’ ‘l’ ‘e’ Oleh karenanya, hal pertama yang kita perhatikan adalah bentuk kode sumbernya A Lexical Analyzer (scanner) mengubah deretan karakter-karakter menjadi deretan tokentoken i.e. a scanner “tokenizes” the input o Sebuah token (lexeme or syntactic uni t ) adalah komponen dasar leksikal dari program
Analis Anali sis L eksikal ksikal–T –To oken • •
•
Token adalah level entitas yang paling rendah dalam diagram sintaks Jenis-jenis token antara lain: o identifiers (e.g. variable & function names, etc.) o keywords (like while, if, function, etc.) o operators (like +, -, *, ++, +=, etc.) o literals (constant values like 27.3, “Hello”, etc.) o punctuation (like ‘;’, ‘:’, ‘,’, etc.) Consider a simple program and its tokens:
Fungsi Scanner o o o o o o o
Melakukan pembacaan kode sumber dengan merunut karakter demi karakter Mengenali besaran leksik Mentransformasi menjadi sebuah token dan menentukan jenis tokennya Mengirim token Membuang blank dan komentar dalam program Menangani kesalahan Beberapa scanners memasukkan simbol ke dalam tabel simbol
TEKNI TEKNI K KOM PILASI ILASI Tony Tony Darm Darma anto,S nto,ST T / Smt Smt V – S1 – TI / STM STM I K WI D YA DH ARM A/ H al 17 17 M embac mbaca Prog Program Sumbe umber
TEKNI TEKNI K KOM PILASI ILASI Tony Tony Darm Darma anto,S nto,ST T / Smt Smt V – S1 – TI / STM STM I K WI D YA DH ARM A/ H al 18 18 Scanning anning ber ber dasarkan M SH (M esin Stata Hing Hi ngg ga = Finite State Automa Automata ta (FSA)) (FSA)) •
•
Hampir Hampir sebagian sebagian besar teknik yang digunakan digunakan untuk u ntuk membangun membangun scanners scanners menggunakan menggunakan messin stata h ingga (MSHs) atau Fin ite State Automata me Automata (FSA) MSHs dapat dengan dengan mudah digunakan digunakan untuk mengenali kontruksi kontruksi bahasa b ahasa (i.e. to kens) kens) yang digambarkan dengan bahasa regular
M embangun mbangun Scanner anner •
•
Bagaimana Bagaimana scanner scanner berinteraks berinteraksii dengan dengan parser? parser? – parser akan menjadi bagian bagian selanjutny selanjutnyaa dari kompilasi kompilasi Perhatikan gambar berikut:
Aksi Scanner •
•
•
•
Karen Karenaa scanne scannerr mengubah mengubah dari stata ke stata, stata, maka harus harus dilakuka dilakukan n sesuatu sesuatu dengan dengan karakter-karakter tersebut untuk mengenali sesuai dengan pembentukan token yang akan dikembalikan pada tahap parser Dalam Dalam beberapa kasus, harus menambahkan menambahkan character character seperti terlihat pada pembentukan pembentukan token token dan meman memanfa faatk atkann anny ya (menj (menjadi adikan kan karakt arakter er masuk masukan an berik berikutn utny ya menja menjadi di kelihatan) – E.g. when when scanning characters characters in an identifier identifier Dalam kasus lainnya harus menjaga character dan mengembalikan dalam token lengkap
Aksi kemungkinan lainnya adalah menghilangkan karakter agar lebih sederhana – E.g. E.g. kara karakte kterr pada pada komen komentar tar
Bes Be saran ar an L ek sik Besaran pembangun bahasa/leksik meliputi hal-hal sebagai berikut :
1. I dentifie dentifierr Identi Identifie fierr dapat dapat berupa berupa keyword keywordss atau atau nama. nama. Keywords Keywords adalah adalah kata kata kunci kunci yang yang sudah didef didefin inisi isika kan n oleh oleh suatu suatu bahas bahasaa seper seperti ti Begin Begin,, End, End, If, If, Else Else dalam dalam Pascal Pascal.. Nama Nama dideklarasikan sendiri oleh pemakai seperti nama variabel. Contoh bila pada suatu program Pascal terdapat deklarasi: Var Nomor: Integer; Suhu: Real; Maka Nomor dan Suhu akan dikenali sebagai besaran leksik berupa nama variabel yang terdapat pada program tersebut. Sedangkan Var, Integer dan Real merupakan keyword
TEKNI TEKNI K KOM PILASI ILASI Tony Tony Darm Darma anto,S nto,ST T / Smt Smt V – S1 – TI / STM STM I K WI D YA DH ARM A/ H al 19 19 pada program tersebut. Nama bisa berupa nama program, procedure, var, type, constant. Keyword Keyword pada Pascal, Pascal, misal m isalnya nya : and, array, begin, case, const, div, do, downto, downto, else, else, not, of, or, procedure, program, record, repeat, for, function, goto.
2. Nilai Kons Konstanta tanta Nilai Nilai konst onstan anta ta adala adalah h suatu suatu kons konstan tanta ta yang terda terdapat pat pada pada prog program ram.. Bisa Bisa berupa berupa konstanta integer, real, boolean, character, string dan sebagainya. Misalkan saja dalam Pascal pada suatu program terdapat statement. N := R + 5 * 10 kata := kata1 + ‘makan’ A := 0.333 selesai := True Maka 5, 10, ‘makan’, 0.333, True, termasuk besaran leksik berupa nilai konstan yang terdapat pada program sumber tersebut.
3. Operator Operator dan De Delimite limiterr Operator, Operator, misalnya misalnya opera op erator tor aritmatika aritmatika (+, - , * , /), operator operator logika logika (<, =, >)
4. De Delimite limiterr Delimiter berguna sebagai pemisal/ pembatas, misalnya: ( ) , . ; : (kurung buka/tutup, koma, koma, titik titik,, titik titik koma, koma, titik titik dua), dua), white-s white-space pace (pemis (pemisah ah yang diabaik diabaikan an di program program seperti spase, karakter enter, ganti baris, akhir file.
Contoh Contoh 1: Misalkan terdapat sebuat source program: Program coba; Var A : integer; Begin A := A + 2; End. Pada contoh di atas, besaran leksik (token) nya adalah simbol yang bernilai ‘Program’, ‘Coba’, ‘Var’, ‘A’, ‘Integer’, ‘;’, ‘:’, ‘+’, ‘.’,’2’, ‘:=‘, ‘Begin’, ‘End’.
Con Contoh toh 2 : Ada urutan karakter yang disebut dengan statement Fahrenheit := 32 + celcius * 1,8 Maka akan diterjemahkan ke dalam token-token di bawah ini: identifier à fahrenheit operator à := integer à 32 operator à+ identifier à celcius operator perkalian à* real / float à 1,8 Setia Setiap p bentuk bentuk dari dari toke token n direpr direpres esen entas tasii sebag sebagai ai angka angka dalam dalam bentuk bentuk inte intern rnal, al, dan angkanya adalah unik. Misalnya nilai 1 untuk variabel, 2 untuk konstanta, 3 untuk label, 4 untuk operator, dst.
TEKNI TEKNI K KOM PILASI ILASI Tony Tony Darm Darma anto,S nto,ST T / Smt Smt V – S1 – TI / STM STM I K WI D YA DH ARM A/ H al 20 20 Contoh : Kondisi : If A > B then C = D; Maka Scanner akan mentransformasikan ke dalam token-token sbb: kondisi3 : 26 If 20 A 1 > 15 B 1 then 21 C 1 D 1 ; 27 Token-token ini sebagai inputan untuk syntax analyser, token-token ini bisa berbentuk pasangan item. Dimana item pertama menunjukkan alamat atau lokasi dari token pada tabel simbol. Item kedua adalah representasi internal dari token. Semua token direpresentasikan dengan informasi yang panjangnya tetap (konstan), suatu alamat (address atau pointer) dan sebuah integer (bilangan bulat). Misalkan sebuah bahasa memiliki himpunan simbol terminal/token : ‘<‘ , ‘>’, ‘=‘, ‘<=‘, ‘>=‘ , ‘<>’ Atau bisa dibaca sebagai token-token : t_L, t_G, t_E, t_LE, t_LE, t_GE, t_NE (G=great (G=greater, er, L=Less L=Less,, E=Equal E=Equal,, N=Not). N=Not). Bahasa Bahasa tersebu tersebutt juga juga mendukun mendukung g penulis penulisan an komentar yang diawali dengan ‘{‘ dan diakhiri dengan ’}‘. Kita lihat Diagram Keadaan untuk kumpulan kumpulan token di atas pada gambar berikut : <
=
>
=
> t_E
t_G
t_NE
=
apa saja selain } { }
komentar
t_GE
TEKNI TEKNI K KOM PILASI ILASI Tony Tony Darm Darma anto,S nto,ST T / Smt Smt V – S1 – TI / STM STM I K WI D YA DH ARM A/ H al 21 21 Tabel State T(stata,karak T(stata,karakter) ter) dari Diagram Diagram State di atas : Karakter
Stata <
>
=
{
}
apa saja
Start
t_ L
t_G
t_E
komentar
x
x
t_L
x
t_NE
t_LE
x
x
x
t_LE
x
x
x
x
x
x
t_E
x
x
x
x
x
x
t_NE
x
x
x
x
x
x
t_G
x
x
t_GE
x
x
x
t_GE
x
x
x
x
x
x
x
x
x
Start
komentar
Komentar
x
Formula tabel tersebut adalah : j, jika ada transisi berlabel a dari i ke j T(i,a)= x, jika tidak ada transisi berlabel a dari i Jika T(i,a) = x, maka ada 2 kemungkina kemungkinan n: Jika stata i merupakan merupakan stata akhir berarti pada stata i telah ditemukan sebuah token. token. • Jika stata i bukan stata akhir berarti pada stata i telah terdeteksi terdeteksi token tidak dikenal. • •
•
•
Dala Dalam m Pascal Pascal,, komen komenta tarr tidak tidak diper diperluk lukan an lagi lagi pada pada prose prosess selanj selanjutny utnya, a, karen karenaa itu komentar tidak dimasukkan sebagai token. Setiap scanner menemukan awal komentar, scanner hanya mengambil simbol yang didapat tanpa disimpan ke dalam token. Setelah ditemukan akhir dari komentar, state dikembalikan ke state awal (serupa dengan white space) Scanner biasanya diimplementasikan sebagai sebuah prosedur yang dipanggil oleh Parser. Contoh Prosedur scan sederhana yang akan membaca sebuah file input dan memberikan token token hasilnya hasilnya dapat dilihat dilihat pada : Procedure GetChar; Begin Read(FileInput, Kar); end; dimana dimana : FileInput : text, Kar: character
TEKNI TEKNI K KOM PILASI ILASI Tony Tony Darm Darma anto,S nto,ST T / Smt Smt V – S1 – TI / STM STM I K WI D YA DH ARM A/ H al 22 22 Procedure Scan Begin While Kar=‘ ‘ do GetChar GetChar ; {selama {selama ketemu ketemu spasi maju terus} Repeat Case Kar Of ‘<‘ : begin GetChar ; Case Kar Of ‘=‘ : begin token:=t_LE; exit; end; ‘>’ : begin token:=t_NE; token:=t_NE; exit; end; else begin token:=t_L; exit; end; end; ‘=‘ : begin token:=t_E; exit; end; ‘>’ : begin GetChar ; If Kar = ‘=‘ then begin token:=t_GE; exit; end else begin token:=t_G; exit; end; end; ‘ { ‘: begin Repeat GetChar ; {maju sampai ketemu penutup komentar} Until Kar = ‘ } ‘ GetChar ; {lanjutkan maju, tanpa memperoleh token} end; EOF:exit; {akhir file} Until False; {sampai ketemu sebuah token atau akhir file } End;