Analisis semantik, kode antara dan pembangkitan kode

Slides:



Advertisements
Presentasi serupa
TEKNIK KOMPILASI Mochammad Eko S.
Advertisements

KONSEP dan NOTASI BAHASA
Pengayaan Software/Hardware dan Pengantarmukaan
CARA PENANGAN KESALAHAN
Teknik Kompilasi Febuari 2013.
Pengantar Teknik Kompilasi
TEKNIK KOMPILASI.
Konsep dan Notasi Bahasa
Analisis Semantik.
KONSEP dan NOTASI BAHASA
KOMPILASI KOMPILATOR (COMPILER) adalah :
Konsep dan Notasi Bahasa
Bahasa Pemrograman Tingkat Tinggi
Lexical Analyzer (Scanner)
ANALISIS SEMANTIK, KODE ANTARA, DAN PEMBANGKITAN KODE
STRUKTUR COMPILLER.
Pengantar Teknik Kompilasi
Cara Penanganan Kesalahan
Pertemuan 13 Code Genarator
MATERI PERKULIAHAN TEKNIK KOMPILASI
TEKNIK KOMPILASI Team Penyusun – UNIVERSITAS GUNADARMA: Gopa Kustriono
Pengantar Teknik Kompilasi
MODEL KOMPILATOR FUNGSI UMUM BAGIAN KOMPILATOR Dosen Pengampu:
FUNGSI UMUM BAGIAN KOMPILATOR Dosen Pengampu: Istiqomah, s.kom
Penyusun : Selamat Subagio, S.Kom
PENGANTAR TEKNIK KOMPILASI
Teknik Kompilasi “Translator”
Istiqomah, S.Kom/Tekkom 2013
Cara Penanganan Kesalahan
TEKNIK KOMPILASI Team Penyusun : Gopa Kustriono Zulfiandri
Analisa Semantik, Kode Antara,
PENGANTAR TEKNIK KOMPILASI
Pesan-pesan kesalahan
Pengantar Teknik Kompilasi
SEMANTIKS Pertemuan Ke-3.
Pengantar Teknik Kompilasi
MODEL KOMPILATOR FUNGSI UMUM BAGIAN KOMPILATOR Dosen Pengampu:
Pengantar Teknik Kompilasi
Semantics Analyser Contoh : A := ( A+B) * (C+D)
kode antara dan pembangkit kode
Analisis Sintaks (Parsing)
Teknik Kompilasi Dosen: Utami Dewi W.,S.Kom
Analisa Semantik, Kode Antara,
kode antara dan pembangkit kode
Cara Penanganan Kesalahan
ASSEMBLER #1 MK. PEMROGRAMAN SISTEM
Teknik Kompilasi “Translator”
ANALISIS SEMANTIK, KODE ANTARA, DAN PEMBANGKITAN KODE
KODE ANTARA & PEMBANGKITAN KODE Ken Kinanti Purnamasari
TEORI BAHASA & OTOMATA (PENGENALAN KOMPILASI)
MATERI PERKULIAHAN TEKNIK KOMPILASI
Proses kompilasi COMPILATOR.
CARA PENANGAN KESALAHAN
ANALISIS SEMANTIK, KODE ANTARA, DAN PEMBANGKITAN KODE
TEKNIK KOMPILASI PERTEMUAN II.
Teknik Kompilasi Abdul Wahid, ST, M.Kom
TEKNIK KOMPILASI Team Penyusun : Gopa Kustriono Zulfiandri M Akbar Marwan Sulistyo Puspitodjati.
TEKNIK KOMPILASI Team Penyusun : Gopa Kustriono Zulfiandri
Pengenalan Kompilasi & Klasifikasi Tatabahasa Formal menurut Chomsky
Pengantar Teknik Kompilasi
Ilustrasi Proses Kompilasi
Pengantar Teknik Kompilasi
ANALISIS SEMANTIK, KODE ANTARA, DAN PEMBANGKITAN KODE
ANALISIS SEMANTIK, KODE ANTARA, DAN PEMBANGKITAN KODE
Semantics Analyser by Kustanto
CARA PENANGAN KESALAHAN
Cara Penanganan Kesalahan
ANALISIS SEMANTIK, KODE ANTARA, DAN PEMBANGKITAN KODE
KODE ANTARA,PEMBANGKITAN KODE,PENANGANAN
TEKNIK OPTIMASI & TABEL INFORMASI
Transcript presentasi:

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

Model kompilator Object Code

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.

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.

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.

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

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 (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 16-18 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 :=

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: <operator> <operand> <operand> Contoh : A := D * C + B / E Bila dibuat kode antara triple : *, D, C /, B, E +, (1), (2) :=, A, (3)

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)

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;

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

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

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

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

Proses perjalanan sebuah instruksi