Nassava’s Blog

October 26, 2009

LA TEKOM

Filed under: Uncategorized — nassava @ 3:01 pm

PENJELASAN

ANALISIS SEMANTIK

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 ‘*’.

Fungsi ini terkait dengan tabel simbol. 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.

NOTASI POSTFIX

Sintaks notasi Postfix :

<operan><operan><operator>

Misalkan ekspresi :

(a + b)*(c + d)

kalau kita nyatakan dalam postfix :

ab + cd + *

Contoh 1 :  A = A + B * C / D – ( F + G )

  • Pada grammar atau kalimat diatas, dapat dijabarkan hasilnya untuk notasi postfix-nya yaitu pertama-tama kita akan merubah ekspresi dimana pada (B*C menjadi BC*) lalu pada ekspresi (BC* dengan /D menjadi BC*D/) kemudian ekspresi (F+G menjadi FG+) yang kemudian hasil dari (A+BC*D/ menjadi ABC*D/) lalu hasil dari ekspresi sebelumnya ((A+BC*/D) –(FG+) menjadi ABC*D/FG++-))) lalu pada ekspresi akhir menjadi : AABC*D/FG++-=.

Contoh 2 : ( A * B ) + C – D / ( F – G )

Maka notasi postfix dari kalimat diatas adalah :

  1. 1. Pertama kita akan menjabarkan (AB*) lalu (FG-) maka akan menjadi : AB*+C-D/FG-
  2. 2. Kemudian kita akan menjabarkan (D/FG- menjadi FG-D/) maka menjadi : AB*+C-FG-D/
  3. 3. Setelah itu kita akan menjabarkan (AB*+C menjadi AB*C+) maka menjadi : AB*C+-FG-D/

  1. 4. Lalu kita akan melanjutkan untuk menjabarkan (C+FG-D/- menjadi CDFG-/+- ) maka menjadi : AB*CDFG-/+-
  • Cara diatas, lakukan operasi terlebih dahulu kepada operan yang pertama dilakukan, yaitu (A = B) kemudian lakukan operasi kepada operand selanjutnya hingga proses mencapai atau mendapatkan hasil : AB*CDFG-/+-

TRIPLE NOTATION

Notasi tripel memiliki format sebagai berikut :

<operator><operan><operan>

Contoh soal 1 :

A := D * C + B / E

Kemudian kita dapat memberikan kode antara tripel yang diantaranya :

  1. *, D, C
  2. /, B, E
  3. +, (1), (2)
  4. :=, A, (3)

Contoh soal 2 :

A : = ( A + B ) * ( C + D)

Kemudian kita akan memberikan Triple notation :

1.   +,  A, B

  1. +, C, D
  2. *, (1), (2)
  3. :=, A, (3)

Contoh soal 3 :

A:= B+C*D/E

F:= C*D

Kemudian kita akan memberikan Trile Notation sebagai berikut :

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

QUADRUPLES NOTATION

Format instruksi Quadruples hasil adalah temporary yang bisa ditempatkan pada memory atau register :

<operator><operan><operan><hasil>

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

Bila dibuat dalam Kode Antara :
1. *,D,C,T1
2. /,B,E,T2
3. +,T1,T2,A

KODE ANTARA

Kegunaan dari Kode Antara / intermediate code :

  • Untuk memperkecil usaha dalam membangun kompilator dari sejumlah bahasa ke sejumlah mesin
  • Proses optimasi lebih mudah. (dibandingkan pada program sumber atau kode assembly dan kode mesin)

Bisa melihat program internal yang gampang dimengerti.

Contoh soal :

a := 1

WHILE   a<5   DO

a := a + 1

diubah ke notasi postfix menjadi sebagai berikut :

  1. a
  2. 1
  3. :=
  4. a
  5. 5
  6. <
  7. 26     {menunjuk label1}
  8. BZ
  9. a
  10. a
  11. 1
  12. +
  13. :=
  14. 13     {menunjuk label2}
  15. B

Keterangan :

Notasi Postfix di atas bisa dipahami sebagai berikut.

  • Bila ekspresi (a > b) salah, maka loncat ke instruksi no.22
  • Bila ekspresi (a > b) benar, tidak terjadi loncatan, instruksi berlanjut ke 16 sampai 18, lalu loncat ke 25.

Blog at WordPress.com.