• Tidak ada hasil yang ditemukan

BAB 2. ANALISIS LEKSIKAL

N/A
N/A
Protected

Academic year: 2021

Membagikan "BAB 2. ANALISIS LEKSIKAL"

Copied!
22
0
0

Teks penuh

(1)

ANALISIS LEKSIKAL

ANALISIS LEKSIKAL

ANALISIS LEKSIKAL

ANALISIS LEKSIKAL

Dr. Nidjo Sandjojo, M.Sc 2.1 Teknik Kompilasi

BAB 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

(2)

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 Kompilasi

Symbol

Table

SOURCE Characters Tokens PARSER LEXER SOURCE TEXT

(3)

PERAN 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

(4)

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

(5)

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,>

(6)

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

(7)

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

(8)

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)

(9)

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+

(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.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

(11)

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.

(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.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.

(13)

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

(14)

TRANSITION DIAGRAM (Cont’d)

Dr. Nidjo Sandjojo, M.Sc 2.27 Teknik 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 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.

(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.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)

(16)

%{

/* 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);} %%

(17)

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)

(18)

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.

(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 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

(20)

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.20

(21)

NON-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}

(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.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

Gambar

Fig. 3.18. Lex program for the tokens of Fig. 3.10.
Fig 3.19 Fig 3.20

Referensi

Dokumen terkait

Maka permasalahan yang diteliti dibatasi sesuai dengan rumusan masalah yang dibahas yaitu mengenai pelanggaran terhadap asas hukum diplomatik dalam kasus penolakan

Stasioneritas terhadap ragam dapat diduga dengan melihat plot  bo-co. !ika nilai 9 sama dengan satu &amp; 9 sama dengan satu dalam batas atas dan batas bawah' maka deret

Tidak hanya gebyok, saya mendapatkan banyak mendengar cerita dari &#34;arga mengenai cerita kali 1engek, maupun cerita tokoh!tokoh yang kini makamnya berada di

Berdasarkan uraian penjelasan yang meliputi tugas dan kewenangan Dinas Perhubungan Kabupaten Hulu Sungai Utara, Fungsi-fungsi yang dimiliki, struktur organisasi, dan

Sebaliknya individu yang memiliki tingkat pe- ngetahuan tentang agama yang rendah akan melakukan perilaku seks bebas tanpa berpikir panjang terlebih dahulu sehingga

Kinerja jaringan umumnya ditentukan dari berapa rata-rata dan persentase terjadinya tundaan (delay) terhadap aplikasi, jenis pembawa (carriers), laju bit

Artinya, proses komunikasi yang terjadi dalam organisasi tersebut jika terlaksana dengan baik maka BASARNAS Kupang akan semakin kokoh dan kinerja pegawai akan meningkat.

Alam itu gambaran pria, ilmu itu gambaran wanita. Dan wanita pasti ada orangtuanya. Anda ingin seorang wanita yang nemu di jalan? Apakah anda yakin wanita itu manfaat bagi anda?