module-02
-
Upload
anto-samalona -
Category
Documents
-
view
224 -
download
8
description
Transcript of module-02
-
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