-
1ANALISIS LEKSIKALANALISIS LEKSIKALANALISIS LEKSIKALANALISIS
LEKSIKAL
Dr. Nidjo Sandjojo, M.Sc2.1Teknik Kompilasi
BAB 2. ANALISIS LEKSIKAL
PERAN PENGANALISIS LEKSIKAL INPUT BUFFERING SPESIFIKASI TOKEN
PENGENALAN TOKEN SATU BAHASA UNTUK PENENTUAN (SPECIFYING)
PENGANALISIS LEKSIKAL
FINITE AUTOMATA
Dr. Nidjo Sandjojo, M.Sc2.2Teknik Kompilasi
DARI EKSPRESI REGULAR KE NFA RANCANGAN PEMBENTUK PENGANALISIS
LEKSIKAL PENGOPTIMASIAN POLA BERDASARKAN-DFA
-
2PERAN PENGANALISIS LEKSIKAL
source L i ltoken parseget
next token
source program Lexical
Analyzer
ptreeParser
Dr. Nidjo Sandjojo, M.Sc2.3Teknik Kompilasi
Symbol Table
SOURCE
CharactersTokens
PARSERLEXERSOURCE
TEXT
Dr. Nidjo Sandjojo, M.Sc2.4Teknik Kompilasi
-
3PERAN 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.Sc2.5Teknik 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
Dr. Nidjo Sandjojo, M.Sc2.6Teknik Kompilasi
-
4TOKEN, LEXEME dan PATTERN
Lexeme Pattern Token Suatu rangkaian k kt d
Peraturan yang j l k t
Merupakan rangkaian k kt d l tkarakter 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.Sc2.7Teknik 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 =
id pi, count, D2 letter followed by letters and digits
num 3 1416 0 6 02E23 any numeric constant
Dr. Nidjo Sandjojo, M.Sc2.8Teknik Kompilasi
num 3.1416, 0, 6.02E23 any numeric constant
literal "core dumped" any character between " and " except "
-
5ATTRIBUTE 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 dengantentang
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.Sc2.9Teknik Kompilasi
ATTRIBUTE UTK TOKEN
CONTOH:
Pattern num cocok untuk string 0 dan 1, sedangkan code generator
harus tahu string mana yang dimaksud, misalnya
E = M *C**2 akan ditulis berpasangan sbb:
Dr. Nidjo Sandjojo, M.Sc2.10Teknik Kompilasi
-
6KESALAHAN LEKSIKAL
Hanya sedikit kesalahan leksikal (lexical errors) yang dapat
dilihat di phase lexical analyzer karena phase ini mempunyai
pandangan yang sempit pada program sumberpandangan yang sempit pada
program sumber
Misal; fi(a = = f(x)) dalam bahasa C, maka lexical analyzertidak
dapat menjelaskan apa fi tersebut betul sebagai identifieratau
salah eja yang seharusnya adalah if
Dr. Nidjo Sandjojo, M.Sc2.11Teknik Kompilasi
KESALAHAN LEKSIKAL (Contd)
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
Dr. Nidjo Sandjojo, M.Sc2.12Teknik Kompilasi
-
7INPUT BUFFERING
Tiga pendekatan umum untuk mengimplementasikan suatu
Penganalysis Leksikal (Lexical Analyzer).1 Gunakan pembentuk
lexical analyzer seperti kompilator Lex1. 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.Sc2.13Teknik Kompilasi
y g yekplisit mengatur pembacaan input.
INPUT BUFFERING (Contd) BUFFER PAIRS
Satu buffer dibagi menjadi dua bagian
Dr. Nidjo Sandjojo, M.Sc2.14Teknik Kompilasi
Jumlah karakter tiap bagian = 1024 (210) atau 4096 (4 X 210)
yang merupakan N
N karakter tersebut dibaca sekaligus untuk ditempatkan di tiap
setengah buffer-nya
-
8INPUT BUFFERING (Contd)
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.Sc2.15Teknik 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,
Dr. Nidjo Sandjojo, M.Sc2.16Teknik Kompilasi
Language adalah setiap set dari string pada suatu alphabet yang
tetap (set of strings)
-
9OPERASI PADA BAHASA Terdapat beberapa operasi penting yang
dapat diterapkan pada
bahasa (languages).
Khusus untuk lexical analysis: union, concatenationKhusus 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. LD = himpunan huruf dan angka.2. LD = himpunan string
terdiri dari satu huruf diikuti oleh satu angka.
Dr. Nidjo Sandjojo, M.Sc2.17Teknik Kompilasi
3. L4 = himpunan string 4 huruf.4. L* = himpunan string
huruf-huruf termasuk string .5. L(LD)* = himpunan semua string
huruf dan angka yang dimulai
dengan huruf.6. D+ = himpunan semua string angka (satu atau
lebih).
OPERASI PADA BAHASA (Contd)
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 Mditulis L M Sambungan L dan M
ditulis LM Penutup Kleene L
ditulis L*
Dr. Nidjo Sandjojo, M.Sc2.18Teknik Kompilasi
L+ = Li L+ = penyambungan
i=1 satu atau lebih L
ditulis L Penutup Positif L
ditulis L+
-
10
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.Sc2.19Teknik Kompilasi
kurung.
Satu bahasa yang ditunjukkan oleh satu ekspresi beraturan
disebut REGULAR SET.
EKSPRESI BERATURAN (Contd)
Regular definitions adalah satu urutan dari bentuk : d1 r1
d2 r2 ... dn rn
d = nama r = regular expression
Dr. Nidjo Sandjojo, M.Sc2.20Teknik Kompilasi
-
11
EKSPRESI BERATURAN (Contd)
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.Sc2.21Teknik Kompilasi
g y g g p y pberaturan.
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 (Contd)
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, }
Dr. Nidjo Sandjojo, M.Sc2.22Teknik 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.
a*
-
12
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.Sc2.23Teknik Kompilasi
PENGENALAN TOKEN (Contd)
Terminal-terminal tersebut diatas yaitu: if, then, else, relop,
id dan num membentuk himpunan rangkaian (string) yang diberikan
oleh definisi beraturan sebagai berikut:gif ifthen thenelse
elserelop < | | >=id letter(letter|digit)*num digit+(
digit+)?(E(+|-)?digit+)?
Dr. Nidjo Sandjojo, M.Sc2.24Teknik Kompilasi
num digit (.digit+)?(E(+|-)?digit+)? Lexical analyzer akan
mengenali keywords if, then, else serta
lexeme yang dinyatakan oleh relop, id dan num.
Keywords adalah kata-kata reserved yang tidak dapat digunakan
sebagai identifier (id).
-
13
MENGHILANGKAN WHITE SPACE
Lexical analyzer akan menghilangkan white space (i.e., blanks,
tabs, new lines) dengan menggunakan regular definitionsebagai
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.Sc2.25Teknik 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).
Dr. Nidjo Sandjojo, M.Sc2.26Teknik Kompilasi
y (g )
-
14
TRANSITION DIAGRAM (Contd)
Dr. Nidjo Sandjojo, M.Sc2.27Teknik Kompilasi
Catatan: state edge (sisi) accepting state pointer tanda dapat
mundur *
:
:
::
TRANSITION DIAGRAM (TD)
Contoh: TD utk pattern > atau >= Pembacaan dimulai dari
state 0, membaca karakter berikutnya yaitu >
utk menuju ke state 6utk 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.
Dr. Nidjo Sandjojo, M.Sc2.28Teknik Kompilasi
-
15
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.Sc2.29Teknik Kompilasi
p f g g1. Deklarasi (Declarations)2. Aturan Translasi
(Translation Rules) 3. Prosedur Tambahan (Auxiliary Procedures)
A LANGUAGE for SPECIFYING LEXICAL ANALYZERS (2)
Dr. Nidjo Sandjojo, M.Sc2.30Teknik Kompilasi
-
16
%{/* definitions of manifest constantsLT, 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.Sc2.31Teknik 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 = GT; return(RELOP);}">=" {yylval = GE;
return(RELOP);}%%
-
17
install_id() {/* procedure to install the lexeme, whosefirst
character is pointed to by yytext and
A LANGUAGE for SPECIFYING LEXICAL ANALYZERS (5)
p y yywhose length is yyleng, into the symbol tableand return a
pointer thereto */
}install_num() {
/* similar procedure to install a lexeme thatis a number */
Dr. Nidjo Sandjojo, M.Sc2.33Teknik Kompilasi
}
Fig. 3.18. Lex program for the tokens of Fig. 3.10.
A LANGUAGE for SPECIFYING LEXICAL ANALYZERS (6)
Dr. Nidjo Sandjojo, M.Sc2.34Teknik Kompilasi
-
18
FINITE AUTOMATA (1)
Recognizer suatu bahasa; program yang mengambil string xsebagai
input dan menjawab yes bila x adalah kalimat dari bahasa tersebut
dan menjawab no bila sebaliknyabahasa 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.Sc2.35Teknik 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.
PerbedaanDFA NFA
Menghasilkan pengenal lebih cepat.
Menghasilkan pengenal lebih lambat.
Dr. Nidjo Sandjojo, M.Sc2.36Teknik Kompilasi
Ukuran DFA lebih besar untuk hal yg sama.
Ukuran NFA lebih kecil untuk hal yang sama.
-
19
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 S0 yg 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.Sc2.37Teknik Kompilasi
(accepting/final state).
NFA dapat direpresentasikan dalam bentuk bagan sebagai suatu
grafik yang berlabel disebut Transition Graph, dengan nodesebagai
state dan sisi berlabel menyatakan fungsi transisi.
NON-DETERMINISTIC FINITE AUTOMATA (Contd)
Transition graph untuk mengenali bahasa (a|b)*abb
Dr. Nidjo Sandjojo, M.Sc2.38Teknik Kompilasi
Catatan:set state = {0,1,2,3} state awal = state 0set simbol
input = {a,b} state penerima = state 3
-
20
NON-DETERMINISTIC FINITE AUTOMATA (Contd)
NFA Memungkinkan terjadi lebih dari satu transisi (simbol)
yang keluar dari satu state untuk input yang samayang 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.Sc2.39Teknik Kompilasi
Contoh: Fig 3.19 Fig 3.20
NON-DETERMINISTIC FINITE AUTOMATA (Contd)
Dr. Nidjo Sandjojo, M.Sc2.40Teknik Kompilasi
-
21
NON-DETERMINISTIC FINITE AUTOMATA (Contd)
Dr. Nidjo Sandjojo, M.Sc2.41Teknik Kompilasi
NON-DETERMINISTIC FINITE AUTOMATA (Contd)
Transition table for the finite automaton aa*|bb* NFA:
aa*|bb*
StateInput Symbols
a b0 {1,3} - -
1 - {2} -
Dr. Nidjo Sandjojo, M.Sc2.42Teknik Kompilasi
2 - {2} -
3 - - {4}
4 - - {4}
-
22
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.Sc2.43Teknik 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
DETERMINISTIC FINITE AUTOMATA (Contd)
Dr. Nidjo Sandjojo, M.Sc2.44Teknik Kompilasi