Anda di halaman 1dari 15

Teknik Kompilasi

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

Scanner biasanya diimplementasikan dalam bentuk subroutine dari program Parser


Bahan Ajar Matakuliah oleh SINAR SINURAT

Teknik Kompilasi

02 / 2 - 15

TUGAS LAIN LEXICAL ANALYZER


1. Membuang comment dan white space (blank, tab <indent>, dan newline character). 2. Menghasilkan error messages.

BEBERAPA ISU DALAM LEXICAL ANALYSIS


Alasan mengapa Lexical Analysis dipisahkan dari Syntax Analysis : 1. Desain kompiler menjadi lebih sederhana 2. Efisiensi kompiler meningkat 3. Portabilitas kompiler meningkat

Bahan Ajar Matakuliah oleh SINAR SINURAT

Teknik Kompilasi

02 / 3 - 15

TOKEN, PATTERN DAN LEXEME


Token (simbol atomic) : Bagian terkecil yang dikenal oleh scanner. Token dapat berupa bilangan atau konstanta string (x=makan, y=minum),literal(a,lampet), operator (+,-,*,/,%, sqr, sqrt, exp, sin, cos,tan),exclamation(! ?), functuation (; , . : ), keywords (begin, end, write, read, var, cin, cout, if, while, for, {, }), karakter ganda (:=,<>,+=,=+,--,++,! =,==,**,), identifier (proc, var, name, const, type) Lexeme : Rangkaian karakter (word) yang sama (matched) dengan pola (pattern) suatu token Pattern : Suatu pola/ rules/ aturan yang menggambarkan struktur suatu token
Bahan Ajar Matakuliah oleh SINAR SINURAT

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 >

Bahan Ajar Matakuliah oleh SINAR SINURAT

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.

Bahan Ajar Matakuliah oleh SINAR SINURAT

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

SYMBOL TABLE INTERFACE


Rutin untuk operasi Save dan Retieve terhadapa Lexeme adalah : insert (s,t): menghasilkan indeks entry baru untuk string s, token t lookup (s) : menghasilkan indeks entry baru untuk string s, atau 0 bila s tak ditemukan.

Bahan Ajar Matakuliah oleh SINAR SINURAT

Teknik Kompilasi

02 / 9 - 15

RESERVED KEYWORDS HANDLING


Reserved keywords disimpan dalam symbol-table saat inisialisasi proses kompiler. contoh rutin yang menangani reserved keywords : insert (div, div_sym) insert (mod, mod_sym) Sehingga bila dilakukan lookup(div) menghasilkan token div_sym div tidak bisa digunakan sebagai identifier

IMPLEMENTASI SYMBOL TABLE


Symbol table harus memungkinkan penambahan / pencarian yang efisien Bisa diimplementasikan dengan : Array, List
Bahan Ajar Matakuliah oleh SINAR SINURAT

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

ISTILAH-ISTILAH PENTING STRING


Contoh : Bila s = abc, maka prefix s : , a, ab, abc proper prefix s : a, ab suffix s : abc, bc, c, proper suffix s : bc, c substring s : prefix s suffix s b : , a, ab, abc, bc, c, b proper substring s : substring s abc - subsequence s : substring s ac

EKSPONENSIASI STRING
s0 = s1 = s untuk i > 0, maka s2 = ss si = si-1s s3 = sss sehingga : Ln = Ln-1 L dan L0 = {}

Bahan Ajar Matakuliah oleh SINAR SINURAT

Teknik Kompilasi

02 / 12 - 15

BEBERAPA OPERASI TERHADAP BAHASA


Union ( ) Concatenation (.) Closure : Kleene Closure (*) Kleene closure dari L adalah L* L* = Li
i=0

- Positive Closure (+) Positive closure dari L adalah L+ L+ = ~ Li


i=1

Bahan Ajar Matakuliah oleh SINAR SINURAT

Teknik Kompilasi

02 / 13 - 15

REGULAR EXPRESSION (RE)


Digunakan untuk mendefenisikan set dan token-token dari suatu bahasa. Misalnya : Token identifier ditulis dengan : letter letter (letter | digit)* dimana : letter ={a,b,..,z, A,B,C,...,Z} digit ={0,1,2,...,9} | berarti atau ( ) berarti subexpression * berarti nol atau lebih

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*

Bahan Ajar Matakuliah oleh SINAR SINURAT

Teknik Kompilasi

02 / 14 - 15

r* r+

= r +| = rr*

Contoh : alphabet = {a, b} 1. RE ab menyatakan himpunan {a,b}


2. RE (a|b)(a|b) menyatakan {aa,ab,ba,bb}

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.

REGULAR DEFINITION (RD)


RD adalah suatu sekuensi/ rangkaian definisi dalam bentuk : d1 r1 dimana : di nama unik ri d2 r2 r1 yaitu RE yang terdiri dari
Bahan Ajar Matakuliah oleh SINAR SINURAT

Teknik Kompilasi

02 / 15 - 15

........... ........... dn rn

simbol-simbol dalam {d1,d2,...dI-1}

Contoh : 1. regular definition untuk identifier :


letter A|B|...|Z|a|b|...|z digit 0|1|...|9 id letter(leter|digit)*

2. RD untuk unsigned numbers:


digit 0|1||9 digits digit digit* optional_fraction .digits| optional_exponent (E(+|-|)digits)|
num digits optional_fraction optional_exponent

Bahan Ajar Matakuliah oleh SINAR SINURAT