Chebii's Blog

Just another WordPress.com weblog

ANALISIS SEMANTIK

Semantik (dari bahasa Yunani sēmantiká, jamak netral dari sēmantikós) adalah studi tentang makna. Ini biasanya berfokus pada hubungan antara penanda, seperti kata-kata , frase , tanda-tanda dan simbol.
Analisis Semantik adalah proses setelah melewati proses scanning dan parsing. Pada tahap ini dilakukan pengecekan pada struktur akhir yang telah diperoleh dan diperiksa kesesuaiannya dengan komponen program yang ada. Secara global, fungsi dari semantic analyzer adalah untuk menentukan makna dari serangkaian instruksi yang terdapat dalam program sumber.
Contoh : A := (A + B)*(C + D)
maka penganalisis semantik harus mampu menentukan aksi apa yang akan dilakukan oleh operator-operator tersebut. Dalam sebuah proses kompilasi, andaikata parser menjumpai ekspresi seperti diatas, parser hanya akan mengenali simbol-simbol ‘:=’ , ‘+’ , dan ‘*’. Parser tidak tahu makna apa yang tersimpan dibalik simbol simbol tersebut. Untuk mengenalinya, kompiler akan memanggil rutin semantik yang akan memeriksa :
 Apakah variabel-variabel yang ada telah didefinisikan sebelumnya?
 Apakah variabel-variabel tersebut tipenya sama?
 Apakah operand yang akan dioperasikan tersebut ada nilainya?, dan seterusnya.
Pengecekan yang dilakukan oleh analisis semantik adalah sebagai berikut :
a) Memeriksa keberlakuan nama-nama meliputi pemeriksaan berikut.
 Duplikasi : pada tahap ini dilakukan pengecekan apakah sebuah nama terjadi pendefinisian lebih dari dua kali. Pengecekan dilakukan pada bagian pengelola blok.
 Terdefinisi : Melakukan pengecekan apakah sebuah nama yang dipakai pada tubuh program sudah terdefinisi atau belum. Pengecekan dilakukan pada semua tempat kecuali blok.
b) Memeriksa tipe. Melakukan pemeriksaan terhadap kesesuaian tipe dalam statement-statement yang ada. Misalkan bila terdapat suatu operasi, diperiksa tipe operand. Contohnya bila ekspresi yang mengikuti instruksi IF berarti tipenya boolean, akan diperiksa tipe identifier dan tipe ekspresi. Bila ada operasi antara dua operand, maka tipe operand pertama harus bisa dioperasikan dengan operand kedua.
Analisa semantik sering juga digabungkan pada pembangkitan kode antara yang menghasilkan Output intermediate code, yang nantinya akan digunakan pada proses kompilasi berikutnya.
KODE ANTARA
Kode antara/Intermediate code merupakan hasil dari tahapan analisis, yang dibuat oleh kompilator pada saat mentranslasikan program dari bahasa tingkat tinggi. Kegunaan dari kode antara sebagai berikut:
 untuk memperkecil usaha dalam membangun kompilator dari sejumlah bahasa ke sejumlah mesin. Dengan adanya kode antara yang lebih machine independent maka kode antara yang dihasilkan dapat digunakan lagi pada mesin lainnya.
 Proses optimasi masih lebih mudah. Beberapa strategi optimisasi lebih mudah dilakukan pada kode antara daripada pada program sumber atau pada kode assembly dan kode mesin.
 Bisa melihat program internal yang mudah dimengerti. Kode antara ini akan lebih mudah dipahami dari pada kode assembly atau kode mesin.

Terdapat dua macam kode antara, yaitu Notasi Postfix dan N-Tuple

NOTASI POSTFIX
Sehari-hari kita biasa menggunakan operasi dalam notasi infix (letak operator di tengah). Pada notasi Postfix operator diletakkan paling akhir maka disebut juga dengan notasi Sufix atau Reverse Polish.
Sintaks notasi Postfix :
Misalkan ekspresi : (a + b)*(c + d)
kalau kita nyatakan dalam postfix : ab + cd + *

NOTASI N-TUPLE
Bila pada Postfix setiap baris instruksi hanya terdiri dari satu tupel, pada notasi N-tuple setiap baris terdiri dari beberapa tupel. Format umum dari Notasi N-Tuple ada sebagai berikut: operator……(N-1) operand
selanjutnya akan dibahas notasi 3 tupel dan 4 tupel.

TRIPLE NOTATION
Notasi tripel memiliki format sebagai berikut :

contoh, instuksi : A := D * C + B / E
Kode antara tripel :
1. *, D,C
2. /, B, E
3. +, (1), (2)
4. :=, A, (3)

operasi perkalian/pembagian lebih prioritas dibandingkan penjumlahan/pengurangan
Kekurangan dari notasi tripel adalah sulit pada saat melakukan optimasi, maka dikembangkan Indirect triples yang memiliki dua list (senarai), yaitu list instruksi yang berisi notasi tripel dan list eksekusi yang berisi urutan eksekusinya.
Contoh :
A:= B+C*D/E
F:= C*D
List Instruksinya:
1. *, C, D
2. /, (1), E
3. +, B, (2)
4. :=, A, (3)
5. :=, F, (1)
List Eksekusinya :
1. 1
2. 2
3. 3
4. 4
5. 1
6. 5

Single Post Navigation

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: