Pengertian Kompilator Dan Interpreter
1. PENDAHULUAN Tujuan Instruksional Umum
Agar mahasiswa dapat memahami konsep dasar teknik kompilasi, meliputi fungsi, komponen, tahapan proses dan mekanisme kerja serta cara perancangan suatu compiler sederhana.
Daftar Pustaka
1. Pat Terry, “Compilers and Compiler Generator, an introduction with C++”, Rhodes University, Grahamstown, 1996.
2. Dick Grune and Ceriel Jacobs, “Parsing Techniques, a Practical Guide”, Ellis Horwood Limited, Chichester, England, 1998.
3. Aho, Sethi & Ullman, "Compilers Principles, Technique and Tools", Addison Wesley, 1993.
4. John C. Martin, “Introduction to Languages and The Theory of Computation”, McGraw-Hill Book Co, 1997.
5. Trembley S., "Compiler Writing", McGraw Hill, New York, 1994.
6. John C. Martin, “Introduction to Languages and The Theory of Computation”, McGraw-Hill Book Co, 1997.
7. Slamet, Sumantri dkk., "Teknik Kompilasi", PT. Elex Media Komputindo, Jakarta, 1993.
8. Firrar Utdirartatmo, “Teknik Kompilasi”, Graha Ilmu, 2005.
9. Sukamdi, "Merekayasa Interpreter", PT. Elex Media Komputindo, Jakarta, 1995.
10. D. Suryadi, HS., “Pengantar Automata Bahasa Formal dan Kompilasi”, Penerbit Gunadarma, Jakarta, 1995.
11. Dean Kelly, “Otomata dan Bahasa-bahasa Formal”, Prenhallindo, 1999.
12. Firrar Utdirartatmo, “Teori Bahasa dan Otomata”, J & J Learning, 2001.
13. Bambang Hariyanto, “Teori Bahasa, Otomata, dan Komputasi serta Terapannya”, Penerbit Informatika, 2004.
14. Eko Sediyono, “Teknik Kompilasi Teori dan Praktik”, Penerbit Andi, 2005.
KONSEP DASAR BELAJAR
Proses Belajar
Proses Proses / Kegiatan Berpikir Mencari Jawab
Pengetahuan Ilmu
? Beberapa pertanyaan:
1. Teknik Kompilasi itu apa?
2. Apa manfaat belajar Teknik Kompilasi? 3. ?????????
Pengertian Kompilator Dan Interpreter
Beberapa feature (ciri-ciri) compiler dan Interpreter: ¾ Kompilator (compiler) dan interpreter merupakan satu keluarga perangkat lunak yang termasuk dalam kategori translator atau program penerjemah. ¾ Interpreter didefinisikan sebagai sebuah program yang digunakan untuk menerjemahkan, mengeksekusi, dan memberikan hasil dari pengerjaan/eksekusi instruksi-instruksi masukannya. ¾ Kompilator (compiler) didefinisikan sebagai sebuah program yang membaca suatu program yang ditulis dalam suatu bahasa sumber
(source language) dan menerjemahkannya ke dalam suatu bahasa sasaran (target language).
Dalam hal ini, sebuah kompilator akan menghasilkan program atau kode sasaran yang biasanya berupa file eksekusi (file.EXE). ¾ Interpreter maupun Compiler, keduanya menerima masukan berupa program komputer dalam suatu bahasa pemrograman tingkat tinggi. ¾ Kompilator selalu mengandung dua komponen bahasa yaitu:
bahasa yang dibaca oleh kompilator, disebut bahasa sumber (source ⇒ source program). Bahasa Sumber dapat berupa bahasa
language
FORTRAN, PASCAL, C dan juga bahasa-bahasa lainnya yang sifat dan pemakaiannya agak spesifik atau khusus, seperti bahasa untuk program DBASE, SPSS dll. bahasa hasil terjemahan oleh kompilator yang disebut sebagai bahasa sasaran (target language ⇒ target program). Bahasa
Sasaran dapat berupa bahasa sumber lain seperti C, FORTRAN dan lain sebagainya atau Bahasa Mesin (Machine Language). ¾ Ada dua perbedaan yang mendasar antara interpreter dan kompilator, perbedaan diantara keduanya terletak pada proses dan hasil kerja masing-masing. ¾ Perbedaan proses antara kompilator dan interpreter ditunjukkan pada Gambar 1.1 dan Gambar 1.2.
Kesalahan-kesalahan yang ditemukan selama proses kompilasi dilaporkan oleh bagian penanganan kesalahan (error handler) dalam bentuk pesan- pesan kesalahan (error messages). Secara garis besar proses kompilasi dari suatu kompilator dapat digambarkan sebagai berikut:
Program sumber Kompilator
Program sasaran Komputer pelaksana
Hasil Data
Proses Kompilasi Proses Eksekusi
Gambar 1.1. Proses Kompilasi dan EksekusiError messages
Program sumber
Interpreter Hasil
Data
Gambar 1.2. Proses Interpretasi Source TargetProgram Program
Compiler
(Program dengan (Program dengan bahasa sumber) bahasa sasaran)
Error messages
Gambar 1.3. Proses kompilasi sebuah kompilatorTahapan Kompilasi
Proses kompilasi dari suatu kompilator pada dasarnya dapat dibagi ke
dalam dua tahapan utama yaitu: ¾ tahapan analisis, dan ¾ tahapan sintesis. o Pada tahapan analisis, program yang ditulis dalam bahasa sumber dipecah-pecah dan dibagi ke dalam beberapa bagian yang kemudian akan direpresentasikan ke dalam suatu "bentuk representasi antara" (intermediate representation) dari program sumber. o Pada tahapan sintesis, dilakukan pembangunan program sasaran yang diinginkan dari bentuk representasi antara
Operasi-operasi yang dilakukan oleh program sumber ditentukan dan dicatat dalam suatu struktur pohon (tree) yang disebut dengan nama pohon sintaks (sintax tree). Dalam hal ini setiap nodal pada pohon sintaks tersebut menyatakan suatu operasi, sedangkan anak dari nodal (titik) tersebut memberikan argumen yang diperlukan Sedangkan pada tahapan sintesis, program sasaran dibentuk berdasarkan "representasi antara" yang dihasilkan pada tahapan analisis.
Secara lebih rinci tahapan dalam proses kompilasi dapat diuraikan sebagai berikut: ¾ Analisis : - analisis leksikal (lexical analysis)
- analisis sintaktik (syntax analysis)
- analisis semantic (semantic analysis)
(Dalam tahapan ini program sumber dibagi dan dipecah- pecah menjadi deretan token, dikelompokkan berdasarkan aturan sintaks, dan diperiksa berdasarkan "arti", dan selanjutnya direpresentasikan dalam bentuk representasi
antara atau program antara).
¾ Sintesis : - pembentukan kode tengah (intermediate code generator)
- optimasi kode (code optimization)
- pembentukan kode akhir (final code generator) (Dalam tahapan ini program sasaran dibentuk berdasarkan representasi antara yang dihasilkan pada tahapan analisis, dan dilakukan optimalisasi kode dalam program sasaran.)
Sebelum Bahasa sasaran dapat dihasilkan, dalam melakukan proses kompilasi ini tiap bagian utama kompilator akan berhubungan dan berkomunikasi dengan suatu berkas tabel yang disebut tabel simbol (symbol table) yaitu suatu tabel yang berisi semua simbol yang digunakan dalam bahasa sumber.
Komponen-komponen utama dan alur proses dalam tahapan kompilasi dapat digambarkan pada Gambar 1.4 sebagai berikut :
Program Penanganan kesalahan sumber
(Error handler) Sintesis Analisis Penganalisis
Pengoptimal Pembangkit kode Pembangkit Leksikal kode akhir kode antara (Scanner)
(Intermediate (Code (Final code optimizer) generator) code generator)
Penganalisis Sintaks (Parser) Penganalisis
Pengelola tabel Program Semantik simbol sasaran
Gambar 1.4. Komponen utama dan alur proses sebuah kompilatorBerikut ini hal-hal yang dilakukan oleh setiap fase pada proses kompilasi terhadap program sumber.
Sebagai contoh, pernyataan pemberian nilai (assignment statement) berikut;
position := initial + rate * 60
Secara singkat proses kompilasi dapat dijelaskan sbb.:
1. Penganalisa leksikal (Lexical Analysis) :
Tahap lexical analysis adalah tahap pembacaan program sumber, karakter demi karakter. Sederetan (satu atau lebih) karakter dikelompokkan menjadi satu kesatuan mengacu kepada pola kesatuan kelompok karakter (token) yang ditentukan dalam bahasa sumber.
Kelompok karakter yang membentuk sebuah token dinamakan lexeme untuk token tersebut. Setiap token yang dihasilkan disimpan di dalam tabel simbol. Sederetan karakter yang tidak mengikuti pola token akan dilaporkan sebagai token tak dikenal (unidentified token). Contoh : Misalnya pola token untuk identifier I adalah :
I = huruf(huruf|angka)* Jadi: Lexeme ab2c dikenali sebagai token sementara lexeme 2abc atau abC tidak dikenal.
Pengelompokkan pernyataan tersebut menjadi token-token sebagai berikut :
1. Token identifier position
2. Token simbol assignment :=
3. Token identifier initial
4. Token tanda plus +
5. Token identifier rate
6. Token tanda perkalian *
7. Token konstanta angka 60 Ketika identifier pada program sumber ditemukan lexical analyzer, identifier dimasukkan ke tabel simbol. position := initial + rate * 60 diubah menjadi id1 := id2 + id3 * 60
2. Penganalisa sintaks (Sintax Analysis) : Tahap sintax analysis adalah tahap pemeriksaan kesesuaian pola
deretan token dengan aturan sintaks yang ditentukan dalam bahasa sumber.
Sederetan token yang tidak mengikuti aturan sintaks akan dilaporkan sebagai kesalahan sintaks (sintax error). Secara logika deretan token yang bersesuaian dengan sintaks tertentu akan dinyatakan sebagai pohon parsing (parse tree). Parsing atau bentuk pohon sintaks dari pernyataan tersebut di atas adalah:
Gambar 1.5. Pohon Sintaks3. Penganalisa semantik (Semantic Analysis) Tahap semantic analysis adalah tahap pemeriksaan kebenaran arti program sumber, mengumpulkan informasi tipe bagi tahap berikutnya.
Tahap ini menggunakan pohon sintaks dari tahap syntax analysis untuk identifikasi operator dan operand suatu ekspresi dan kalimat. Komponen penting analisis semantik adalah pemeriksaan tipe, memeriksa operator yang harus mempunyai operand yang diijinkan oleh spesifikasi bahasa sumber. Pemeriksaan token dan ekspresi didasarkan pada batasan-batasan yang ditetapkan. Batasan-batasan tersebut misalnya :
a. panjang maksimum token identifier adalah 8 karakter,
b. panjang maksimum ekspresi tunggal adalah 80 karakter,
c. nilai bilangan bulat adalah -32768 s/d 32767,
d. operasi aritmatika harus melibatkan operan-operan yang bertipe sama. Karena misal adanya pernyataan deklarasi di awal : var position, initial, rate : real; Maka konstanta 60 dikonversi menjadi real dengan fungsi inttoreal(60) menjadi konstanta bilangan real
Gambar 1.6. Pohon sintaks untuk persamaan dengan bilangan real4. Pembangkit kode antara (Intermediate Code Generator) :
Tahap intermediate code generator adalah tahap representasi perantara antara bentuk bahasa tingkat tinggi dengan bahasa mesin. Pada tahap ini dibangkitkan kode antara (intermediate code) berdasarkan pohon parsing (parse tree). Pohon parsing selanjutnya diterjemahkan oleh suatu penerjemah yang dinamakan penerjemah berdasarkan sintak (syntax-directed translator). Hasil penerjemahan ini biasanya merupakan perintah tiga alamat
(three-address code) yang merupakan representasi program untuk suatu
mesin abstrak. Perintah tiga alamat bisa berbentuk quadruples (op, arg1, arg2, result), tripels (op, arg1, arg2). Ekspresi dengan satu
argumen dinyatakan dengan menetapkan arg2 dengan - (strip, dash). Karena pada level berikutnya masih akan dilakukan optimasi, maka perlu dibuat representasi yang memudahkan optimasi, yang bukan merupakan bahasa mesin. temp1 := inttoreal(60) temp2 := id3 * temp1 temp3 := id2 + temp2 id1 := temp3
5. Pengoptimal kode (Code Optimization) Tahap code optimization adalah proses identifikasi dan membuang operasi-operasi yang tidak perlu dari intermediate code generation untuk penyederhanaan sehingga nantinya kode mesin hasil menjadi lebih cepat. Code Optimization juga dimaksudkan untuk penghematan
space dan waktu komputasi.
Kode-kode tersebut dioptimasi menjadi : Temp1 := id3 * 60.0 Id1 := id1 + temp1
6. Pembangkit kode (Code Generator) : Tahap akhir kompilator adalah pembangkitan kode target/objek dan biasanya kode mesin atau assembly yang dapat direlokasi.
Pembangkitan kode sangat bergantung pada mesin yang dipakai, misal : MOVF id3, R2 MULF #60.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1
Pertanyaan Pendalaman Materi
9. Apa yang dimaksudkan dengan Token, Pola dan Lexeme. Jelaskan dengan memberikan contoh.
14. Sebutkan tanggapan apa saja yang terjadi pada bagian penanganan kesalahan (error handler) ketika menemukan kesalahan (error) selama proses kompilasi.
Sebutkan tanggapan-tanggapan yang terjadi bila proses kompilasi mendapati kesalahan.
13. Salah satu tugas "error handler" adalah memberikan tanggapan (melakukan tindakan) bila proses kompilasi mendapati kesalahan.
12. Sebutkan tugas-tugas dari bagian penanganan kesalahan (error handler) dalam satu proses kompilasi.
11. Sebutkan beberapa bentuk kode antara (intermediate code) dalam proses kompilasi.
Berikan contoh.
10. Sebutkan apa yang dimaksud dengan notasi infix maupun postfix.
8. Sebutkan fungsi/kegunaan utama dari penganalisis leksikal, dan jelaskan interaksinya dengan bagian lain dalam kompilator.
1. Jelaskan apa yang dimaksud dengan proses kompilasi. Berikan contoh peristiwa sehari-hari yang memiliki mekanisme yang hampir sama dengan mekanisme kompilasi.
7. Sebutkan informasi-informasi apa saja yang perlu disimpan dalam tabel simbol.
6. Jelaskan prinsip-prinsip utama dalam optimasi kode (code optimation).
5. Sebutkan beberapa bentuk kode antara (intermediate code) dalam proses kompilasi.
4. Jelaskan fungsi/kegunaan dan hasil keluaran dari masing-masing tahapan tersebut.
Jelaskan pula hasil keluaran dari masing-masing tahapan tersebut.
3. Jelaskan tahapan-tahapan yang diperlukan dalam proses kompilasi.
2. Jelaskan apa beda kompilator dan interpreter. Berikan contoh masing- masing.
15. Jelaskan fungsi / tugas bagian pengelolaan tabel simbol.