Upload presentasi
Presentasi sedang didownload. Silahkan tunggu
1
Pengantar Teknik Kompilasi
Analisa Semantik, Kode Antara, dan Pembangkitan Kode
2
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
3
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 s/d 32767 dst.
4
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
5
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
6
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
7
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
8
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
9
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
10
Kode Antara Kode sumber Analisis Leksikal Analisis Sintaks
position := initial + rate * 60 Analisis Leksikal id1 := id2 + id3 * 60 Analisis Sintaks := 60 id3 id2 id1 + *
11
Kode Antara Analisis semantik := id1 + id2 * id3 inttoreal 60
12
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
13
Kode Antara – Postfix Notation
Pada notasi postfix, operator ditulis mengikuti operand 3 4 + 3 - 4 x 5 (3 - 4) x 5 x 3 - (4 x 5) x -
14
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
15
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
16
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
17
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
18
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
19
Kode Antara – Triple Instruksi Triple A := D * C + B / E (0) *, D, C
(2) +, (0), (1) (3) :=, A, (2)
20
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
21
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
22
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)
23
Pembangkitan Kode Tahap pembangkitan kode akan mengambil intermediate representation dari kode sumber sebagai masukan dan memproduksi kode dengan program tujuan yang ekivalen
24
Pembangkitan Kode Instruksi Quadruple (A+B) * (C+D) +, A, B, T1
+, C, D, T2 *, T1, T2, T3
25
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
Presentasi serupa
© 2024 SlidePlayer.info Inc.
All rights reserved.