Mengapa harus belajar Teknik Kompilasi ?
TEKNIK KOMPILASI
- A. Tujuan Mempelajari Teknik Kompilasi
– Mengetahui penerapan konsep ilmu komputer pada prilaku komputer yaitu algoritma, arsitektur komputer, struktur data maupun penerapan teori bahasa dan automata
– Compiler adalah merupakan konstruksi inti dari ilmu komputer.
- B. Arti Kata Tenik Kompilasi
- Teknik adalah metode atau cara
- Kompilasi adalah proses menggabungkan serta menterjemahkan sesuatu (source program) menjadi bentuk lain.
- Compile is to translate a program written in a high-level programming language into machine language.
- C. Translator : Compiler dan Interpreter
Translator adalah program dimana mengambil input sebuah program yang ditulis pada bahasa program (source language) ke bahasa lain ( the object on target language).
Jika source language adalah high level language, seperti cobol, pascal, fotran dan object language adalah low-level language atau mesin language. Maka translator seperti ini disebut COMPILER.
Translator : Compiler dan Interpreter
Ada beberapa Translator :
- Assambler
Source code adalah bahasa assembly, object code adalah bahasa mesin.
- Compiler
Source code adalah bahasa tingkat tinggi, object code adalah bahasa mesin atau bahasa assembly, source code dan data diproses berbeda.
- Interpreter
Interpreter tidak menghasilkan bentuk object code, tetapi hasil translasinya hanya dalam bentuk internal, dimana program induk harus ada berbeda dengan compiler.
- Kenapa Pelru Translator ?
– Dengan bahasa mesin adalah bahasa bentuk bahasa terendah komputer, berhubungan langsung dengan bagian-bagian komputer seperti bits, register dan sangat primitive.
– Jawaban diatas pertanyaan ini akan membingingkan nagi programer yang membuat program dengan bahasa mesin.
– Bahasa mesin adalah tidak lebih dari urutan 0 dan 1.
– Intruksi dalam bahasa mesin bisa saja dibentuk menjadi micro-code, semacam prosedur dalam bahasa mesin.
– Bagaimana dengan orang tidak mengerti bahasa mesin.
- Bahasa Tingkat Tinggi (Pemrograman)
– Bahasa yang lebih dikenal oleh manusia maksudnya adalah statement yang digunakan menggunakan bahasa yang dipakai oelh manusia.
– Memberikan fasilitas yang lebih banyak, seperti struktur kontrol program yang tersetruktur, blak-blak serta prosedur dan fungsi-fungsi.
– Program mudah untuk dikoreksi (debug).
– Tidak tergantung pada salah satu mesin.
– Kontrol struktur
- D. Pembuatan Compiler
- Bahasa Mesin
– Sangat sukar dan sangat sedikit kemungkinannya untuk membuat compiler dengan bahasa ini, karena manusia susah mempelajari bahasa mesin.
– Sangat tergantung pada mesin.
– Bahasa mesin kemungkinan digunakan pada saat pembuatan Assembler.
- Assembly
– Hasil dari program mempunyai ukuran yang relatif kecil.
– Sulit dimengerti karena statement/perintahnya singkat-singkat, butuh usaha yang besar untuk membuat.
– Fasilitas yang dimiliki terbatas.
- Bahasa Tingkat Tinggi (high level language)
– Lebih mudah dipelajari.
– Fasilitas yang dimiliki lebih baik (banyak).
– Memiliki ukuran yang relatif besar, misal membuat compiler pascal dengan menggunakan bahasa C.
– Untuk mesin yang berada perlu dikembangkan tahapan-tahapan tambahan.
– Misal membuat compiler C pada Dos berdasarkan compiler C pada Unix.
- BootStap
– Untuk membangun sesuatu yang besar, dibangun/dibuat dulu bagian intinya (niklaus wirth – saat membuat pascal compiler).
P0 dibuat dengan assembly, P1 dibuat dari P0 dan P2 dibuat dari P1, jadi compiler untuk bahasa P dapat dibuat tidak harus dengan menggunakan assembly secara keseluruhan.
- E. Kualitas dari Compiler
– Waktu yang dibutuhkan untuk kompilasi tergantung dari algoritma compiler dan pembuat (compilator) Compiler itu sendiri.
– Kualitas dari object program yang dihasilkan dari ukuran yang dihasilkan.
– Fasilitas-fasilitas integrasi yang lainnya yaitu IDE (Integrated Development Environment)
- F. Struktur Compiler
Keterangan
– Lexical Analyzer = scanner, syntax dan intermediate code merupakan fungsi analisis dalam compiler, yang bertugas mendekomposisi program sumber menjadi bagian-bagian kecil.
– Code generation dan code optimization adalah merupakan fungsi synthesis yang berfungsi melakukan pembangkitan/pembuatan dan optimasi program (object program).
– Scanner adalah mengelompokan program asal/sumber menjadi token.
– Parser (mengurai) bertugas memeriksa kebenaran dan urutan dari token-token yang terbentuk oleh scanner.
Lexical Analysis (scanner) Berhubungan dengan bahasa
– Mengidentifikasi semua besaran yang membuat suatu bahasa.
– Mentrasformasikan ke token-token.
– Menentukan jenis dari token-token.
– Menangani kesalahan.
– Menangani tabel simbol.
– Scanner, didesign untuk mengenali – keyboard, operator, indentifiter.
– Token : separates characters of the source language into group that logically belong together.
– Misalnya : konstanta, nama variable ataupun operator dan delimiter.
Lexical Analysis (Besaran Leksikal)
– Identifiar dapat berupa keyboard atau nama kunci, seperti IF, ELSE, BEGIN, END, INTEGER, INT, FLOAT.
– Konstanta : besaran yang berupa bilangan bulat, bilangan pecahan, boolean, karakter, string dan sebagainya.
– Delimiter berguna sebagai pemisah/pembatas, seperti kurung-buka, kurung-tutup, titik, koma, titik-dua, titik-koma, white space.
- G. Error Handling
- Kesalahan Program
- Kesalahan Leksikal
– Kesalahan dalam mengetik/mengeja
– Misal THEN dituliskan dengan TEN atau THN
- Kesalahan Sintaks
– Misalnya dalam operasi aritmatika dengan tanda kurung yang jumlahnya kurang, contoh A:= X + (B+D).
- Kesalahan Semantics
– Tipe data yang salah
– Variable belum didefinisikan
- Penanganan Kesalahan
Langkah-langkah penangan kesalahan :
– Mendeteksi kesalahan
– Melaporkan kesalahan
– Tindak lanjut perbaikan
Misal : compiler menemukan kesalahan yang bisa meliputi :
– Kode kesalahan
– Pesan kesalahan dalam bahasa alami
– Nama dan atribut identifier
– Contoh : error 162 jumlah : unknow identifier
- Reaksi Terhadap Kesalahan
Ada beberapa reaksi yang dilakukan oleh compiler :
- Reaksi-reaksi yang tidak dapat diterima
– Compiler crash : berhenti atau hang
– Looding : compiler tidak bisa berhenti
– Menghasilkan obyek program yang salah : berbahaya bisa diketahui/muncul setelah program dieksekusi.
- Reaksi-reaksi yang dapat diterima
– Reaksi yang sudah dapat dilakukan : compiler melaporkan error seperti, recovery (pemulihan), repair (perbaikan).
– Reaksi yang belum dapat dilakukan : compiler mengoreksi kesalahan, menghasilkan obyek program sesuai yang diinginkan program, compiler memiliki kemampuan untuk mengetahui maksud dari pemrograman, belum diimplementasikan pada program.
- Reaksi yang benar, tapi kurang dapat diterima dan kurang bermanfaat
– Compiler menemukan kesalahan pertama melaporkannya lalu berhenti.
– Pemrogram membuang waktu untuk melakukan pengulangan compiler untuk setiap kali terdapt sebuah error.
- Error Recovery
Bertujuan mengembalikan parser ke kondisi stabil agar supaya dapat melanjutkan proses persaign ke posisi selanjutnya.
- Mekanisme Ad Hoc
– Recovery yang dilakukan tergantung dari isi pembuat compiler
– Tidak terliat pada suatu aturan tertentu
– Disebut juga dengan istilah perpose error recovery
- Syntax Directed Recovery
- Second error recovery
- Contaxt sensitive recovery
- Error Repair
Memperbaiki kesalahan dan membuat source program valid (memodifikasi)
– Mekanisme Ad Hoc : tergantung pada sipembuat compiler
– Syntax directed repair.
Komentar
Posting Komentar