ANALISIS LEKSIKAL
ANALISIS LEKSIKAL
ANALISIS LEKSIKAL
ANALISIS LEKSIKAL
Dr. Nidjo Sandjojo, M.Sc 2.1 Teknik KompilasiBAB 2. ANALISIS LEKSIKAL
PERAN PENGANALISIS LEKSIKAL INPUT BUFFERING
SPESIFIKASI TOKEN PENGENALAN TOKEN
SATU BAHASA UNTUK PENENTUAN (SPECIFYING) PENGANALISIS LEKSIKAL
FINITE AUTOMATA
Teknik Kompilasi
DARI EKSPRESI REGULAR KE NFA
RANCANGAN PEMBENTUK PENGANALISIS LEKSIKAL PENGOPTIMASIAN POLA BERDASARKAN-DFA
PERAN PENGANALISIS LEKSIKAL
source
L
i l
token
parse
get
next token
source
program
Lexical
Analyzer
p
tree
Parser
Dr. Nidjo Sandjojo, M.Sc 2.3 Teknik KompilasiSymbol
Table
SOURCE Characters Tokens PARSER LEXER SOURCE TEXTPERAN PENGANALISIS LEKSIKAL
PERAN PENGANALISIS LEKSIKAL ADALAH:
Membaca karakter input & menghasilkan token
Menghilangkan komentar dan ruang kosong
Menghubungkan antara pesan kesalahan yang diperoleh
kompilator dengan program sumber
Mengenali identifier dan keyword
Identifier = variables, arrays, function, etc , token
Dr. Nidjo Sandjojo, M.Sc 2.5
Teknik Kompilasi
Identifier variables, arrays, function, etc., token Keyword = fixed characters: begin, end, if, etc.
ALASAN PEMISAHAN PHASE ANALISIS
Phase Analysis dipisah menjadi dua, yaitu: Lexical Analyzer
dan Syntax Analyzer dengan alasan:
Penyederhanaan rancangan Efisiensi kompilator lebih baik Portabilitas kompilator meningkat
TOKEN, LEXEME dan PATTERN
Lexeme Pattern Token
Suatu rangkaian k kt d Peraturan yang j l k t Merupakan rangkaian k kt d l t karakter pada program sumber yang cocok atau sesuai dengan pola (pattern) untuk memben-tuk satu token.
menjelaskan set
lexeme yang dapat
merepresentasikan satu token tertentu dalam program sumber.
Satu set string input yang dijelaskan oleh
karakter yang dalam satu kesatuan memiliki arti tersendiri, dapat berupa:
kata kunci (key word), operator, identifier constant, rangkaian
huruf (literal string); simbol baca (function
Dr. Nidjo Sandjojo, M.Sc 2.7
Teknik Kompilasi
satu peraturan. Harus cocok (match) dengan setiap string yang ada dalam set tersebut.
symbol) misalnya:
tanda kurung, koma, titik koma, dan sebagainya.
TOKEN, LEXEME dan PATTERN
TOKEN SAMPLE LEXEMES INFORMAL DESCRIPTION OF PATTERN
const const const
if if if
relation <, <=, =, <>, >, >= < or <= or = or <> or > or = id pi, count, D2 letter followed by letters and digits num 3 1416 0 6 02E23 any numeric constant
num 3.1416, 0, 6.02E23 any numeric constant
ATTRIBUTE UNTUK TOKEN
Bila terdapat lebih dari satu pattern yang sesuai dengan satu
lexeme, lexical analyzer harus melengkapi informasi tambahan
tentang lexeme mana yang dimaksud atau yang sesuai dengan
tentang lexeme mana yang dimaksud atau yang sesuai dengan
phase berikutnya dari kompiltor.
Token biasanya hanya mempunyai satu atribut yaitu POINTER
yang disimpan dalam tabel simbol.
Dr. Nidjo Sandjojo, M.Sc 2.9
Teknik Kompilasi
ATTRIBUTE UTK TOKEN
CONTOH:
Pattern num cocok untuk string 0 dan 1, sedangkan code
generator harus tahu string mana yang dimaksud, misalnya
<num,1>
E = M *C**2 akan ditulis berpasangan sbb:
<id, pointer ke entri tabel simbol utk E> <assign_op,>
<id pointer ke entri tabel simbol utk M>
Teknik Kompilasi
<id, pointer ke entri tabel simbol utk M> <mult_op,>
<id, pointer ke entri tabel simbol utk C> <exp_op,>
KESALAHAN LEKSIKAL
Hanya sedikit kesalahan leksikal (lexical errors) yang dapat
dilihat di phase lexical analyzer karena phase ini mempunyai
pandangan yang sempit pada program sumber
pandangan yang sempit pada program sumber
Misal; fi(a = = f(x)) dalam bahasa C, maka lexical analyzer
tidak dapat menjelaskan apa fi tersebut betul sebagai identifier
atau salah eja yang seharusnya adalah if
Dr. Nidjo Sandjojo, M.Sc 2.11
Teknik Kompilasi
KESALAHAN LEKSIKAL (Cont’d)
KEMUNGKINAN PEMULIHAN KESALAHAN
Menghapus karakter yang berlebihan
Memasukkan karakter yang diduga hilang
Menganti karakter yang diduga salah dengan yang benar
Menukar letak dari dua karakter yang berdekatan
INPUT BUFFERING
Tiga pendekatan umum untuk mengimplementasikan suatu
Penganalysis Leksikal (Lexical Analyzer).
1 Gunakan pembentuk lexical analyzer seperti kompilator Lex
1. Gunakan pembentuk lexical-analyzer seperti kompilator Lex untuk menghasilkan penganalisis leksikal dari satu spesifikasi berdasarkan ekspresi reguler.
2. Menulis lexical analyzer dengan satu sistem bahasa
pemrograman konvensional, menggunakan fasilitas I/O untuk membaca input.
3. Menulis lexical analyzer dengan bahasa assembly dan secara
Dr. Nidjo Sandjojo, M.Sc 2.13
Teknik Kompilasi
y g y
ekplisit mengatur pembacaan input.
INPUT BUFFERING (Cont’d)
BUFFER PAIRS
Satu buffer dibagi menjadi dua bagian
Teknik Kompilasi
Jumlah karakter tiap bagian = 1024 (2
10) atau 4096 (4 X 2
10)
yang merupakan N
N karakter tersebut dibaca sekaligus untuk ditempatkan di tiap
setengah buffer-nya
INPUT BUFFERING (Cont’d)
SENTINEL
The sentinel is a special character that cannot be part of the
source program, and a natural choice is eof.
Dr. Nidjo Sandjojo, M.Sc 2.15
Teknik Kompilasi
SPESIFIKASI TOKEN
STRINGS & LANGUAGE:
String adalah satu rangkaian simbol dari alphabet (finite
sequence of symbols).
Kalimat dan kata sering disebut string
Panjang string: S
|S|;
Contoh: banana: |S|=6,
String kosong = ∈, sehingga |S|=0,
Language adalah setiap set dari string pada suatu alphabet
yang tetap (set of strings)
OPERASI PADA BAHASA
Terdapat beberapa operasi penting yang dapat diterapkan pada
bahasa (languages).
Khusus untuk lexical analysis: union, concatenation
Khusus untuk lexical analysis: union, concatenation
(rangkaian), closure (pengakhiran/penutupan), exponentiation
operator.
Misal; L sebagai himpunan {A,B, …Z,a,b,…z} dan D sebagai
himpunan {0,1,2,…9}
1. L∪D = himpunan huruf dan angka.
2. LD = himpunan string terdiri dari satu huruf diikuti oleh satu angka.
Dr. Nidjo Sandjojo, M.Sc 2.17
Teknik Kompilasi
3. L4 = himpunan string 4 huruf.
4. L* = himpunan string huruf-huruf termasuk string ∈.
5. L(L∪D)* = himpunan semua string huruf dan angka yang dimulai dengan huruf.
6. D+= himpunan semua string angka (satu atau lebih).
OPERASI PADA BAHASA (Cont’d)
OPERASI DEFINISI
L M { | di L t M} Union (gabungan) L dan M L ∪ M = {s | s di L atau M} LM = {st | s di L dan t di M}
∞
L* = ∪ Li L* = penyambungan
i=0 nol atau lebih L Union (gabungan) L dan M
ditulis L ∪ M Sambungan L dan M ditulis LM Penutup Kleene L ditulis L* Teknik Kompilasi ∞ L+= ∪ Li L+= penyambungan
i=1 satu atau lebih L ditulis L
Penutup Positif L ditulis L+
EKSPRESI BERATURAN
Identifier = satu set string dari huruf-huruf dan angka-angka yang dimulai dengan huruf atau satu huruf diikuti 0 atau huruf-huruf atau angka (digit). g ( g )
Suatu ekspresi beraturan (regular expression = RE) dibentuk berdasarkan ekspresi beraturan lain yang lebih sederhana.
Contoh notasi RE: letter(letter|digit)*. Garis tegak berarti atau, tanda kurung digunakan untuk mengelompokkan ekspresi bagian, dan tanda * artinya adalah nol atau lebih kali dari ekspresi yang diberi kurung
Dr. Nidjo Sandjojo, M.Sc 2.19
Teknik Kompilasi
kurung.
Satu bahasa yang ditunjukkan oleh satu ekspresi beraturan disebut REGULAR SET.
EKSPRESI BERATURAN (Cont’d)
Regular definitions adalah satu urutan dari bentuk :
d1 r1 d2 r2 ... dn rn
d = nama
r = regular expression
EKSPRESI BERATURAN (Cont’d)
Non-Regular Sets (himpunan tidak beraturan).
Ada bahasa yang tidak dapat dijelaskan dengan regular expression. Ekspresi beraturan tidak dapat digunakan untuk menyatakan bentuk Ekspresi beraturan tidak dapat digunakan untuk menyatakan bentuk yang seimbang atau terulang.
Misalnya himpunan dari semua rangkaian tanda kurung yang seimbang tidak dapat dinyatakan oleh suatu ekspresi beraturan, tetapi dapat dinyatakan dalam suatu tata bahasa bebas konteks
(Context Free Grammar (CFG)).
Rangkaian yang berulang tidak dapat dinyatakan oleh ekspresi
Dr. Nidjo Sandjojo, M.Sc 2.21
Teknik Kompilasi
g y g g p y p
beraturan.
Contoh: {wcw|w adalah rangkaian dari a dan b} tidak dapat dinyatakan sebagai suatu ekspresi beraturan, dan juga tidak dapat dinyatakan dengan tata bahasa bebas konteks.
EKSPRESI BERATURAN (Cont’d)
CONTOH:
Misal: ∑ = {a,b}
RE: a|b; yaitu himpunan {a,b}
RE: (a|b) (a|b); yaitu himpunan {aa,ab,ba,bb} atau untuk
RE: aa|ab|ba|bb
RE: a*; yaitu himpunan string ε atau beberapa a, yaitu
himpunan {ε, a, aa, aaa, …}
Teknik Kompilasi
RE: (a|b)*; yaitu himpunan semua string yang terdiri dari
ε atau a atau b. Sama dengan RE: (a*b*)*
RE: a|a*b; yaitu himpunan a atau {ε, a, aa, aaa, …}
diikuti oleh b.
PENGENALAN TOKEN
Misal: penggalan tata bahasa sebagai berikut:
stmt if exp then stmt
| if exp then stmt else stmt | if exp then stmt else stmt | ∈
exp term relop term
| term term id | num Dr. Nidjo Sandjojo, M.Sc 2.23 Teknik Kompilasi
PENGENALAN TOKEN (Cont’d)
Terminal-terminal tersebut diatas yaitu: if, then, else, relop, id
dan num membentuk himpunan rangkaian (string) yang
diberikan oleh definisi beraturan sebagai berikut:
g
if if
then then
else else
relop < | <= | = | <> | > | >=
id letter(letter|digit)*
num digit+( digit+)?(E(+|-)?digit+)?
num digit (.digit+)?(E(+|-)?digit+)?
Lexical analyzer akan mengenali keywords if, then, else serta
lexeme yang dinyatakan oleh relop, id dan num.
MENGHILANGKAN WHITE SPACE
Lexical analyzer akan menghilangkan white space (i.e., blanks,
tabs, new lines) dengan menggunakan regular definition
sebagai berikut:
sebagai berikut:
delim blank|newline|tab
ws delim
Sehingga apabila menemukan pola yang cocok dengan ws,
maka lexical analyzer tidak akan memberikan token kepada
parser tetapi akan melanjutkan mencari character lain setelah
Dr. Nidjo Sandjojo, M.Sc 2.25
Teknik Kompilasi
white space tersebut.
TRANSITION DIAGRAM (TD)
Sebagai langkah antara di dalam membentuk lexical analyzer,
dibuatlah satu transition diagram.
TD atau diagram peralihan adalah stylized flowchart (bagan
alir) yang dibentuk sebagai langkah antara dalam pembentukan
token pada lexical analyzer.
TD tersebut menggambarkan aksi yang dilakukan bila Lexical
Analyzer dipanggil oleh pengurai utk memperoleh token
berikutnya (get next token).
Teknik Kompilasi
TRANSITION DIAGRAM (Cont’d)
Dr. Nidjo Sandjojo, M.Sc 2.27 Teknik Kompilasi Catatan: state edge (sisi) accepting statepointer tanda dapat mundur
*
:
:
:
:
TRANSITION DIAGRAM (TD)
Contoh: TD utk pattern > atau >=
Pembacaan dimulai dari state 0, membaca karakter berikutnya yaitu > utk menuju ke state 6
utk menuju ke state 6.
Bila yg dibaca benar > maka lanjut, bila bukan maka akan gagal mengenali pattern > atau >=.
Dari state 6 karakter yg akan dibaca adalah = utk menuju ke state 7. Bila yg dibaca benar = maka berhasil mengenali pola >= bila bukan = maka akan menuju ke state 8.
A LANGUAGE for SPECIFYING LEXICAL ANALYZERS (1)
Ada piranti (tool) khusus yang lazim digunakan utk
menentukan lexical analyzers yaitu Lex Compiler dengan
inputnya Lex Language.
inputnya Lex Language.
Penggunaannya sebagai berikut:
Lihat Fig. 3.17
a.out adalah object program yg merupakan lexical analyzer yang dapat merobah rangkaian input menjadi token
Lex specifications. Program lex terdiri dari 3 bagian :
Dr. Nidjo Sandjojo, M.Sc 2.29
Teknik Kompilasi
p
f
g
g
1. Deklarasi (Declarations)
2. Aturan Translasi (Translation Rules) 3. Prosedur Tambahan (Auxiliary Procedures)
A LANGUAGE for SPECIFYING LEXICAL ANALYZERS (2)
%{
/* definitions of manifest constants LT, LE, EQ, NE, GT, GE,
A LANGUAGE for SPECIFYING LEXICAL ANALYZERS (3)
IF, THEN, ELSE, ID, NUMBER, RELOP */ %} /* regular definitions */ delim [ \t\n] ws {delim}+ letter [A-Za-z] Dr. Nidjo Sandjojo, M.Sc 2.31 Teknik Kompilasi letter [A Za z] digit [0-9] id {letter}({letter}|{digit})* number {digit}+(\.{digit}+)?(E[+\-]?{digit}+)? %%
{ws} {/* no action and no return */} if {return(IF);}
then {return(THEN);}
A LANGUAGE for SPECIFYING LEXICAL ANALYZERS (4)
else {return(ELSE);}
{id} {yylval = install_id(); return(ID);} {number} {yylval = instalI_num(); return(NUMBER);} "<" {yylval = LT; return(RELOP);}
"<=" {yylval = LE; return(RELOP);} "=" {yylval = EQ; return(RELOP);} "<>"<> {yylval = NE; return(RELOP);}{yylval NE; return(RELOP);} ">" {yylval = GT; return(RELOP);} ">=" {yylval = GE; return(RELOP);} %%
install_id() {
/* procedure to install the lexeme, whose first character is pointed to by yytext and
A LANGUAGE for SPECIFYING LEXICAL ANALYZERS (5)
p y yy
whose length is yyleng, into the symbol table and return a pointer thereto */
}
install_num() {
/* similar procedure to install a lexeme that is a number */
Dr. Nidjo Sandjojo, M.Sc 2.33
Teknik Kompilasi
}
Fig. 3.18. Lex program for the tokens of Fig. 3.10.
A LANGUAGE for SPECIFYING LEXICAL ANALYZERS (6)
FINITE AUTOMATA (1)
Recognizer suatu bahasa; program yang mengambil string x
sebagai input dan menjawab “yes” bila x adalah kalimat dari
bahasa tersebut dan menjawab “no” bila sebaliknya
bahasa tersebut, dan menjawab no bila sebaliknya.
Regular expression di compile menjadi recognizer dengan
membentuk diagram peralihan disebut finite automata
(otomata berhingga).
Finite Automata; dua macam :
1. DETERMINISTIC Finite Automata (DFA)
Dr. Nidjo Sandjojo, M.Sc 2.35
Teknik Kompilasi
1. DETERMINISTIC Finite Automata (DFA) 2. Non-DETERMINISTIC Finite Automata (NFA)
FINITE AUTOMATA (2)
Persamaan DFA & NFA
Dapat mengenali pola ekspresi beraturan dengan tepat.
Perbedaan
DFA NFA
Menghasilkan pengenal lebih cepat.
Menghasilkan pengenal lebih lambat.
Ukuran DFA lebih besar untuk hal yg sama.
Ukuran NFA lebih kecil untuk hal yang sama.
NON-DETERMINISTIC FINITE AUTOMATA (NFA)
NFA= model matematika yg terdiri dari:
1. Satu set state S.
2 S t t b l i tΣ ( l h b t i b l i t) 2. Satu set symbol input Σ (alphabet simbol input).
3. Fungsi transisi move yang memetakan pasangan state-simbol ke dalam himpunan state.
4. Satu state S0yg dinyatakan sebagai state awal (start/initial state).
5. Satu set state F yg dinyatakan sebagai state penerima/ akhir ( ti /fi l t t )
Dr. Nidjo Sandjojo, M.Sc 2.37
Teknik Kompilasi
(accepting/final state).
NFA dapat direpresentasikan dalam bentuk bagan sebagai suatu
grafik yang berlabel disebut Transition Graph, dengan node
sebagai state dan sisi berlabel menyatakan fungsi transisi.
NON-DETERMINISTIC FINITE AUTOMATA (Cont’d)
Transition graph untuk mengenali bahasa (a|b)*abb
Teknik Kompilasi
Catatan:
set state = {0,1,2,3} state awal = state 0 set simbol input = {a,b} state penerima = state 3
NON-DETERMINISTIC FINITE AUTOMATA (Cont’d)
NFA
Memungkinkan terjadi lebih dari satu transisi (simbol) yang keluar dari satu state untuk input yang sama
yang keluar dari satu state untuk input yang sama Dapat dijelaskan dengan Graph Representation yang implementasinya dengan menggunakan Tabel Peralihan
(Transition table). Row = State
Column = input symbol (boleh ∈)
Dr. Nidjo Sandjojo, M.Sc 2.39 Teknik Kompilasi
Contoh:
Fig 3.19 Fig 3.20NON-DETERMINISTIC FINITE AUTOMATA (Cont’d)
Dr. Nidjo Sandjojo, M.Sc 2.41
Teknik Kompilasi
NON-DETERMINISTIC FINITE AUTOMATA (Cont’d)
Transition table for the finite automaton aa*|bb*
NFA: aa*|bb*
State Input Symbols
∈ a b 0 {1,3} - -1 - {2} -Teknik Kompilasi 2 - {2} -3 - - {4} 4 - - {4}
DETERMINISTIC FINITE AUTOMATA (DFA)
DFA adalah kasus khusus NFA yang :
1. Tidak ada state dengan transisi ε; yaitu transisi input ε & 2. Untuk setiap state s dan simbol input a hanya ada paling
banyak satu sisi berlabel a yang meninggalkan state s.
Bila menggunakan transition table untuk merepresentasikan
fungsi transisi DFA, setiap entry pada transition table adalah
“single input”.
Dr. Nidjo Sandjojo, M.Sc 2.43
Teknik Kompilasi
DFA untuk mengenali bahasa (a|b)*abb, yang inputnya
(string) dibaca ababb mengikuti urutan state 0,1,2,1,2,3 sbb:
Fig 3.23