Tutorial Pembuatan Compiler

From OnnoWiki
Jump to navigation Jump to search

Artikel disadur dari: http://yohan.es/compiler/

Indeks

Pendahuluan - Bagian 1 - Bagian 2 - Bagian 3 - Bagian 4 - Bagian 5 - Bagian 6 - Bagian 7 - Bagian 8 - Bagian 9

Membuat Interpreter/Compiler itu Mudah

Membuat interpreter/compiler memerlukan keahlian pemrograman level menengah, tapi bukan berarti menulis interpreter/compiler merupakan hal yang sulit. Dengan sedikit konsentrasi dan langsung mencoba di depan komputer, Anda bisa mengikuti tutorial ini untuk menulis sebuah compiler sederhana tanpa harus berjuang sampai berdarah-darah.

Pertanyaan pertama yang muncul dari beberapa orang yang melihat tutorial ini adalah: Untuk apa membuat compiler?, untuk menjawab itu, saya kutipkan tutorial bagian pertama:

Untuk apa membuat compiler?

Sudah ada banyak bahasa di dunia ini, untuk apa belajar membuat interpreter atau compiler untuk sebuah bahasa?

Ada dua alasan:

  1. Belajar membuat compiler merupakan latihan pemrograman yang bagus. Untuk membuat compiler, kita perlu mengetahui parsing, abstract syntax tree, dan aneka hal lain yang memerlukan algoritma dan struktur data yang kompleks.
  2. Pengetahuan pembuatan compiler terutama parsing dan pembuatan abstract syntax tree dapat diaplikasikan ke berbagai bidang lain. Contoh aplikasi kedua ilmu tersebut misalnya source-to-source translators (penerjemahan otomatis dari satu bahasa pemrograman ke bahasa lain, misalnya f2c yang menerjemahkan FORTRAN ke C), refactoring tools, reengineering tools, metrics tools (mengukur jumlah baris kode/fungsi, dsb untuk metrik perangkat lunak), consistency checkers (memeriksa apakah kode program konsisten dengan aturan), dan lain-lain. Beberapa contoh aplikasi lain dari ilmu yang dipelajari ketika membuat compiler bisa dilihat di http://progtools.comlab.ox.ac.uk/members/torbjorn/thesis.

Tidak terlalu banyak orang yang belajar membuat compiler untuk general purpose language, kebanyakan orang belajar untuk membuat Domain specific language (DSL). DSL adalah bahasa yang digunakan hanya untuk aplikasi tertentu (misalnya bahasa scripting di game, atau macro di word processor tertentu, bahkan Cascading Style Sheeet pada HTML/XML juga bisa dipandang sebagai DSL). DSL biasanya jauh lebih sederhana dibandingkan general purpose language, karena tujuannya spesifik untuk domain tertentu.

Catatan: Tutorial ini membahas mengenai pembuatan interpreter dan compiler. Jika Anda hanya tertarik membuat interpreter,
Anda tidak perlu mengenal assembly, tapi jika Anda tertarik membuat compiler, sebaiknya Anda memiliki dasar bahasa assembly.

  • Bagian pertama membahas teori parsing. Tidak diperlukan jika Anda pernah mendapat kuliah mengenai compiler.
  • Bagian kedua membuat interpreter kalkulator, sebuah bahasa yang hanya mendukung ekspresi integer.
  • Bagian ketiga membuat compiler untuk kalkulator, menghasilkan kode assembly untuk program kalkulator.
  • Bagian keempat membuat interpreter untuk bahasa Bulat. Bahasa sederhana untuk memproses ekspresi bilangan bulat, yang mendukung penggunaan variabel, serta input dan output.
  • Bagian kelima membuat compiler untuk bahasa Bulat, menghasilkan kode assembly untuk bahasa Bulat.
  • Bagian keenam membuat interpreter untuk bahasa Kasus. Bahasa sederhana yang mendukung kondisional (if/else dan loop). Bahasa ini juga lebih lengkap dibanding Bulat karena mengimplementasikan operator perbandingan.
  • Bagian ketujuh membuat interpreter untuk bahasa Delta. Perkembangan bahasa kasus yang mendukung tipe data int, float, dan string.
  • Bagian kedelapan memperkenalkan eksekusi berbasis bytecode. Bagian ini hanya berisi konsep dan potongan kode, bukan kode program utuh.
  • Bagian kesembilan membuat interpreter untuk bahasa Kasus yang menggunakan pendekatan bytecode.

Tutorial yang saya tulis bukanlah satu-satunya tutorial yang membahas pembuatan interpreter/compiler. Anda bisa melihat tutorial lain di bagian resource.

Rencana

Tutorial ini belum selesai, rencana lebih lanjut (tergantung ketersediaan waktu saya, dan semangat saya):

   Eksekusi dengan bytecode
   Bahasa yang menggunakan fungsi/prosedur
   Bahasa yang menggunakan array
   Pembahasan mengenai LLVM

Urutan belum tentu seperti yang saya rencanakan.

Komentar dan saran sangat diharapkan, silakan tinggalkan komentar di http://blog.compactbyte.com/2009/06/22/tutorial-membuat-interpretercompiler/.