Professional Documents
Culture Documents
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 operatoroperator tersebut. Dalam sebuah proses kompilasi, andaikata parser men umpai ekspresi seperti diatas, parser hanya akan mengenali simbol-simbol !:"! , !#! , dan !$!. Parser tidak tahu makna apa yang tersimpan dibalik simbol simbol tersebut. %ntuk mengenalinya, kompiler akan memanggil rutin semantik yang akan memeriksa :
Apakah &ariabel-&ariabel yang ada telah didefinisikan sebelumnya' Apakah &ariabel-&ariabel tersebut tipenya sama' Apakah operand yang akan dioperasikan tersebut ada nilainya', dan seterusnya. (ungsi ini terkait dengan tabel simbol. Pengecekan yang dilakukan oleh analisis semantik
Duplikasi : pada tahap ini dilakukan pengecekan apakah sebuah nama ter adi pendefinisian lebih dari dua kali. Pengecekan dilakukan pada bagian pengelola blok. +erdefinisi : *elakukan pengecekan apakah sebuah nama yang dipakai pada tubuh program sudah terdefinisi atau belum. Pengecekan dilakukan pada semua tempat kecuali blok.
b) *emeriksa tipe. *elakukan pemeriksaan terhadap kesesuaian tipe dalam statementstatement yang ada. *isalkan bila terdapat suatu operasi, diperiksa tipe operand. Contohnya bila ekspresi yang mengikuti instruksi ,( berarti tipenya boolean, akan diperiksa tipe identifier dan tipe ekspresi. -ila ada operasi antara dua operand, maka tipe operand pertama harus bisa dioperasikan dengan operand kedua. Analisa semantik sering berikutnya. KODE ANTARA /ode antara0Intermediate code merupakan hasil dari tahapan analisis, yang dibuat oleh kompilator pada saat mentranslasikan program dari bahasa tingkat tinggi. /egunaan dari kode 1 uga digabungkan pada pembangkitan kode antara yang menghasilkan .utput intermediate code, yang nantinya akan digunakan pada proses kompilasi
untuk memperkecil usaha dalam membangun kompilator dari se umlah bahasa ke se umlah 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. -eberapa strategi optimisasi lebih mudah dilakukan pada kode antara daripada pada program sumber atau pada kode assembly dan kode mesin. -isa melihat program internal yang mudah dimengerti. /ode antara ini akan lebih mudah dipahami dari pada kode assembly atau kode mesin.
+erdapat dua macam kode antara, yaitu 2otasi Postfi3 dan 2-+uple NOTASI POSTFIX Sehari-hari kita biasa menggunakan operasi dalam notasi infi3 4letak operator di tengah). Pada notasi Postfi3 operator diletakkan paling akhir maka disebut uga dengan notasi Sufi3 atau 5e&erse Polish. Sintaks notasi Postfi3 : <operan><operan><operator> *isalkan ekspresi : (a + b)*(c + d) kalau kita nyatakan dalam postfi3 : ab + cd + * /ita dapat mengubah instruksi kontrol program yang ada ke dalam notasi Postfi3. *isal : IF<exp>THEN<st t!>E"#E<st t$> diubah ke dalam Postfi3 <exp><%abe%!>B&<st t!><%abe%$>B' <st t$> label6
label1 /eterangan : -7 -5 " branch if 8ero 48ero " salah) " branch
9bercabang0meloncat ika kondisi yang dites salah: 9bercabang0meloncat tanpa ada kondisi yang dites:
Arti dari notasi Postfi3 di atas adalah sebagai berikut. ;<ika kondisi ekspresi salah, maka instruksi akan meloncat ke =abel1dan men alankan statement6. -ila kondisi ekspresi benar, maka statement1 akan di alankan lalu meloncat ke =abel6. =abel1 dan =abel1 dan =abel6 sendiri menun ukan posisi tu uan loncatan, untuk =abel1 posisinya tepat sebelum statement6, dan =abel6 setelah statement6> Dalam implementasi ke kode antara, label bisa berupa nomor baris instruksi. %ntuk lebih 6
elasnya bisa dilihat contoh berikut. IF E"#E c := e -ila diubah ke salam Postfi3 !!( !$( !)( !*( !0( !1( !2( !3( !4( $5( $!( $$( $)( $*( $0( 2otasi Postfi3 di atas bisa dipahami sebagai berikut.
a > b c := d
THEN
-ila ekspresi 4a ? b) salah, maka loncat ke instruksi no.66 -ila ekspresi 4a ? b) benar, tidak ter adi loncatan, instruksi berlan ut ke 1@ sampai 1A, lalu loncat ke 6B.
label6
diubah ke notasi postfi3 men adi sebagai berikut : !5( !!( !$( !)( !*( !0( !1( !2( !3( !4( $5( $!( $$( $)( $*( $0( !) B' + en,n-,. %abe%$/ a ! := a 0 < $1 B& a a ! + := + en,n-,. %abe%!/
Analisis =e3ical Source Program 3:"y#3 +oken E token ,d1:",d6#,d1 +abel Simbol
Analisis Sintaksis Hassign? ,d1 :" ,d6 Code generator dan Analisis Semantik He3p? # ,d1