( BABS
ANALISIS SEMANTIK, KODE
ANTARADAN P EMBANGKITAN
KO DE I

ANALISIS SEMANTIK

• Analisis semantik masih termasuk dalam bagian front end (bagian yang menangani analisis source program)

• Proses ini merupakankelanjutan dari proses kompilasi sebelumnya, yaitu proses scanning (analisis leksikal) dan proses parsing (analisis sintaksis)

J

• Pada tahap ini dilakukan pengecekan pada
struktur akhir yang telah diperoleh dan
diperiksa kesesuaiannya dengan komponen
program yang ada.
• Memanfaatkan pohon sintaks yang dihasilkan
pada proses parsing.
• Proses anal isis sintaksis dan anal isis semantik
merupakan dua proses sangat erat kaitannya
dan sulit untuk dipisahkan.
• Fungsi dari analisis semantik adalah untuk
menentukan makna dari serangkaian instruksi
yang terdapat dalam program sumber J

• Fungsi ini merupakan suatu yang unik dan
berbeda denan bag ian lain dari keseluruhan
proses kompilasi.
• Contoh : A := (A+B) * (C+O)
• Parser hanya akan mampu mengenali simbol-
simbol ':=', '+' dan' * " parser tidak mengetahui
makna dari simbol-simbol tersebut.
• Untuk mengenali makna dari rangkaian simbol
tersebut, compiler akan memanggil rutin
semantik. Rutin ini akan menentukan aksi
khusus yang dilakukan oleh rangkaian simbol
tersebut. 1

J

Pengecekan yang dilakukan dapat berupa:

• Memeriksa penggunaan nama-nama (keberlakuannya)

o Duplikasi

Apakah sebuah nama terjadi pendefinisian lebih dari dua kali. Pengecekan dilakukan pada bag ian pengelolaan block

o Terdefinisi

Apakah nama yang dipakai pad a program sudah terdefinisi atau belum. Pengecekan dilakukan pad a semua tempat kecuali block

Untuk mengetahui makna, maka routin ini akan memeriksa:

• Apakah variabel yang ada telah didefinisikan sebelumnya

• Apakah variabel-variabel tersebut tipenya sama

• Apakah operand yang akan dioperasikan tersebut ada nilainya, dan seterusnya

• Menggunakan tabel simbol

• Pemeriksaan bisa dilakukan pada tabel identifier, tabel display, dan tabel block

I

• Memeriksa tipe

Melakukan pemeriksaan terhadap kesesuaian tipe dalam statement - statement yang ada, Misalnya bila terdapat suatu operasi, diperiksa tipe operand nya

• Analisis semantik sering juga digabungkan dengan intermediate code yang akan menghasilkan output intermediate code. Intermediate code ini nantinya akan digunakan pada proses kompilasi berikutnya (pada bagian back end compilation).

Contohnya;

• expresi yang mengikut IF berarti tipenya boolean, akan diperiksa tipe identifier dan tipe ekspresinya

• Bila ada operasi antara dua operand maka tlpe operand pertama harus bisa dioperasikan dengan operandyang kedua

l

2

I

Tabel Simbol

Pada penjelasan yang lalu telah disinggung tentang batasan-batasan yang ditetapkan untuk sebuah token ataupun ekspresi. Batasanbatasan tersebut misalnya : panjang maksimum sebuah token pengenal (identifier) atau sebuah ekspresi tunggal, jangkauan bilangan bulat, tipe operan dalam ekspresi aritmatika, dan apakah suatu pen genal sudah/belum dideklarasikan (atau bahkan dideklarasikan ganda), bagaimana data suatu pen genal dideklarasikan, dan dimana data tersebut disimpan.

I
Informasi_pengenal yang perlu disertakan dalam
tabel misalnya adalah :
411 a. untai karakter (token) yang menyajikan
nama_pengenal
b. atribut-atribut nama_pengenal, misalnya :
b.1. peran dari nama (misalnya sebagai :
konstanta, label, peubah, atau prosedur)
b.2. tipe data (misalnya : integer, real, character)
c. parameter nama_pengenal (misalnya dimensi
array, batas atas/bawah array)
d. alamat dan besar RAM yang dialokasikan
untuk nama_pengenal
~ I

Referensi atau jawaban atas batasan-batasan di
atas umumnya harus diperoleh melalui sebuah
tabel simbol (symbol table). Sebuah simbol tidak
lain adalah sebuah pen genal. Setiap entri simbol
tabel terdiri dari pasangan (nama_pengenal,
informasi_pengenal). Sebuah nama_pengenal
bisa merupakan : nama prosedur, nama peubah,
nama konstanta, dan sebagainya. Se~uah tabel simbol harus dibuat sedemikian rupa sehinqqa memiliki kemampuankemampuan

berikut:

411 a. dapat menentukan apakah suatu nama_pengenal terdapat dalam tabel

b. dapat memasukkan nama_pengenal baru ke dalam tabel

c. dapat memasukkan informasi baru tentang nama_pengenal baru ke dalam tabel

d. dapat mengakses informasi mengenai suatu nama_pengenal

e. menghapus satu atau beberapa

nama_pengenal dari tabel (membebaskan RAM)

3

I

Hash Table

Struktur data yang layak digunakan untuk mengimplementasikan tabel simbol adalah linked list terutama dalam tiga manifetasinya : linear linked list, tree, atau hash. Dari ketiga manifestasi tersebut hash (atau sering disebut hash tabe/) adalah yang paling layak untuk dipilih.

I
Dalam pembicaraan tentang hash table
dikenal istilah hash function f. Fungsi f ini
digunakan untuk memasukkan nama
_
pengenal ke dalam tabel simbol. Salah satu
contoh ungkapan fungsi f adalah : f(X) =
kode dari karakter pertama dari X dimana X
adalah nama_pengenal.
Misalkan terdapat 5 nama_pengenal : aster,
anyelir, anggrek, bakung, dan cempaka.
Misalkan pula aturan pengkodean adalah
a = 0, b = 1 ,dan d = 2. I
Sebuah hash table terdiri dari beberapa bucket.
Setiap bucket terdiri dari beberapa slot. Setiap
bucket diberi nomor, dimulai dari nomor 0 (nol).
Berikut ini adalah contoh sebuah hash table yang
terdiri dari 26 bucket (b = 26) dan 2 slot/bucket (s
= 2) :
-
slot-z slot-I
0 I I I
1
2

24 I I I
25
I Tabel simbol yang dihasilkan adalah :

slot-z

slot-I

anyelir

~o 1

aster

bakunz

cempaka

24

4

Perhatikan bahwa nama_pengenal aster,
anyelir, dan anggrek mempunyai nilai f(X)
yang sama. Karena setiap bucket hanya
4 terdiri dari 2 slot maka nama_pengenal
anggrek tidak dapat dimasukkan ke dalam
tabel simbol. Jika sebuah nama_pengenal
dipetakan ke dalam bucket yang sudah
penuh akan terjadi overtlow. Collision terjadi
jika dua nama_pengenal berbeda mempunyai
nilai fungsi yang sama (artinya dipetakan ke
bucket yang sama). Jika s = 1 maka collision
dan overtlow terjadi bersamaan. J

Intermediate Code
Kode antara (intermediate code) adalah sebuah
representasi yang disiapkan untuk mesin abstrak
tertentu. Dua sifat yang harus dipenuhi oleh kode
antara adalah :
- dapat dihasilkan dengan mudah
- mudah ditranslasikan menjadi program sasaran
(target program)
Representasi kode antara biasanya berbentuk
perintah tiga alamat (three-address code), baik
berbentuk quadruples ataupun triples I

Fungsi hash yang lebih baik dan sering dipakai adalah uniform hash function. Dikatakan uniform karena dengan fungsi ini

41 semua nama_pengenal mempunyai peluang yang sama untuk dipetakan ke setiap bucket. Salah satu bentuk unform hash function ini adalah:

f(X) = kode(X) mod M

dengan M adalah bilangan prima yang lebih besar dari 20. Dengan menggunakan fungsi f ini maka ukuran bucket adalah b = M dengan s tertentu.

I

• Memperkecil usaha dalam membuat

lagi pada mesin lainnya

• Proses Optimasi lebih mudah. Lebih mudah dilakukan pada intermediate code dari pada program sumber (source program) atau pada kode

assembly dan kode mesin

5

J

• Intermediate code ini lebuh mudah dipahami dari pada kode assemblyatau kode mesin

• Kerugiannya adalah melakukan 2 kali transisi, maka dibutuhkan waktu yang relatif lama

~da dua macam intermediate code yaitu Notasi Postfix dan N-Tup/e

Notasi POSTFIX

<Operand> <Operand> < Operator> Misalnya :

( a -b ) * ( c-d )

l

Contoh : IF a > b THEN c := d ELSE c := e

Dalam bentuk Postfix 11 a

12 b

13 >

14 22

15 BZ

16 c

17 d

18 ,-

19

2025

21 BR

22 c

23 e

24 :=

25

I

maka Notasi postfixnya abt edt *

Semua instruksi kontrol program yang ada diubah menjadi notasi postfix, misalnya

IF <expr> THEN <stmt1> ELSE <stmt2>

Diubah ke postfix menjadi ;

<expr> <labell > BZ <stmt1> <labeI2> BR < stmt2> BZ : Branch if zero (salah)

BR: melompat tanpa harus ada kondisi yang ditest

l

I

bila expresi (a>b) salah, maa loncat ke instruksi 22, Bila expresi (a>b) benar tidak ada loncatan, instruksi berlanjut ke 16-18 lalu loncat ke 25

Contoh:

WHILE <expr> DO <stmt>

Diubah ke postfix menjadi; <expr> <labeI1> BZ <stmt> <labeI2> BR

Instruksi: a: = 1

WHILE a < 5 DO a := a + 1

6

Dalam bentuk Postfix 10 a

11 1

12 :=

13 a

14 5

15 <

16 26

17 BZ

18 a

19 a

201

211

22 :=

23

2413

25 BR

Contoh lain:

IF X> Y THEN

X := a - b

ELSE

X := a + b

Intermidiate code triple:

1. >, X, Y

2. BZ, (1), (6)

3. -, a, b

4. :=, X, (3)

5. BR, , (8)

6. +, a, b

7. :=, X, (6)

bila kondisi 1 tidak terpenuhi loncat ke lokasi 6

I

TRIPLES NOTATION

Notasi pada triple dengan format <operator> <operand> <operand> Contoh:

A := D * C + B / E

Jika dibuat intermidiate code triple:

1. *, D, C

2. /, B, E

3. +, (i), (2)

4. :=, A, (3)

Perlu diperhatikan presedensi (hirarki) dari operator, operator perkalian dan pembagian mendapatkan prioritas lebih dahulu dari pada penjumlahan dan

pengurangan

---,

I

Kelemahan dari notasi triple adalah sulit pad a sa at melakukan optimasi, maka dikembangkan Indirect triples yang memiliki dua list; list instruksi dan list eksekusi. List Instruksi berisikan notasi triple, sedangkan list eksekusi mengatur eksekusinya; contoh

A := B + C * D / E F := C * D

7

Quardruples Notation Format dari quardruples adalah

<operator> <operand> <operand> <result>

Result atau hasil adalah temporary variable yang dapat ditempatkan pada memory atau register . Problemnya adalah bagaimana mengelola temporary variable seminimal mungkin

Contoh: A : = D * C + B / E

Jika dibuat intermidiate codenya

1. *, D, C, Tl

2. /, B, E, T2

3. +, Tl, T2, A

I

STO T2 LDA Tl MUL T2 STO T3

hasil dari code generator akan diterima oleh code optimation , Misalnya untuk kode assembly diatas dioptimasikan menjadi:

LDA A ADD B 5TO Tl LDA C ADD D MUL Tl STO T2

• Hasil dari tahapan anlisis diterima oleh code generator (pembangkit kode)

• Intermediate code ditansfromasikan kedalam bahasa assembly atau mesin

• Misalnya

(A+B)*(C+D) dan diterjemahkan kedalam bentuk quadruple:

1. +, A, B, T1

2. +, C, D, T2

3. *, Tl, T2, T3

Dapat ditranslasikan kedalam bahasa assembly dengan accumulator tung gal :

LDA A ( isi A ke dalam accumulator)

ADD B (isi accumulator dijumlahan dengan B)
STO Tl ( Simpan isi Accumulator ke Tl)
LDA C
ADD D
----, I
Perjalanan sebuah intruksi
<assign>
s-.
Id1:= «Expr»
I!\ LOA A
Source ADD Y
Token-token Id2 + Id1 Code Generator STO X
Program Analisis Id1 :=ld2+ld1 Anallsls dan Analisis
X =Y +) Leksikal '" Sintaksis ) sematiks ~
~
-. t .:
-
Tabel
Simbol
-
l 8

Sign up to vote on this title
UsefulNot useful