Pengantar Teknik Kompilasi

Slides:



Advertisements
Presentasi serupa
Pengayaan Software/Hardware dan Pengantarmukaan
Advertisements

Pembentukan Kode Intermediate
Teknik Kompilasi Febuari 2013.
STRUKTUR DATA PERTEMUAN 5
Pengantar Teknik Kompilasi
TEKNIK KOMPILASI.
Pertemuan Struktur Data *Pohon Ekspresi *
STRUKTUR DATA (4) Array Stack(Tumpukkan) dan Queue (Antrian)
Analisis Semantik.
KONSEP dan NOTASI BAHASA
KOMPILASI KOMPILATOR (COMPILER) adalah :
Konsep dan Notasi Bahasa
Kuliah 12 Type Checking.
Lexical Analyzer (Scanner)
ANALISIS SEMANTIK, KODE ANTARA, DAN PEMBANGKITAN KODE
1 DATA STRUCTURE “ STACK” SHINTA P STMIK MDP APRIL 2011.
STRUKTUR DATA (4) array stack dan queue
ANALISIS LEKSIKAL.
STRUKTUR COMPILLER.
Pengantar Teknik Kompilasi
Pertemuan 13 Code Genarator
Pengenalan Assembler.
MODEL KOMPILATOR FUNGSI UMUM BAGIAN KOMPILATOR Dosen Pengampu:
FUNGSI UMUM BAGIAN KOMPILATOR Dosen Pengampu: Istiqomah, s.kom
Tipe Data By Serdiwansyah N. A..
PENGANTAR TEKNIK KOMPILASI
Teknik Kompilasi “Translator”
STACK Denny Agustiawan,M.pd
Analisa Semantik, Kode Antara,
Analisis semantik, kode antara dan pembangkitan kode
Pesan-pesan kesalahan
Pengantar Teknik Kompilasi
SEMANTIKS Pertemuan Ke-3.
MATERI PERKULIAHAN TEKNIK KOMPILASI
Pengenalan Assembler.
MODEL KOMPILATOR FUNGSI UMUM BAGIAN KOMPILATOR Dosen Pengampu:
Pseudocode – Tipe Data, Variabel, dan Operator
Pengantar Teknik Kompilasi
Semantics Analyser Contoh : A := ( A+B) * (C+D)
kode antara dan pembangkit kode
Analisis Sintaks (Parsing)
ANALISIS LEKSIKAL.
Teknik Kompilasi Dosen: Utami Dewi W.,S.Kom
Analisa Semantik, Kode Antara,
kode antara dan pembangkit kode
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
MATERI PERKULIAHAN TEKNIK KOMPILASI
Proses kompilasi COMPILATOR.
ANALISIS SEMANTIK, KODE ANTARA, DAN PEMBANGKITAN KODE
TEKNIK KOMPILASI PERTEMUAN II.
Teknik Kompilasi Abdul Wahid, ST, M.Kom
Struktur dan Arsitektur Pemrograman
Pengenalan Kompilasi & Klasifikasi Tatabahasa Formal menurut Chomsky
Contoh Implementasi Stack 1
Pengantar Teknik Kompilasi
Ilustrasi Proses Kompilasi
Pengantar Teknik Kompilasi
ANALISIS SEMANTIK, KODE ANTARA, DAN PEMBANGKITAN KODE
Teknik Optimasi by kustanto
ANALISIS SEMANTIK, KODE ANTARA, DAN PEMBANGKITAN KODE
Semantics Analyser by Kustanto
Algoritma dan struktur data
ANALISIS LEKSIKAL.
ANALISIS SEMANTIK, KODE ANTARA, DAN PEMBANGKITAN KODE
ANALISIS LEKSIKAL.
KODE ANTARA,PEMBANGKITAN KODE,PENANGANAN
Transcript presentasi:

Pengantar Teknik Kompilasi Analisa Semantik, Kode Antara, dan Pembangkitan Kode

Analisa Semantik Semantic analyzer menggunakan pohon sintaks dan informasi pada tabel simbol untuk memeriksa konsistensi semantik program sumber terhadap definisi bahasa Komponen ini juga mencatat jenis informasi pada pohon sintaks atau tabel simbol untuk kemudian digunakan dalam pembangkitan kode antara

Analisa Semantik Fungsi dari analisa semantik adalah untuk menentukan makna dari serangkaian instruksi yang terdapat pada program sumber Untuk mengetahui makna, maka rutin analisa semantik akan memeriksa: Apakah variabel yang ada telah didefinisikan sebelumnya? Apakah variabel-variabel tersebut tipenya sama? Apakah operand yang akan dioperasikan tersebut ada nilainya? Panjang maksimum token identifier adalah 8 karakter Panjang maksimum ekspresi tunggal adalah 80 karakter Nilai bilangan bulat adalah -32768 s/d 32767 dst.

Analisa Semantik Salah satu peran penting dari analisa semantik adalah type checking, dimana kompiler memeriksa apakah setiap operator memiliki operand yang sesuai Misal, umumnya bahasa pemrograman menggunakan bilangan integer sebagai index bagi suatu array Kompiler harus melaporkan sebagai error apabila ada penggunaan bilangan float sebagai index pada array

Analisa Semantik Bahasa tertentu mungkin mengizinkan semacam konversi yang disebut coercion 2 + 3 = 5 4,3 + 5,2 = 9,5 7 + 6,3 = 13,3

Analisa Semantik Pemeriksaan yang dilakukan bertujuan untuk memastikan bahwa jenis programming error tertentu dapat dideteksi dan dilaporkan, mencakup: Type check, error saat operator digunakan pada operand yang tidak sesuai Flow-of-control check, pernyataan yang mengakibatkan aliran kontrol keluar dari construct harus memiliki tempat untuk memindahkan aliran kontrol tersebut Uniqueness check, pada situasi tertentu sebuah objek harus didefinisikan tepat satu kali

