Bahasa Pemrograman Untuk Mendefinisikan Rule Bagi
Generator Soal Matematika
High Level Programming Language for Rule Defintion
for Math Problem Generator
Moh. Sofyan S. Thayf1, Retantyo Wardoyo2 Program Studi Ilmu Komputer
Program Pascasarjana Universitas Gadjah Mada
ABSTRACT
The research aim to develop a high level programming language for mathematics rule definition that will be use in mathematical problem generator that generate mathematical problem collections in easier and efficient way. The compiler and problem generator program also developed to evaluate the programming language.
The programming language are created by a grammar definition according to an approach to mathematics multiple choice problem creation circumstances, and limited to arithmetic problems only. The compiler are built by using Java Compilers Compiler (JavaCC) tools that generates lexical analyzer and syntax analyzer based on defined grammar and some defined semantic rules in Java classes.
As the result, the compiler and the problem generator successfully generate thousands of mathematical problems using the rules that written in the new programming language, less than 10 seconds.
Keywords: programming language, compiler, problem generator, mathematics
1 Pengajar pada STMIK KHARISMA Makassar
2 Pengajar pada Program Magister dan Doktor Ilmu Komputer FMIPA
1. Latar Belakang
Permasalahan utama dari aktifitas belajar, latihan, dan pengujian
kemampuan matematika adalah kebutuhan akan tersedianya koleksi soal dalam
jumlah yang besar dengan beragam variasi soal. Pengembangan bank soal
matematika, tidak jarang harus melibatkan tim kerja yang besar dan jam kerja
yang relatif panjang untuk menghasilkan soal yang valid dalam jumlah besar.
Program aplikasi generator soal matematika telah banyak dikembangkan
dan bisa didapatkan dengan mudah, akan tetapi generator soal yang tersedia
tersebut memiliki beberapa permasalahan, antara lain:
1. Software generator soal umumnya dikembangkan oleh pengembang software,
research team, task force, atau perorangan, yang fokus pada satu bidang atau
cabang matematika tertentu, dan generator soal yang dibangun akan
menghasilkan koleksi soal yang terbatas hanya dalam domain cabang
matematika tersebut. Sehingga untuk keperluan pembelajaran atau pengujian
kemampuan matematika yang lebih luas, bisa jadi dibutuhkan lebih dari satu
generator soal dari pengembang yang berbeda dengan kebijakan penggunaan
yang berbeda pula, terkait dengan harga software, lisensi, limitasi, dan
sebagainya.
2. Untuk dapat meng-generate soal, generator soal memiliki sejumlah rule sesuai
dengan formulasi matematika dari soal-soal yang akan dibentuk. Tetapi rule
ini merupakan algoritma yang sudah dituliskan sebagai kode program yang
melakukan modifikasi atau penambahan rule baru untuk kasus atau formula
matematika yang berbeda.
3. Untuk dapat mengembangkan software generator soal sendiri yang sesuai
dengan kebutuhan, dibutuhkan kemampuan sebagai seorang programer
komputer yang umumnya tidak selalu dimiliki oleh guru atau dosen yang
mengajarkan matematika
Dari permasalahan yang telah diuraikan di atas, maka perlu dipikirkan
untuk merancang dan mengembangkan suatu bahasa pemrograman khusus yang
mudah dipahami dan digunakan, atau bahasa pemrograman tingkat tinggi yang
bersifat deklaratif untuk mendefinisikan rule atau formula matematika.
Selanjutnya sejumlah rule yang telah dituliskan dalam bahasa yang
dirancang dapat dikoleksi sebagai sebuah library untuk digunakan oleh generator
soal yang untuk menghasilkan soal-soal berdasarkan koleksi rule yang tersedia.
2. Permasalahan
Berdasarkan uraian permasalahan di atas, maka dalam penelitian ini akan
dibahas: bagaimana mendefinisikan sebuah bahasa pemrograman yang dapat
memudahkan penulisan rule untuk pembentukan soal-soal matematika secara
otomatis menggunakan generator soal.
3. Cara Penelitian
Metode penelitian yang digunakan dalam penyusunan tesis ini terdiri atas :
1. Library Research, yakni metode penelitian yang dilakukan dengan cara
dan retrieving data dan informasi, dan masalah-masalah berkaitan dengan
teori dan kaidah pembentukan bahasa serta teknik kompilasi
2. Prototyping, yaitu melakukan pengembangan prototipe program aplikasi yakni
program compiler dan program generator soal, untuk keperluan uji coba
penerimaan sistem bahasa, pembentukan rule, dan uji coba pembentukan bank
soal dari rule yang ditulis dalam bahasa yang dirancang.
4. Pendekatan Bahasa Pemrograman 4.1. Pendekatan Struktur Bahasa
Sebuah formula atau rumus matematika, pada prinsipnya menunjukkan
hubungan antara satu nilai dengan satu atau beberapa nilai lainnya. Setiap nilai
biasanya dinyatakan dalam bentuk variabel dalam notasi rumusnya. Dengan
memberikan nilai berbeda kepada satu atau beberapa variabel yang dimiliki
sebuah rumus matematika, maka akan didapatkan nilai hasil yang berbeda-beda
pula. Berdasarkan konsep ini, maka sebuah generator soal matematika dapat
menghasilkan sejumlah soal matematika yang dibentuk dari satu rumus
matematika dengan cara memberikan nilai yang dibangkitkan secara acak kepada
variabel-variabelnya.
Bahasa yang dirancang pada prinsipnya adalah untuk merepresentasikan
sebuah formula matematika beserta semua variabel-variabel dari nilai yang
mempengaruhinya, yang diharapkan dapat memberikan kemudahan dalam
penulisan pada sisi penulis atau pembuat soal, dan dapat membentuk naskah soal
Sebuah soal dalam test matematika yang berbentuk multiple-choice
biasanya memiliki bentuk umum seperti pada contoh listing 1
J i k a d i k e t a h u i j a r i - j a r i l i n g k a r a n = 5 , h i t u n g l u a s l i n g k a r a n ( PI = 3 , 1 4 ) a . 2 5
b . 2 5 , 5 c . 7 8 d . 7 8 , 5
Listing 1. Contoh soal matematika bentuk multiple-chioce
Jari-jari dan PI adalah variabel dan konstanta yang menentukan nilai luas
lingkaran setelah dihitung menggunakan rumus luas lingkaran. Jadi terdapat dua
komponen utama dari sebuah rumus yaitu: (1) Variabel-variabel dan
konstanta-konstanta, dan (2) formulasi atau rumus itu sendiri.
Dapat diasumsikan bahwa sebuah bahasa untuk mendefinisikan rule
sebagai acuan untuk pembentukan soal matematika berbentuk multiple-choice
harus memiliki komponen-komponen:
1. deklarasi variabel dan konstanta,
2. definisi rule dalam bentuk formula,
3. rule untuk menghasilkan opsi pilihan
4.2. Pendekatan Statement dan Ekspresi
Statement adalah pembentuk program berupa perintah yang akan
dieksekusi untuk tujuan merubah nilai dari variabel-variabel. Sejumlah bahasa
mengimplemetasi command dalam bentuk:
- assignment (penugasan, pemberian nilai),
- procedure calls (pemanggilan prosedur),
- sequential command (perintah berurutan),
- conditional command (pemilihan perintah), dan
- iterative command (perulangan perintah).
Dalam rangka merubah nilai variabel, digunakan ekspresi (expression)
yeng bertujuan untuk mengevaluasi satu nilai. Ekspresi dapat berbentuk:
- literal, contoh: 10 (contoh dalam statement: a = 10 )
- construct, contoh: 2 * 10 (contoh dalam statement: a = 2 * 10 )
- function calls, contoh: sin(45)
- conditional expressions, contoh: a >= 0
- constant and variabel accesses, contoh a = b
Dalam konteks rule pembentuk soal matematika, dipertimbangkan bahwa:
1. Terdapat rule untuk rumus matematika tertentu yang membutuhkan proses
perulangan, seperti pada perhitungan nilai faktorial, atau sistem deret. Untuk
itu dibutuhkan tersedianya iteratif command atau statement perulangan
2. Terdapat rule untuk rumus matematika tertentu yang membutuhkan proses
seleksi atau pemilihan, untuk itu, dibutuhkan tersedianya sarana untuk
conditional command dan conditional expressions .
3. Terdapat rule untuk rumus matematika yang membutuhkan penggunaan
fungsi-fungsi tertentu, yang sulit atau tidak memungkinkan untuk dikonstruksi
sendiri dalam definisi rule, maka dibutuhkan tersedianya sejumlah fungsi siap
pakai (buit-in function) dan mekanisme function call.
4. Kerena berorientasi pada rumusan matematika, maka bahasa harus sedapat
mungkin mengimplementasi semua bentuk ekspresi dan penggunaan operator
5. Rancangan Prototipe Aplikasi
Rancangan sistem, secara garis besar digambarkan dalam use case
diagram pada gambar 1.
Gambar 1. Use case diagram
Prototipe aplikasi terdiri tiga bagian utama, yaitu:
1. Program kompilasi (compiler) yang memiliki fungsi utama melakukan
kompilasi terhadap kode sumber dari rule yang ditulis dapat diterima dan
digunakan sebagai rule untuk generator soal,
2. Program generator soal berfungsi untuk membentuk soal-soal dari rule yang
tersedia dalam jumlah yang diinginkan oleh pengguna
3. Program kompilasi dan generator soal melibatkan sebuah class HillParser
5.1. Prototipe Program Compiler
Pada program compiler, pengguna dapat melakukan dua aktifitas utama,
yaitu: (1) melakukan kompilasi source code dari rule, dan (2) melakukan test,
yakni melihat beberapa contoh soal yang dapat dibangkitkan dari rule tersebut.
Aktifitas dan proses kompilasi yang berlangsung di dalam program
compiler dapat dilihat pada sequence diagram pada gambar 2.
Gambar 2. Sequence diagram dari rancangan prototipe compiler
5.2. Prototipe Program Generator Soal
Program generator soal berfungsi untuk membangkitkan/membentuk
sejumlah soal dari sejumlah source code rule yang sudah bebas error berdasarkan
hasil dari program kompilasi. Proses pembangkitan soal oleh generator soal
Gambar 3. Sequence diagram dari rancangan prototipe generator soal
Untuk menjalankan proses generator soal, penguna harus menyiapkan
beberapa hal sebagai parameter bagi proses pembentukan soal, yaitu:
1. Memilih rule mana yang akan dilibatkan dalam proses pembentukan soal
2. Menentukan berapa jumlah soal yang akan dibentuk
3. Menentukan tipe output dari hasil pembentukan soal.
4. Menentukan nama file dimana soal-soal yang terbentuk akan disimpan
Untuk fleksibilitas, prototipe generator soal direncanakan dapat
menghasilkan output berupa naskah soal sesuai jumlah yang diinginkan dalam
beberapa format, yaitu:
1. format text file (*.txt)
2. format HTML (*.html)
3. format PDF (*.pdf), dan
5.3. Program Parser
Bahasa pemrograman untuk definisi rule, program Kompilasi, dan
program Generator Soal, semuanya melibatkan satu program utama yang sangat
penting, yaitu program parser sebagai inti dari sebuah compiler yang bertugas
untuk melakukan analisa leksikal, analisa sintaksis, dan analisa semantik terhadap
source code yang ditulis dalam suatu bahasa pemrograman.
Untuk memudakan pembuatan progam parser, digunakan tools Parser
Generator yaitu Java Compilers Compiler (JavaCC) beserta utilty JJTree yang
tergabung dalam paket JavaCC. Dalam membangun sebuah parser dengan
JavaCC dan JJTree dilakukan langkah-langkah sebagai berikut:
1. Menyusun grammar dari bahasa yang akan dirancang
2. Membuat sejumlah Java class untuk penanganan node dan semantik
3. Melakukan kompilasi dengan JJTree
4. Melakukan kompilasi dengan JavaCC
5. Melakukan kompilasi dengan Java Compiler
Setelah proses kompilasi, maka semua class buatan maupun class yang
auto-generate, akan membentuk program parser yang mekanisme dari proses
Gambar 4. Activity diagram program parser
Interpretasi semantik yang paling utama dalam parser yang dibangun
adalah proses pembentukan soal yang meliputi:
1. Pembentukan nilai acak terhadap variabel-variabel,
2. Perhitungan hasil dari operasi berdasarkan rumus yang didefinisikan,
3. Pembentukan opsi untuk pilihan jawaban,
4. Pembentukan naskah soal.
6. Implementasi
6.1. Rancangan Bahasa Pemrograman
Kode sumber (source code) dari rule soal matematika ditulis sebagai file
text dan diberi ekstensi *.r sebagai pengenal. Struktur kode sumber adalah dapat
/*deklarasi rule */
Listing 2. Struktur kode sumber bahasa definisi rule soal matematika
Bahasa yang dirancang relatif memiliki struktur yang sederhana tetapi
cukup lengkap, dilihat dari koleksi reserved word, literal tipe data, operator, dan
built-in function, dengan perincian sebagai berikut:
1. tiga belas buah reserved word, yaitu:
a. definisi rule: rule
b. deklarasi variabel dan konstanta: hidden, const, option
c. proses seleksi: if, elseif, else
d. kendali perulangan: for, to, step, repeat, until, while
2. dua keyword untuk literal tipe data, yaitu:
a. untuk tipe data integer: int
b. untuk tipe data real: real
3. lima belas buah operator, yaitu:
a. operator-operator aritmetika: + , - , * , / , ^ , mod,
4. built-in function, yaitu:
a. fungsi-fungsi trigonometri: sin( ), cos( ), tg( ), asin( ), acos( ), atg( )
b. fungsi-fungsi untuk pembulatan: round( ), integer( )
c. fungsi-fungsi array: asort( ), asum( )
6.2. Prototipe Program Kompilasi
Tampilan user interface dari prototipe program kompilasi dapat dilihat
pada gambar 5.
Gambar 5. User interface program kompilasi
Pada prototipe ini melayani proses kompilasi terhadap file kode sumber
yang sudah dipilih. Jika proses kompilasi sukses, maka pengguna dapat melihat
contoh soal yang dapat dibentuk dari rule yang didefinisikan dalam file kode
sumber bersangkutan melalui fasilitas test.
Disediakan fasilitas registrasi untuk melakukan pencatatan terhadap file
kode sumber yang telah berhasil dikompilasi dan bebas error, dan dapat
1. Mendaftarkan nama file kode sumber yang baru
2. Meng-copy file kode sumber ke direkori koleksi kode sumber rule
Tujuan proses registrasi kode sumber adalah: (1) memastikan file yang
akan digunakan untuk pembentukan bank soal adalah file yang telah bebas error
dan (2) memastikan perubahan terhadap file kode sumber yang telah diregistrasi
harus melalui proses kompilasi ulang.
6.3. Prototipe Program Generator Soal
User interface dari prototipe program generator soal dapat dilihat pada
gambar 6.
Gambar 6. User interface program generaor soal
User interface memungkinkan pengguna untuk melakukan aktifitas setting
1. memilih rule yang akan dilibatkan pada prose pembentukan
2. menentukan jumlah soal yang ingin dihasilkan
3. menentukan format output yang akan dihasilkan.
4. menentukan di mana kunci jawaban dari tiap soal akan diletakkan
5. menentukan nama file dimana soal hasil akan disimpan
7. Penutup
Dari penelitian dan pembahasan yang telah dilakukan di atas, dapat ditarik
beberapa kesimpulan sebagai berikut:
1. Bahasa pemrograman untuk mendefinisikan rule bagi generator soal
matematika berhasil dibentuk, dan rule yang ditulis dalam bahasa
pemrograman ini dapat digunakan untuk menghasilkan bank soal matematika
dengan mudah dan cepat.
2. Struktur bahasa yang dirancang, sangat sederhana karena hanya memiliki 13
reserved word diluar built-in function dan operator, serta dua literal tipe data.
Jumlah baris kode untuk mendefinisikan satu rule hanya berkisar antar 5
sampai dengan 15 baris, di luar baris-baris komentar, bergantung pada tingkat
kerumitan rumus/rule yang didefinisikan.
3. Berdasarkan hasil uji coba, dari koleksi rule yang telah tersedia proses
pembentukan hingga 1500 buah soal dapat dilakukan dalam waktu kurang dari
10 detik, sehingga dapat dikatakan bahwa bahasa pemrograman yang
dirancang, bersama-sama dengan generator soalnya, dapat mengefisienkan
8. Daftar Pustaka
_____________, JJTree Reference Documentation
(diakses 14/12/2008)
Aho, A.V., Sethi, R., dan Ullman, J.D., 2002, Compilers, Principles, Technique,
and Tools, Prentice Hall, New Jersey, USA.
Appel, A.W., dan Palsberg, J., 2002, Modern Compiler Implementation in Java
(2nd ed.), Cambridge University Press.
Martin, J.C., 1997, Introduction to Languages and The Theory of Computation
(2nd ed.), McGraw-Hill Companies, Inc.
Scott, M.L., 2002, Programming Languages Pragmatics, Morgan Kaufman
Publisher
Terry, P.D., 2000, Compilers and Compiler Generators – an introduction with
C++, EB
Thayf, M.S., Bahasa Pemrograman Untuk Mendefinisikan Rule Bagi Generator
Soal Matematika, Tesis, Magister Ilmu Komputer Universitas Gadjah
Mada, Yogyakarta.
Watt, D. A., dan Findlay, W., 2004, Programming Language Design Concept,