Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Analisis semantik, kode antara dan pembangkitan kode

Presentasi serupa


Presentasi berjudul: "Analisis semantik, kode antara dan pembangkitan kode"— Transcript presentasi:

1 Analisis semantik, kode antara dan pembangkitan kode
ISTIQOMAH, S.KOM

2 Model kompilator Object Code

3 ANALISIS 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. Memanfaatkan pohon sintaks yang dihasilkan dari parsing Proses analisa sintaks dan analisa semantic merupakan dua proses yang sangat erat kaitannya dan sulit dipisahkan.

4 Analisa semantik (lanjutan)
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.

5 Analisa semantik (lanjutan)
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.

6 Analisa semantik (lanjutan)
Pengecekan yang dilakukan oleh analisis semantik adalah : 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 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

7 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

8 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>

9 Notasi postfix (lanjutan)
Contoh : IF a > b THEN c := d ELSE c := e bila expresi (a>b) salah, maka loncat ke instruksi 22, Bila expresi (a>b) benar tidak ada loncatan, instruksi berlanjut ke lalu loncat ke 25 Dalam bentuk Postfix 11 a 19 12 b 20 25 13 > 21 BR 14 22 22 c 15 BZ 23 e 16 c 24 := 17 d 25 18 :=

10 Notasi N-tuple Format umum N-Tuple adalah : operator …… N – 1 operand
Notasi N-Tuple terdiri dari Triple Notation dan Quadtruple Notation

11 Triple notation Format Triple Notation:
<operator> <operand> <operand> Contoh : A := D * C + B / E Bila dibuat kode antara triple : *, D, C /, B, E +, (1), (2) :=, A, (3)

12 Triple notation (LANJUTAN)
Contoh lain : IF x > y THEN x := a – b ELSE x := a + b Bila dibuat kode antara triple : >, x, y BZ, (1), (6) -, a, b :=, x, (3) BR, , (8) +, a. b :=, x (6)

13 Triple notation (LANJUTAN)
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;

14 Triple notation (LANJUTAN)
Contoh : A := B + C * D / E ; F := C * D List Instruksi 1. *, C, D 2. /, (1), E 3. +, B, (2) 4. :=, A , (3) 5. :=, F, (1) List Eksekusi 1. 1 2. 2 3. 3 4. 4 5. 1 6. 5

15 Quadruples notation Format Quadruples Notation Contoh :
<operator> <operan> <operan> <hasil> Contoh : A : = D * C + B / E Bila dibuat dalam kode antara : *, D, C, T1 /, B, E, T2 +, T1, T2, A

16 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

17 PEMBANGKITAN KODE (lanjutan)
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

18 PEMBANGKITAN KODE (lanjutan)
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

19 Proses perjalanan sebuah instruksi


Download ppt "Analisis semantik, kode antara dan pembangkitan kode"

Presentasi serupa


Iklan oleh Google