ANALISA SEMANTIK
Analisa 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.
fungsi analisis semantik adalah untuk menentukan makna dari serangkaian intruksi yang terdapat dalam program sumber. Contoh : W := (W+X)*(Y+Z)
maka penganalisa semantik harus mampu menentukan aksi apa yang akan dilakukan oleh operator-operator tersebut. untuk mengetahui makna, maka rutin analisa semantik akan memeriksa:
- apakah variabel yang ada telah didefinisikan sebelumnya
- apakah variabel tersebut tipenya sama
- apakah operan yang akan dioperasikan tersebut ada nilainya
pengecekan yang dilakukan oleh semantik yaitu memeriksa duplikasi,terdefinisi, dan memeriksa tipe.
Kode antara
kegunaannya :
- untuk memperkecil usaha dalam membangun kompilator dari sejumlah bahasa ke sejumlah mesin
- proses optimasi lebih mudah
- bisa melihat program internal yang gampang dimengerti
terdapat dua macam kode antara, yaitu :
- Notasi Postfix
kita dapat mengubah kontrol program yang ada ke dalam notasi postfix. Misal :
IF<exp>THEN<statment1>ELSE<statement2>
diubah kedalam
<exp><label1>BZ<statement1><label2>BR ↓ <statement2> ↓
label1 label2
keterangan :
BZ = branch if zero ( zero = salah ) {bercabang/meloncat jika kondisi yang dites salah}
BR = branch {bercabang/meloncat tanpa ada kondisi yang dites}
Arti Notasi Postfix diatas adalah sebagai berikut :
" jika kondisi ekspresi salah, maka intruksi akan meloncat ke label1 dan menjalankan statement2. bila kondisi ekspresi benar, maka statement1 akan dijalankan lalu meloncat ke label2. label1 dan label1 dan label2 sendiri menunjukkan posisi tujuan loncatan, untuk label1 posisinya tepat sebelum statement2, dan label2 setelah statement2"
Contoh Notasi Postfix :
(m - n)* (op-po) - h
(1) m-n → mn-
(2) op-po → oppo-
(3) -h → h-
(4) * → *
jadi, (1) oppo- * h- disederhanakan menjadi (1) (2) * (3)
Contoh Notasi Postfix :
(m - n)* (op-po) - h
(1) m-n → mn-
(2) op-po → oppo-
(3) -h → h-
(4) * → *
jadi, (1) oppo- * h- disederhanakan menjadi (1) (2) * (3)
- N-Tuple
bila pada postfix setiap baris intruksi hanya terdiri dari satu tuple, pada notasi N-Tuple setiap baris terdirindari beberapa tupel. format umum dari Notasi N-Tuple ada sebagai berikut:
" operator ...........(N-1) operand"
TRIPLE NOTATION
Notasi N-Tuple memiliki format sebagai berikut:
<operator> <operan> <operan>
contoh, intruksi:
M := P*O + N /Q
kode antara tripel :
1.*,P,O
2. /,N,Q
3. +,(1),(2)
4. :=, M, (3)
QUADRUPLES NOTATION
format notasi kuadrupel :
<operator> <operan><operan><hasil>
hasil adalah temporary variabel yang bisa ditempatkan pada memori atau register. masalah yang ada bagaimana memperoleh temporary variabel (hasil) seminimal mungkin.
contoh, intruksi :
M := P*O+N/Q
bila dibuat dalam kode antara :
1. *,P,O,T1
2. /,N,Q,T2
3. +,T1,T2,M
Contoh Notasi N-Tuple :
(m-n)* (op-po)-h
(1) m-n → -mn
(2) op-po → -oppo
(3) -h → -h
(4) * → *
jadi, *(1)-oppo-h disederhanakan menjadi *(1) (2) (3)
Komentar
Posting Komentar