Domain Specific Language


20
Jan 12

Generative Programming

Pertama kali mengenal istilah ini adalah pada saat membaca tentang Model Driven Engineering (MDE), dimana istilah – istilah seperti Domain Specific Language (DSL) dan Code Generator sering dijumpai. Saat ini cukup banyak penelitian mengenai teknologi Model-Driven, termasuk yang telah terstandarisasi seperti Model-Driven Architecture (MDA) oleh OMG.

Dalam generative programming, kita juga akan menemukan konsep Aspect-Oriented Programming serta Generic Programming. Dapat dikatakan bahwa dengan mempelajari generative programming, kita akan mempelajari berbagai konsep/paradigma sekaligus. Ini dapat menjadi nilai tambah tersendiri.

Bagi yang berminat mempelajari Generative Programming dapat membaca tesis Generative Programming – Principles and Techniques of Software Engineering Based on Automated Configuration and Fragment-Based Component Models

Berbagai paper/jurnal tersedia secara online, maupun buku Generative Programming edisi cetak.


20
Oct 10

DSL Dengan Interpreter Pattern

Beberapa waktu yang lalu saya sempat menulis tentang Membuat DSL Tanggal Dengan Scala. Kali ini sebenarnya hampir sama, hanya saja implementasinya dengan bahasa Java dan memiliki grammar yang sedikit berbeda. Kebetulan sedang membaca-baca tentang behavioral design pattern, salah satunya adalah interpreter pattern, maka DSL yang ini dibuat menggunakan interpreter pattern. Karena saya sendiri masih belum begitu paham dengan konsep interpreter pattern, maka tidak ada jaminan bahwa code yang saya tulis telah memenuhi kriteria interpreter patter.
Berikut ini grammar-nya:

Grammar DSL Tanggal

Grammar DSL Tanggal

Contoh implementasi DSL-nya:

Kemarin dikurangi 3 tahun ditambah 7 bulan

Hampir mirip dengan versi Scala di tulisan terdahulu, hanya saja DSL kali ini tidak menggunakan Conjunction (kalau yang versi Scala ada Conjunction “dan” nya).
Dalam interpreter pattern, semua expression dijadikan class, baik non-terminal expression maupun terminal expression.
Beruikut ini source code-nya:

Code di atas bukanlah code untuk produksi, mungkin lebih cocok sebagai prototype saja, hanya sebagai contoh bagaimana kita membuat DSL dengan interpreter pattern. Code di atas sangat tidak efisien dan harus di-refactor ulang, jadi jangan coba-coba memasukannya ke dalam production code, karena secara coding tidak elegan dan performanya juga payah. Silahkan dicoba sendiri dan Anda akan mengetahui bahwa waktu eksekusi code tersebut tergolong lambat.


15
Aug 10

Membuat DSL Tanggal Dengan Scala

Membuat DSL (Domain Specific Language) dengan bahasa pemrograman Scala relatif mudah. Walaupun Scala adalah bahasa pemrograman static, tapi untuk urusan membuat DSL tidak kalah mudahnya dibanding bahasa pemrograman dinamis seperti Ruby atau Groovy. Kali ini kita akan membuat program DSL tanggal, program ini bukan buatan saya tetapi saya mengadopsi program yang dibuat oleh Sergio Lopes dan Paulo Renato dan saya mengubahnya dalam dialek bahasa Indonesia.

Begini ilustrasi DSL yang akan kita buat

Kemarin ditambah 15 hari dan dikurangi 19 tahun

Jika perintah tersebut dieksekusi dan dicetak ke layar maka akan muncul tanggal. Tanggal tersebut tergantung kapan kita mengeksekusi program. Berikut ini source code-nya:

Jika Anda mendapat masalah dalam menampilkan source code atau source code tidak muncul, Anda bisa mengakses halaman ini.

Petunjuk khusus bagi yang masih awam dalam menggunakan Scala (asumsi Scala sudah terinstall dalam sistem Anda):

  1. Buat file dengan nama Tanggal.scala kemudian salin source code Tanggal.scala seperti tercantum di atas. Kemudian simpan file tersebut
  2. Dalam folder yang sama, buat file dengan nama Coba.scala kemudian salin source code Coba.scala seperti tercantum di atas. Kemudian simpan file tersebut
  3. Buka terminal/command-prompt, masuk ke folder tempat kedua file tersebut disimpan. Kemudian ketik “fsc Tanggal.scala Coba.scala” (tanpa tanda kutip)
  4. Bila berhasil, coba jalankan program dengan mengetik “scala Coba” (tanpa tanda kutip)
  5. Anda dapat bereksperimen dengan file Coba.scala untuk mencoba berbagai variasi tanggal yang ingin dihitung. Namun jangan lupa untuk melakukan kompilasi setiap kali merubah source code.

Selamat mencoba.