02 / 1 - 15
LEXICAL ANALYSIS
PERANAN LEXICAL ANALYZER (Scanner)
Membaca source program (input stream), mengenali, mengidentifikasi lexeme (word) kemudian menghasilkan rangkaian token sebagai output.
token source program Scanner get next token Symbol Table parser
Teknik Kompilasi
02 / 2 - 15
Teknik Kompilasi
02 / 3 - 15
Teknik Kompilasi
02 / 4 - 15
Contoh : const pi = 3.14; Token const_sym if_sym Loop_sym Contoh Lexeme const, define Contoh Pattern const pi:=3.14, #define pi 3.14 if (expr) then [else]
for var :=init to fnl do
if for, while..do, Repeat .. until Do while(expr) relation <,<=,=,<>,>,>= .lt. .le. .eq. .ne. .gt. .ge. id pi, count, d2 num literal 3.14, 0, 6.0E10 Hallo
init :=num while(expr) do stmt < or <= or =S or <> or > or >= Letter diikuti oleh letters atau digits Sembarang konstanta angka Sembarang karakter diantara dan kecuali
Pada bahasa-bahasa tertentu Lexical Analysis menjadi lebih sulit, contoh populer : Statement DO pada bahasa pemrograman FORTRAN : DO 5 I = 1.25 Do bagian dari DO 5 I DO 5 I = 1,25 Do = Keyword
Bahan Ajar Matakuliah oleh SINAR SINURAT
Teknik Kompilasi
02 / 5 - 15
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 >
Teknik Kompilasi
02 / 6 - 15
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
E = M * C * * 2 eof Forward chaining lexeme-ending lexeme-beginning backward chaining
Buffer hanya menampung satu baris perintah, dan berhubungan dengan simbol table.
Teknik Kompilasi
02 / 7 - 15
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 menyimpan informasi tentang komponen (token) suatu source program. Informasi yang dimaksud : - Lexeme (word) - Bentuk identifier
Bahan Ajar Matakuliah oleh SINAR SINURAT
Teknik Kompilasi
02 / 8 - 15
- Type identifier (procedure, variable, label) - Posisi penyimpanan Interaksi dengan simbol table
Teknik Kompilasi
02 / 9 - 15
Teknik Kompilasi
02 / 10 - 15
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
Bahan Ajar Matakuliah oleh SINAR SINURAT
Teknik Kompilasi
02 / 11 - 15
EKSPONENSIASI STRING
s0 = s1 = s untuk i > 0, maka s2 = ss si = si-1s s3 = sss sehingga : Ln = Ln-1 L dan L0 = {}
Teknik Kompilasi
02 / 12 - 15
Teknik Kompilasi
02 / 13 - 15
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*
Teknik Kompilasi
02 / 14 - 15
r* r+
= r +| = rr*
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.
Teknik Kompilasi
02 / 15 - 15
........... ........... dn rn