Kode Antara Setelah analisa sintaks dan semantik, beberapa kompiler menghasilkan intermediate representation dari program sumber Representasi ini perlu memiliki dua sifat penting: Mudah dihasilkan Mudah diterjemahkan ke program tujuan

Kode Antara Kegunaan dari kode antara: Memperkecil usaha dalam membangun kompiler dari sejumlah bahasa ke sejumlah mesin Proses optimasi lebih mudah (dibandingkan pada program sumber atau kode assembly dan kode mesin) Dapat melihat program internal yang mudah dimengerti

Kode Antara Kode antara dapat memiliki banyak bentuk, salah satunya three-address code, yaitu deretan instruksi yang tiap instruksinya terdiri atas paling banyak tiga buah operand Sifat umum three-address code: Tiap instruksi memiliki paling banyak satu buah operator (selain assignment) sehingga saat menghasilkan kode ini kompiler harus menentukan urutan pelaksanaan Kompiler perlu membuat penyimpanan sementara untuk menyimpan nilai yang dihasilkan tiap instruksi Beberapa instruksi dapat memiliki kurang dari tiga operand

Kode Antara Kode sumber Analisis Leksikal Analisis Sintaks position := initial + rate * 60 Analisis Leksikal id1 := id2 + id3 * 60 Analisis Sintaks := 60 id3 id2 id1 + *

Kode Antara Analisis semantik := id1 + id2 * id3 inttoreal 60

Kode Antara Kode antara temp1 := inttoreal (60) temp2 := id3 * temp1 temp3 := id2 + temp2 id1 := temp3 Kode antara dapat ditulis dalam beberapa bentuk, diantaranya postfix notation dan N- tuple

Kode Antara – Postfix Notation Pada notasi postfix, operator ditulis mengikuti operand 3 + 4  3 4 + 3 - 4 + 5  3 4 - 5 + 3 - 4 x 5  (3 - 4) x 5  3 4 - 5 x  3 - (4 x 5)  3 4 5 x -

Kode Antara – Postfix Notation Dibandingkan notasi aljabar, notasi postfix dinyatakan dapat melakukan perhitungan dengan lebih cepat Ekspresi tidak membutuhkan parenthesis, operasi yang perlu dimasukkan lebih sedikit Perhitungan dengan notasi ini menghasilkan lebih sedikit kesalahan Jumlah angka yang perlu dimasukkan lebih sedikit Notasi postfix dikatakan lebih sulit dipelajari dibandingkan notasi aljabar

Kode Antara – Postfix Notation While there are input tokens left Read the next token from input If the token is a value Push it onto the stack Otherwise, the token is an operator (operator here includes both operators and functions) It is already known that the operator takes n arguments If there are fewer than n values on the stack (Error) The user has not input sufficient values in the expression Else, Pop the top n values from the stack Evaluate the operator, with the values as arguments Push the returned results, if any, back onto the stack If there is only one value in the stack That value is the result of the calculation Otherwise, there are more values in the stack (Error) The user input has too many values

Kode Antara – Postfix Notation Input Action Stack Notes 5 Operand Push onto stack 1 1 5 2 2 1 5 + Operator 3 5 Pop 2 operands, calculate, push onto stack 4 4 3 5 x 12 5 17 3 3 17 - 14 Result

Kode Antara – Quadruple Quadruple adalah stuktur record dengan 4 buah field: op, arg1, arg2, result Three-address code x := y + z Quadruple +, y, z, x Isi dari arg1, arg2, dan result umumnya pointer ke tabel simbol untuk nama yang direpresentasikan

Kode Antara – Triple Untuk menhindari memasukkan temporary name ke tabel simbol, kita dapat memanfaatkan posisi dari statement yang melakukan perhitungan Dengan notasi triple, three-address code dapat direpresentasikan hanya dengan 3 field: op, arg1, arg2

Kode Antara – Triple Instruksi Triple A := D * C + B / E (0) *, D, C (2) +, (0), (1) (3) :=, A, (2)

Kode Antara – Perbandingan Instruksi a := b * -c + b * -c Quadruple Triple op arg1 arg2 result (0) uminus c t1 (1) * b t2 (2) t3 (3) t4 (4) + t5 (5) := a op arg1 arg2 (0) uminus c (1) * b (2) (3) (4) + (5) := a

Kode Antara – Indirect Triple Kelemahan dari notasi triple adalah sulitnya melakukan optimasi Memindahkan statement yang berisi nilai sementara perlu mengubah semua rujukan statement tersebut pada array arg1 dan arg2 Indirect triple memiliki dua list, yaitu list instruksi dan list eksekusi

Kode Antara – Indirect Triple Instruksi A := D * C + B / E F := D * C Indirect triple op arg1 arg2 (11) * D C (12) / B E (13) + (14) := A (15) F statement (0) (11) (1) (12) (2) (13) (3) (14) (4) (5) (15)

Pembangkitan Kode Tahap pembangkitan kode akan mengambil intermediate representation dari kode sumber sebagai masukan dan memproduksi kode dengan program tujuan yang ekivalen

Pembangkitan Kode Instruksi Quadruple (A+B) * (C+D) +, A, B, T1 +, C, D, T2 *, T1, T2, T3

Pembangkitan Kode Assembly LDA A //isi A ke akumulator ADD B //tambahkan isi akumulator dengan B STO T1 //simpan isi akumulator ke T1 LDA C ADD D STO T2 LDA T1 MUL T2 STO T3