Anda di halaman 1dari 19

ANALISIS

SEMANTIK
SEMANTIC ANALYZER
 Proses ini merupakan kelanjutan dari proses sebelumnya yaitu analisa leksikal
(scanning) dan analisa sintaksis (parsing)
 Bagian terakhir dari tahapan analisis yaitu analisis semantik
 Memanfaatkan pohon sintaks yang dihasilkan dari parsing
 Proses analisa sintak dan analisa semantik merupakan dua proses yang sangat
erat kaitannya dan sulit untuk dipisahkan
Secara umum, fungsi penganalisis semantik adalah untuk menentukan makna
dari serangkaian instruksi yang terdapat dalam program sumber.
Contoh:
A :=(A+B)*(C+D)

 Parser hanya akan mengenali symbol “:=“, “+”, “*” dan parser tidak
mengetahui makna dari symbol-symbol tersebut
 Maka penganalisis semantik harus mampu menentukan aksi apa yang akan
dilakukan oleh operator-operator tersebut
 Untuk mengenali makna dari rangkaian simbol tsb, kompilator akan
memanggil rutin semantik untuk menentukan aksi khusus yang dilakukan
rangkaian simbol tersebut.
Untuk mengetahui makna, maka routin ini akan memeriksa :

 Apakah variable yang ada telah didefinisikan sebelumnya.


 Apakah variable-variabel tersebut tipenya sama.
 Apakah operand yang akan di operasikan tersebut ada nilainya, dst.
 Menggunakan table symbol.
 Pemeriksaan bisa dilakukan pada table identifier, table display, dan table
block.
Pengecekan yang dilakukan oleh analisis semantik adalah :

a. Memeriksa keberlakuan nama – nama meliputi pemeriksaan :


 Duplikasi
Pengecekan apakah sebuah nama terjadi pendefinisian lebih dari dua kali. Pengecekan
dilakukan pada bagian pengelola blok.
 Terdefinisi
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 statemen –statemen yang ada.
Misal; bila ada operasi antara dua operan maka tipe operan pertama harus bisa dioperasikan
dengan operan kedua.
Contohnya;
 Ekspresi yang mengikuti instruksi IF berarti tipenya Boolean, akan diperiksa tipe identifier
dan tipe ekspresinya
 Bila ada operasi antara dua operan maka kedua operan harus bertipe sama

Analisa semantic sering juga digunakan dengan intermeadiate code yang akan menghasilkan
output intermediate code.

Intermediate Code nantinya akan digunakan pada proses kompilasi berikutnya (pada bagian
backend compilation)
INTERMEDIATE CODE (KODE
ANTARA)
Merupakan hasil dari tahapan analisis, yang dibuat oleh kompilator pada saat menterjemahkan
program dari bahasa tingkat tinggi.
Kegunaan kode antara :
 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 dibanding dalam bahasa assembly atau mesin
 Bisa melihat program internal yang mudah dimengerti

2 macam Kode Antara yang biasa digunakan adalah Notasi Postfix dan N-Tuple
NOTASI POSTFIX
Pada notasi postfix operator diletakkan paling akhir sehinga disebut juga notasi sufix
atau reverse Polish.
Sintax notasi postfix :
<operan><operan><operator>

Contoh:
ekspresi : (a+b) * (c+d)

maka bentuk notasi postfix nya adalah :


ab+cd+*
B. U : POSTFIX
(OPERAND 1) (OPERAND 2) (OPERATOR)

Contoh :
1. A + B 2. A + B * C
postfix : postfix :
AB+ A + BC*
ABC*+
B. U POSTFIX
(OPERAND 1) (OPERAND 2) (OPERATOR)

Contoh :
(A + B)/D
postfix :
AB+ / D
AB+D/
B. U POSTFIX
(OPERAND 1) (OPERAND 2) (OPERATOR)

Contoh :
(A + B) / (D – E)
POSTFIX :
AB+ / (D – E)
AB+ / DE-
AB+DE-/
CONTOH :
D * C +B/E

POSTFIX :
DC* + B/E
DC* + BE/
DC*BE/+
CONTOH :
(A * (B – C) ^ D) / E + F

POSTFIX :
(A * BC- ^D) / E + F
(A *BC-D^) / E + F
ABC-D^*/ E + F
ABC-D^*E/ + F
ABC-D^*E/F+
Notasi N-Tuple
Pada notasi N-Tuple setiap baris bisa terdiri dari beberapa tupel.
Format umum dari notasi N-Tuple adalah :
operator ………….N-1 operan
Notasi N-Tuple yang biasa digunakan adalah notasi 3 tupel dan 4 tupel.

Triples Notation
Memiliki format:
<operator><operand><operand>

Triples notation :
Contoh, instruksi :
1. *, D, C
A := D * C + B / E
2. /, B, E
3. +,(1),(2)
4. :=, A, (3)
Quadruples Notation

Format instruksi Quadruples:


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

• hasil adalah temporary yang bisa ditempatkan pada memory atau regist

contoh instruksi:
A := D * C + B / E

Bila dibuat dalam Kode Antara Quadruples Notation:


1. *,D,C,T1
2. /,B,E,T2
3. +,T1,T2,A
Contoh:

Ubahlah notasi infix dibawah ini ke dalam bentuk postfix, triples notation dan quadruples
notation.

1. A – ( B + C ) * D ^ E
2. X := A * ( B + C ) / ( D – E )
3. X := (A – B) + C ^ D / ( E + F )
4. ( ( A + B ) / C ) – ( D + E ) ^ F
5. A - ( ( B + C ) / ( D ^ E ) ) + F
6. (a * (b – c) ^ d) / e + f
7. x := (a + b ) ^ c * d – ( e + f )

Anda mungkin juga menyukai