You are on page 1of 21

Analisis Semantik, Kode Antara

dan Pembangkitan Kode


Kelompok 7
1. Dimas Bayu Satria Permadi (4611415023)
2. Uwis Alqorona (4611415014)
3. Wisnu Alfarisi (4611415011)
4. Triyana Fadila (4611415007)
Model kompilator
Source Source
Object
Code Code
Code

ANALISIS SINTESIS

Analisa Analisa
Analisa Intermediate Kode Kode
Leksikal Sintaks
Semantik Code Generator Optimasi
(Scanner) (Parser)

TABEL SIMBOL
Analisa Semantik
Analisis semantic masih termasuk dalam bagian front end (bagian yang
menangani analisis source program)

Proses ini merupakan kelanjutan dari proses kompilasi sebelumnya, yaitu


proses scanning (analisis leksikal) dan proses parsing (analisis sintaksis)

Bagian terakhir dari tahapan analisis adalah analisis semantic.

Analisis semantik ini memanfaatkan pohon sintaks yang dihasilkan pada


proses parsing (analisa sintaks).
Analisa Semantik
Proses analisa sintaks dan analisa semantic merupakan dua proses yang sangat erat
kaitannya dan sulit dipisahkan.

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

Parser hanya akan mengenali simbol-simbol :=, + dan *, parser tidak mengetahui
makna dari symbol-symbol tersebut.

Oleh karena itu, untuk mengenali simbol-simbol tersebut, maka menggunakan analisis
semantik.
Analisa Semantik

Untuk mengetahui maknanya, maka analisa semantik akan memeriksa :


Apakah variabel yang ada telah didefinisikan sebelumnya
Apakah variabel-variabel tersebut tipenya sama
Apakah operan yang akan dioperasikan tersebut ada nilainya dan
seterusnya.
Analisa Semantik
Pengecekan yang dilakukan oleh analisis semantik adalah :

1. Memeriksa keberlakuan nama-nama meliputi pemeriksaan


Duplikasi
Apakah sebuah nama terjadi pendefinisan lebih dari dua kali. Pengecekan
dilakukan pada bagian pengelolaan block.

Terdefinisi
Apakah nama yang dipakai pada program sudah terdefinisi atau belum.
Pengecekan dilakukan pada semua tempat kecuali block
Analisa Semantik
Pengecekan yang dilakukan oleh analisis semantik adalah :

2. Memeriksa tipe
Melakukan pemeriksaan terhadap kesesuaian tipe dalam statement statement
yang ada, Misalnya bila terdapat suatu operasi, diperiksa tipe operand nya.
Contohnya bila expresi yang mengikut IF berarti tipenya boolean, akan diperiksa
tipe identifier dan tipe ekspresinya. Bila ada operasi antara dua operand maka tipe
operand pertama harus bisa dioperasikan dengan operand yang kedua
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 :


Memperkecil usaha dalam membuat compilator 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 lebih mudah. Beberapa strategi optimasi lebih mudah dilakukan pada kode antara dari
pada program sumber (source program) atau pada kode assembly dan kode mesin
Bisa melihat program internal yang gampang dimengerti. Kode antara ini akan lebih mudah dipahami
daripada kode assembly atau kode mesin.
Kerugian dari kode antara adalah melakukan 2 kali transisi, sehingga membutuhkan waktu yang relatif
lama
Jenis-jenis kode antara, yaitu Notasi Postfix dan N-Tuple
Notasi Postfix
Notasi Postfix :
<Operand> <Operand> <Operator>
Misalnya :
(a+b) * (c+d)
Maka notasi postfixnya : ab+cd+*

Semua instruksi kontrol program yang ada diubah menjadi notasi postfix, misalnya :
IF <exp> THEN <stmt1> ELSE <stmt2>
Diubah ke dalam postfix menjadi :
<exp> <label1> BZ <stmt1> <label2> BR <stmt2>
Notasi Postfix
Dalam bentuk Postfix
Contoh :
11 a 19
IF a > b THEN c := d ELSE c := e
12 b 20 25
13 > 21 BR

Bila expresi (a>b) salah, maka loncat 14 22 22 c


ke instruksi 22, 15 BZ 23 e
Bila expresi (a>b)benar, tidak ada 16 c 24 :=
loncatan, instruksi berlanjut ke 16-18 lalu
17 d 25
loncat ke 25
18 :=
Notasi N-tuple

Format umum N-Tuple adalah :

operator N 1 operand

Notasi N-Tuple terdiri dari Triple Notation dan Quadtruple Notation


Triple Notation
Format Triple Notation: Bila dibuat kode antara triple :

<operator> <operand> 1. *, D, C
<operand> 2. /, B, E
Contoh : 3. +, (1), (2)
A := D * C + B / E 4. :=, A, (3)
Triple Notation
Bila dibuat kode antara triple :
Contoh lain : 1. >, x, y

IF x > y THEN 2. BZ, (1), (6)

3. -, a, b
x := a b
4. :=, x, (3)
ELSE
5. BR, , (8)
x := a + b 6. +, a. b

7. :=, x (6)
Triple Notation

Kelemahan dari notasi triple adalah sulit pada saat melakukan


optimasi, maka dikembangkan Indirect triples yang memiliki dua
list(senarai) ; list instruksi dan list eksekusi.

List Instruksi berisikan notasi triple, sedangkan list eksekusi


mengatur eksekusinya;
Triple Notation
Contoh :
A := B + C * D / E ; F := C * D List Eksekusi
1. 1
List Instruksi 2. 2
1. *, C, D 3. 3
2. /, (1), E 4. 4
3. +, B, (2) 5. 1
4. :=, A , (3)
6. 5
5. :=, F, (1)
Quadruples notation
Format Quadruples Notation Bila dibuat dalam kode antara :

1. *, D, C, T1
<operator> <operan> <operan>
2. /, B, E, T2
<hasil>
3. +, T1, T2, A
Contoh :

A:=D*C+B/E
PEMBANGKITAN KODE
Hasil dari tahapan analisis akan diterima oleh bagian pembangkitan kode (code
generator).
Disini kode antara dari program biasanya ditranslasikan ke bahasa assembly
atau bahasa mesin.
Misalnya: (A+B)*(C+D) dan diterjemahkan kedalam bentuk quadruple:
1. +, A, B, T1
2. + , C, D, T2
3. *, T1, T2, T3
PEMBANGKITAN KODE
Dapat ditranslasikan ke dalam bahasa assembly dengan akumulator tunggal :
LDA A {muat isis A ke akumulator}
ADD B {tambahkan isi ke akumulator dengan B}
STO T1 {simpan isi ke akumulator T1}
LDA C
ADD D
STO T2
LDA T1
MUL T2
STO T3
PEMBANGKITAN KODE
Output dari code generator akan diterima oleh code optimimzer, misalnya untuk kode
assembly diatas dapat dioptimasi menjadi :
LDA A
ADD B
STO T1
LDA C
ADD D
MUL T1
STO T2
Proses perjalanan sebuah instruksi
Terima Kasih

You might also like