Anda di halaman 1dari 16

Teknik Kompilasi

Analisis Leksikal

Model Sebuah Kompilator


Source
code

Object
code

SYNTHESIS

ANALYSIS

Lexical
Analyzer
(Scanner)

Syntactic
Analyzer
(Parser)

Semantic
Analyzer
Intermediate
Code
Generator

Intermediate
code

Code
Generator

Code
Optimizer

TABEL SIMBOL

Definisi

Analisis leksikal (lexical analysis) disebut juga scanner merupakan


proses menguraikan source code menjadi unit-unit kecil yang
mempunyai arti (TOKEN).
Proses penguraian ke dalam bentuk token disebut Tokenizing.
Source
Code

Analysis
Lexical

Token

Scanner bekerja berdasarkan mesin finite state automata (FSA)


yang ada pada Bahasa Regular.
Untuk membantu mengkonstruksi scanner dapat mempergunakan
Diagram Keadaan.

Tugas Analysis Lexical

Tugas utama analisis leksikal adalah menguraikan tiap baris source


code menjadi token-token.
Membuang komentar;
Menyeragamkan huruf kapital menjadi huruf kecil atau sebaliknya;
Membuang white space ;
Menginterpretasikan kompiler directive;

Berkomunikasi dengan Tabel Simbol;


Membuat listing.

Contoh :

for I := 1 to max do
x[i] : = 0;
hasil penguraian :
Keyword

= for, to, do

Operator

= :=

identifier

= i, max, x

Puctuation

= ;

Brackets

=[,]

Constatnts = 1, 0

Besaran Leksik

Besaran pembangun bahasa (leksik) meliputi hal-hal berikut :


Identifier (bisa berupa Nama atau Keyword)
Nilai Konstanta : suatu konstanta yang terdapat pada program.
Operator dan delimeter :

Identifier

Identifier bisa berupa kata kunci (keyword) atau Nama.


Keyword merupakan kata kunci yang sudah didefinisikan oleh suatu
bahasa seperti BEGIN, END, IF, THEN, ELSE di dalam Pascal.
Nama dideklarasikan sendiri oleh programmer, misalnya nama
sebuah variabel.
Contoh program dalam Pascal :
VAR
Nomor : INTEGER;
Suhu
: REAL;
maka Nomor dan Suhu akan dikenali sebagai besaran leksik berupa
nama variabel yang terdapat pada program tersebut. Sedangkan
VAR, INTEGER, dan REAL merupakan keyword.

Nilai Konstanta

Nilai konstanta adalah suatu konstanta yang terdapat pada


program (bisa berupa konstanta integer, real, boolean, dan
sebagainya).
Contoh program dalam Pascal :
N := R + 5 * 10;
kata := kata1 + makan;
selesai := TRUE;
maka 5, 10, makan, dan TRUE termasuk besaran leksik berupa
nilai konstanta.

Operator dan Delimeter

Operator terdiri dari operator aritmatika (+,-,*,/) dan operator


logika (<,=,>).
Delimeter berfungsi sebagai pemisah atau pembatas, misalnya
tanda kurung buka/tutup, koma, titik, titik koma, titik dua, white
space (white space adalah pemisah yang diabaikan di program).

Contoh Besaran Leksik

Misalkan terdapat sebuah program sumber :


PROGRAM Coba;

VAR A : INTEGER;
BEGIN
A := A + 2;
END.

Pada contoh program di atas, besaran leksiknya (token) adalah :


PROGRAM Coba

VAR

INTEGER

:=

BEGIN

END

Finite State Automata

Analisis leksikal lebih mudah diimplemntasikan pada finite state


automata (FSA), yang meliputi :
Deterministic finite automata (DFA)
Non-deterministic finite automata (NFA)

Kumpulan state menyatakan satu proses dan aturanaturannya menyatakan kemungkinan-kemungkinan yang
terjadi dalam menyelesaikan proses tersebut.
Accepting state menyatakan state yang diterima (dapat
ditentukan menggunakan directed graph).

10

Analisa Leksikal dengan FSA

Deklarasi variabel dalam bahasa C berbentuk INT A, B ; terdiri


type, kumpulan variabel, dan tanda akhir instruksi (;).
Aturan dalam bahasa C :
Type data memiliki banyak alternatif;
Variabel bisa tidak ada, bisa juga banyak variabel (harus dipisahkan
dengan koma);

Tanda akhir instruksi harus diberikan.

Aturan tersebut secara umum dapat dibuat dengan menggunakan


FSA atau State Table.

11

Contoh FSA
;

type

1
var

;
0

;
;

2
var
,

INPUT

Current
state

nothing

type

var

Next state

12

FSA untuk Turbo Pascal

Berikut adalah beberapa token yang digunakan dalam


Pascal:

Turbo

Identifier dan Konstanta Integer


Keywors :
absolute, and, array, begin, case, const, div, do, downto, else,
end, external, file, for, forward, function, goto, if, in, inline,
label, mod, nil, not, of, overlay, packed, procedure, program,
record, repeat, set, shl, shr, string, then, to, type, until, var,
while, with, xor.
Operator sederhana :
:;.,+-*/=^()<>[]{}#$
Operator gabungan :
:= >= <= <> (* *)

Untuk mengenali token tersebut keyword atau bukan, Turbo Pascal


membentuk state table. Kemudian token-token yang berupa string
dicocokan ke tabel tersebut. Bila tidak ada dalam tabel, token
tersebut menjadi identifier.
13

INPUT

Curr.
State

Backup

<

>

sp

19

19

19

12

19

14

17

19

20

20

20

20

20

20

20

20

20

20

20

20

20

10

10

11

11

12

20

20

20

20

20

20

20

20

20

20

20

20

20

13

14

20

20

20

20

20

20

20

20

20

20

20

20

20

15

16

17

20

20

20

20

20

20

20

20

20

20

20

20

20

18

19

20

14

Arti State pada State Table


1.

Starting state

11.

End of (**)

2.

In identifier

12.

Found :

3.

End of identifier

13.

Token :=

4.

In number

14.

Found <

5.

End of number

15.

Token <=

6.

In { } commat

16.

Token <>

7.

End of { } commant

17.

Found >

8.

Found (

18.

Token >=

9.

In (**) commant

19.

General punctuation

10.

Found * in (**)

20.

General punctuation

State yang tercetak tebal dan garis bawah adalah accepting state.
l = letter (huruf) , d = digit (angka), sp = spasi, p = punctuation mark (tanda
pemisah/ karakter-karakter yang tidak termasuk dalam daftar).
y = yes , artinya bila ada token baru bisa dikenali setelah ada tanda khusus
untuk awal dan akhir, maka pointernya (cp) disimpan, n = no, artinya
pointernya tidak disimpan.

15

Contoh

Misalnya ada pernyataan yang akan dianalisis :


x := ab;

state-state yang dilewati pada saat analisis :


1

sp

sp

sp

12

13

19
16

Anda mungkin juga menyukai