BAB I PENDAHULUAN 1.1 PENGENALAN Pengaturcaraan adalah satu kursus yang sangat penting dalam bidang sains komputer atau teknologi maklumat. Antara bahasa-bahasa pengaturcaraan yang digunakan untuk menerapkan konsep-konsep pengaturcaraan ialah C, C++, Java, Pascal, dan Basic. Dalam subjek ini pelajar perlu mempelajari sintaks dan had keupayaan sesuatu bahasa komputer dan dalam masa yang sama, untuk membangunkan proses kerja yang boleh digunakan untuk menyelesaikan masalah. Ia adalah satu mata pelajaran yang memerlukan pelbagai lapisan hierarki kemahiran diaktifkan dalam masa yang sama (Bloom, 1956). Pengaturcaraan adalah satu subjek berasaskan tugasan, bukan berasaskan pengetahuan (Shaffer, 2005). Dalam erti kata lain, pengaturcaraan adalah subjek praktikal bukan teori. Pelajar perlu melakukan tugasan atau latihan, bukan sekadar membaca dan mengingat. Dalam usaha untuk mahir dalam subjek ini, pelajar perlu menguntukkan banyak masa untuk membuat latihan dan membangunkan penyelesaian bagi menyiapkan latihan yang diberi. Pengaturcaraan bukan satu subjek yang dapat dipelajari tanpa latih-tubi yang intensif (Truong et al. , 2005). Memandangkan pelajar perlu membuat latihan yang banyak untuk subjek ini, pensyarah perlu mengambil inisiatif untuk menyediakan soalan dan masalah yang pelbagai. Pensyarah tidak boleh menyerahkan kepada pelajar untuk membuat latihan sendiri secara sukarela. Membuat latihan secara sukarela kurang diamalkan dikalangan pelajar. Ini kerana pelajar perlu menyiapkan banyak tugasan daripada subjek yang lain (Ala-Mutka et al., 2004). Semakin banyak latihan yang diberi, semakin banyak pula beban yang terpaksa
84
Embed
Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo
Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod Pseudo - http://kerul.net
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
BAB I
PENDAHULUAN
1.1 PENGENALAN
Pengaturcaraan adalah satu kursus yang sangat penting dalam bidang sains komputer atau
teknologi maklumat. Antara bahasa-bahasa pengaturcaraan yang digunakan untuk
menerapkan konsep-konsep pengaturcaraan ialah C, C++, Java, Pascal, dan Basic.
Dalam subjek ini pelajar perlu mempelajari sintaks dan had keupayaan sesuatu
bahasa komputer dan dalam masa yang sama, untuk membangunkan proses kerja yang
boleh digunakan untuk menyelesaikan masalah. Ia adalah satu mata pelajaran yang
memerlukan pelbagai lapisan hierarki kemahiran diaktifkan dalam masa yang sama (Bloom,
1956).
Pengaturcaraan adalah satu subjek berasaskan tugasan, bukan berasaskan
pengetahuan (Shaffer, 2005). Dalam erti kata lain, pengaturcaraan adalah subjek praktikal
bukan teori. Pelajar perlu melakukan tugasan atau latihan, bukan sekadar membaca dan
mengingat. Dalam usaha untuk mahir dalam subjek ini, pelajar perlu menguntukkan banyak
masa untuk membuat latihan dan membangunkan penyelesaian bagi menyiapkan latihan
yang diberi. Pengaturcaraan bukan satu subjek yang dapat dipelajari tanpa latih-tubi yang
intensif (Truong et al. , 2005).
Memandangkan pelajar perlu membuat latihan yang banyak untuk subjek ini,
pensyarah perlu mengambil inisiatif untuk menyediakan soalan dan masalah yang pelbagai.
Pensyarah tidak boleh menyerahkan kepada pelajar untuk membuat latihan sendiri secara
sukarela. Membuat latihan secara sukarela kurang diamalkan dikalangan pelajar. Ini kerana
pelajar perlu menyiapkan banyak tugasan daripada subjek yang lain (Ala-Mutka et al.,
2004). Semakin banyak latihan yang diberi, semakin banyak pula beban yang terpaksa
dipikul oleh pensyarah untuk memeriksa, memberi markah dan juga memberi timbal balas
(komen) kepada latihan-latihan yang dihantar oleh pelajar. Walau bagaimana pun, beban
pensyarah boleh dikurangkan sekiranya mereka dibekalkan dengan alatan atau sistem yang
boleh membantu mereka menyemak latihan pelajar secara automatik. Di sini kita akan
nampak kepentingan sistem penyemak automatik latihan aturcara.
Banyak cara penilaian yang dilakukan untuk menilai sejauh mana tahap kemajuan
pelajar dalam subjek ini. Antaranya soalan objektif, betul salah, betulkan program, dapatkan
output dan tugasan penyelesaian masalah dengan membangunkan aturcara. Tugasan
membangunkan aturcara adalah tugasan yang paling memakan masa untuk disemak dan
diberi markah. Lagi pula ia adalah rutin yang membosankan, berulang kali dilakukan dan
juga mengambil masa yang panjang (Venables dan Haywood, 2001).
1.2 PERNYATAAN MASALAH
Daripada pengalaman dan pemerhatian penulis sebagai tenaga pengajar subjek
pengaturcaraan di Kolej Universiti Islam Antarabangsa Selangor (KUIS), pelbagai cara
digunakan untuk menguruskan latihan aturcara pelajar. Kaedah yang biasa digunakan ialah
pelajar mencetak aturcara dan dihantar bersama dengan kod dalam bentuk digital (softcopy).
Ada juga sebahagian tenaga pengajar menggunakan kaedah penghantaran menggunakan
medium emel. Kedua-dua kaedah ini memerlukan tenaga pengajar mengumpulkan latihan-
latihan tersebut dan membuka satu persatu secara manual. Proses ini memerlukan masa
yang agak panjang dan berulang-ulang.
Di samping menguruskan tugasan pelajar yang banyak, pensyarah juga terpaksa
menguruskan pelajar-pelajar yang ramai. Terdapat juga tugas-tugas sampingan yang perlu
dijalankan seperti pengurusan jabatan atau fakulti; memberi markah dan lain-lain (Botev et
al., 2005). Apabila kerja-kerja sampingan seperti ini terpaksa dilakukan, perhatian kepada
pencapaian pelajar akan berkurangan. Pensyarah tidak akan dapat memberikan komen-
komen yang membina kepada hasil kerja pelajar. Pensyarah juga tidak akan dapat
mengembalikan semula tugasan-tugasan pelajar untuk tujuan ulang kaji dan sebagainya.
Walaupun terdapat banyak sistem penyemak aturcara automatik yang telah dikaji
dan digunakan, tetapi kebanyakan sistem tersebut menjurus kepada penyemakan melalui
pendekatan dinamik. Pendekatan ini memerlukan kod aturcara pelajar dilaksanakan dan
2
diuji dengan set data ujian tertentu untuk menentukan kebetul-salahan aturcara. Kaedah ini
akan menambahkan beban pelayan yang mana boleh menyebabkan sistem tergendala dan
risiko kepada keselamatan sistem. Menurut Chu et al. (1997), penentuan kebetul-salahan
aturcara dengan menggunakan set data ujian adalah kaedah yang sangat mahal dan sukar
dilakukan.
Memandangkan pendekatan dinamik memerlukan pembangunan algoritma yang
lebih sukar, penulis mencadangkan pendekatan statik dengan membandingkan kod pseudo
aturcara pelajar dengan kod pseudo skema jawapan sebagai satu pendekatan yang mampu
menyemak aturcara pelajar tanpa perlu melaksanakan aturcara-aturcara tersebut.
Pendekatan ini dipilih memandangkan ianya lebih selamat kepada sistem dan juga
mengurangkan beban pemprosesan kepada pelayan sistem.
1.3 OBJEKTIF KAJIAN
Kajian ini akan menghasilkan aplikasi web yang mampu membandingkan satu jawapan
latihan aturcara C pelajar dengan beberapa model penyelesaian (skema) yang disediakan
oleh pengajar, dan akhirnya memberikan markah untuk latihan tersebut berdasarkan peratus
persamaan antara jawapan pelajar dengan model penyelesaian.
1.4 SKOP KAJIAN
Skop fungsi aturcara C yang dicadangkan dalam pembangunan prototaip pentaksir aturcara
automatik ini meliputi fungsi-fungsi yang terkandung di dalam bahagian kawalan program
aturcara C. Ianya meliputi perkara-perkara seperti jenis data (int, long, short, float dan
char), pembolehubah, pengisytiharan pembolehubah, umpukan, operator, rentetan, struktur
kawalan, dan pernyataan printf, scanf dan getch.
1.4.1 Jenis data
Terdapat tiga kategori jenis yang disokong oleh aplikasi ini. Jenis data tersebut merupakan
jenis data asas dalam bahasa C. Memandangkan rentetan dalam C dikendalikan oleh
tatasusunan, maka ia tidak disenaraikan dalam jenis data asas. Berikut adalah jenis data
yang disokong oleh aplikasi.
3
a) Nombor Integer (int) – Untuk pengisytiharan pemboleh ubah berjenis nombor
bulat seperti 0, 12, -30, 100 dan sebagainya.
b) Nombor Nyata (float, double) – Untuk pengisytiharan pemboleh ubah berjenis
nombor nyata seperti 0.5, 1.2, -3.142, 100.0012323289 dan sebagainya. Dalam
realiti aturcara C yang sebenar, float dan double digunakan untuk mengisytiharkan
pemboleh ubah berjenis nombor nyata dalam julat nombor yang berbeza. Walau
bagaimanapun dalam aplikasi ini ia dianggap jenis data yang sama.
c) Aksara (char) – Jenis data ini digunakan untuk pemboleh ubah yang mampu
memegang aksara, sama ada aksara numerik (0, 1, 2, 3, …, 9), simbol khas (+, -, _,
&, *, $, dan sebagainya) dan huruf besar atau kecil (A-Z, a-z). Untuk
mengumpukkan nilai lateral aksara kepada suatu pemboleh ubah ia memerlukan
nilai tersebut dikurung dengan tanda kutip tunggal (‘).
1.4.2 Pembolehubah dan Pengisytiharan
Terdapat dua aspek pembolehubah yang terdapat dalam spesifikasi iaitu nama dan
pengisytiharan pembolehubah.
a) Nama pembolehubah – Pembolehubah didefinisikan sebagai apa-apa perkataan
dalam aturcara sumber yang memenuhi syarat-syarat berikut;
i. Bukan kata kunci.
ii. Tidak dimulakan dengan aksara nombor.
iii. Tidak mengandungi apa-apa aksara khas kecuali sempang di bawah ( _ ).
iv. Contoh perkataan yang boleh dikategorikan sebagai pemboleh ubah dalam
C ialah nombor, number, pelajar2, no_pelajar, noKadPengenalan, dan
sebagainya.
b) Pengisytiharan pembolehubah.
Pembolehubah mesti diisytiharkan dalam bahasa C dengan jenis data yang tetap.
Contohnya : int noPendaftaran;
Pengisytiharan ini menyatakan bahawa pembolehubah noPendaftaran adalah
pemboleh ubah yang akan hanya menyimpan nombor integer.
Sekiranya pengaturcara ingin mengisytiharkan banyak pemboleubah dalam baris
yang sama, ia boleh dilakukan dengan menggunakan koma sebagai pemisah.
4
Contohnya : int noPendaftaran, noIC, pemandu1;
1.4.3 Pernyataan umpukan dan nilai awal
Untuk mengumpukkan suatu nilai kepada pemboleh ubah, lakukan dengan menggunakan
tanda (=) sebagai simbol operasi tersebut.
Contoh:int nombor1, nombor2;
nombor1=5;nombor2=nombor1;
float PI, jejari, isipadu;PI=3.142;
char hurufVokal;hurufVokal=’a’;
Perhatikan pengisytiharan untuk pemboleh ubah jenis aksara memerlukan tanda kutip
tunggal sebagai pengurung kepada nilai lateral.
1.4.4 Komen
Aplikasi ini mampu mengenal pasti dua jenis komen iaitu;
a) komen satu baris (//…komen….), dan
b) komen blok (/*…….komen…..*/).
Tetapi memandangkan matlamat sebenar aplikasi ini ialah untuk mengkaji kod aturcara
sumber sahaja, maka sebarang komen yang ditemui dalam kod aturcara akan diabaikan.
1.4.5 Operator
a) Aritmetik - Operator aritmetik yang disokong dalam aplikasi ini ialah operator
tambah (+), tolak (-), darab (*), bahagi (/), modulo (%), dan pembuka dan penutup
kurungan ( ).
b) Tokok dan Susut (seperti i++ , i-- , --i dan ++i).
c) Hubungan/Perbandingan – Operator yang bertindak sebagai operator perbandingan
seperti sama dengan (==), tak sama dengan(!=), lebih kecil (<), lebih besar (>),
lebih kecil atau sama dengan (<=), lebih besar atau sama dengan (>=).
5
d) Operator Boolean – Bagi ungkapan Boolean, berikut adalah operator-operator yang
disokong, DAN (&&), ATAU (||) dan TAK (!).
1.4.6 Struktur kawalan
Struktur kawalan terdiri daripada;
a) Struktur pemilihan (if…else dan switch…case)
b) Struktur pengulangan (do…while, while, dan for)
Aplikasi ini juga mampu mengenal pasti struktur tersarang seperti pemilihan di dalam
gelung atau sebaliknya.
1.4.7 Kawalan ralat
Sekiranya terdapat sebarang ralat semasa analisis leksikal dan analisis tatabahasa analisis
akan dihentikan. Aplikasi kemudian akan memberitahu kepada pengguna bahawa terdapat
ralat di dalam aturcara dan meminta ralat tersebut dinormalkan untuk meneruskan proses
seterusnya.
1.5 METODOLOGI
Kajian ini dimulakan dengan membuat tinjauan perpustakaan untuk melihat sejauh mana
penyelidikan seperti ini telah dibuat oleh penyelidik-penyelidik bidang pentaksir automatik
tugasan pengaturcaraan (PATP).
Dariapada kajian tersebut, penulis dapat mengenalpasti dua pendekatan utama yang
diguna pakai dalam PATP iaitu dinamik dan statik. Penulis mendapati kurang kajian dibuat
kepada pendekatan statik. Menyedari hakikat ini penulis cuba untuk mendalami teknik-
teknik yang digunakan dalam pendekatan statik. Penulis mengambil keputusan untuk
menyelidik lebih lanjut teknik perbandingan bukan-struktur yang dikategorikan dalam
pendekatan statik PATP.
Peringkat seterusnya adalah merekabentuk aplikasi yang akan dibangunkan dengan
skop yang ditetapkan.
6
Selepas pembangunan aplikasi dilaksanakan, satu ujian dibuat untuk mengetahui
kebolehan aplikasi untuk membandingkan tugasan aturcara pelajar dengan aturcara yang
disediakan oleh pensyarah mengikut skop yang telah ditetapkan.
1.6 REKA BENTUK PENYELESAIAN MASALAH
Terdapat dua pengguna utama yang perlu memasukkan aturcara masing-masing.. Pelajar
memasukkan jawapan aturcara untuk soalan yang diberi. Sebelum itu pengajar memasukkan
beberapa aturcara skema (untuk tujuan prototaip, aplikasi ini akan menerima hanya tiga
skema jawapan sahaja).
Aturcara jawapan pelajar akan melalui proses analisis leksikal, dan penjanaan kod
pseudo untuk menghasilkan kod pseudo bagi jawapan pelajar. Begitu juga yang berlaku
skema jawapan aturcara pengajar. Cuma proses analisis leksikal dan penjanaan kod pseudo
akan berlaku berulang-kali untuk kesemua skema jawapan yang telah disediakan.
Seterusnya kod pseudo jawapan pelajar akan dibandingkan dengan satu daripada
kod pseudo skema. Perbandingan ini akan menghasilkan peratus kesamaan antara kod
pseudo pelajar dengan satu kod pseudo skema. Peratus persamaan ini akan disimpan
sementara. Proses perbandingan kod pseudo pelajar dengan kod pseudo skema akan
berulang sehingga kod pseudo pelajar dibandingkan dengan kesemua kod pseudo skema.
Setiap proses perbandingan akan menghasilkan peratus kesamaan yang mungkin berbeza.
Kesemua peratus perbandingan yang diperoleh akan dibandingkan untuk mencari
peratus kesamaan yang paling tinggi. Seterusnya peratus kesamaan yang tertinggi akan
dipaparkan kepada pengajar sebagai markah kepada jawapan pelajar bagi soalan tersebut.
1.7 RINGKASAN HASIL DAN SUMBANGAN KAJIAN
Kajian ini akan menghasilkan beberapa sumbangan kepada bidang yang dikaji. Antara hasil
kajian tersebut ialah;
a) Menghasilkan kaedah yang boleh membandingkan jawapan aturcara pelajar
dengan jawapan-jawapan aturcara daripada pengajar. Kaedah yang dicadangkan
7
juga akan mencari peratus persamaan yang tertinggi, sebagai markah kepada
jawapan pelajar tersebut.
b) Satu lagi kaedah dalam penyemakan automatik tugasan pengaturcaraan (PATP)
melalui pendekatan analisis statik dapat dicadangkan.
1.8 STRUKTUR TESIS
Tesis ini mempunyai lima bab perbincangan yang berkesinambungan antara satu dengan
yang lain. Setiap bab membincangkan topik-topik yang berkaitan dengan kajian yang
dibuat. Bab I merangkumi pengenalan kajian, pernyataan masalah, metodologi, objektif,
hasil dan sumbangan kajian. Bab ini merupakan ringkasan kepada keseluruhan kajian.
Bab II meliputi kajian kesusasteraan mengenai sistem penyemak aturcara yang
menggunakan pendekatan analisis statik. Kajian akan ditumpukan kepada analisis statik
memandangkan fokus kajian adalah kepada pendekatan ini. Antara perkara-perkara yang
dibincangkan ialah sedikit sejarah mengenai pembangunan PATP untuk tujuan akademik,
perbincangan tentang kelebihan dan kelemahan PATP, pendekatan yang biasa diguna pakai
dalam implementasi PATP, perbincangan lanjut tentang pendekatan statik, analisis-analisis
yang terdapat dalam kategori pendekatan statik, kelebihan dan kelemahan pendekatan
statik, kajian-kajian mengenai pendekatan statik, dan diakhiri dengan kesimpulan.
Bab III pula menerangkan reka bentuk terperinci aplikasi yang dibangunkan. Tiga
modul utama akan diperjelaskan dengan lebih terperinci. Modul-modul tersebut ialah
penganalisis leksikal, penjana kod pseudo dan pembanding kod pseudo. Perwakilan yang
digunakan ialah rajah UML untuk menerangkan hubungan antara kelas yang terlibat dalam
aplikasi. Manakala kod pseudo pula adalah perwakilan untuk menerangkan algoritma-
algoritma utama.
Bab VI adalah penjelasan mengenai implementasi dan pengujian. Dalam bab ini
penulis akan menerangkan bagaimana reka bentuk yang telah dirancang diimplementasikan
dalam pembangunan aplikasi. Aplikasi yang dibangunkan akan diuji dengan pelbagai
contoh aturcara untuk menentukan ketepatan perbandingan yang dibuat.
8
Bab V merupakan kesimpulan dan rancangan perluasan masa hadapan mengandungi
perbincangan tentang kelemahan dan ruang pembaikan yang boleh dilakukan terhadap
aplikasi yang dibangunkan.
9
BAB II
KAJIAN LITERATUR: PENYEMAKAN AUTOMATIK
TUGASAN PENGATURCARAAN MENGGUNAKAN
PENDEKATAN ANALISIS STATIK
2.1 PENGENALAN
Penyemak automatik tugasan pengaturcaraan (PATP) adalah kaedah yang semakin popular
untuk menyemak, menilai dan memberi markah latihan aturcara pelajar. Seperti yang
dicadangkan oleh namanya, kaedah ini akan membuat penyemakan dan penilaian secara
automatik dengan berbantukan sistem komputer. Dengan ini dapat membantu (walaupun
bukan 100 peratus) pensyarah daripada melakukan kerja-kerja penyemakan latihan secara
manual.
Bidang ini telah lama dikaji semenjak 1960 lagi oleh Hollingsworth (1960). Dalam
kajiannya, beliau telah membangunkan PATP untuk menyemak dan menilai latihan aturcara
penghimpun pada kad tebuk. Semenjak itu, banyak penyemak automatik tugasan
pengaturcaraan dibangunkan untuk menyokong bahasa pengaturcaraan yang lain.
Bab ini akan membincangkan serba sedikit tentang pembangunan beberapa PATP
yang telah dibangunkan di dalam dan juga luar negara. Perbincangan meliputi sejarah,
kelebihan dan kelemahan PATP, dan juga pendekatan yang digunakan dalam PATP yang
terdahulu. Fokus diberikan kepada PATP yang menggunakan kaedah-kaedah yang
dikategorikan dalam pendekatan analisis statik. kaedah-kaedah tersebut ialah penentuan
gaya pengaturcaraan, pengesanan ralat aturcara (sintaksis atau semantik), penilaian metrik
perisian, penilaian struktur aturcara, penilaian bukan-struktur, penilaian dengan kata kunci,
pengesanan plagiarisme dan penilaian diagram.
10
2.2 KELEBIHAN MENGGUNAKAN PATP
Berikut merupakan senarai kelebihan menggunakan penyemak automatik tugasan
pengaturcaraan;
a) Menjimatkan masa dan mengurangkan beban pengajar (Truong et. al., 2005).
Dengan menggunakan sistem ini, pensyarah tidak perlu menguntukkan masa yang
banyak untuk menyemak semua jawapan pelajar. Mereka hanya perlu
menguntukkan masa yang minimal untuk membuat pengesahan dan membaca
laporan yang dijana oleh sistem. Dengan ini mereka boleh memberikan lebih
perhatian kepada pelajar yang mendapat markah yang rendah daripada latihan yang
diberikan. Pengajar secara kebiasaannya terlibat dengan persediaan mengajar,
memberi kuliah, mengendali tutorial, menguruskan jabatan atau fakulti, membuat
penyelidikan, menulis artikel atau buku dan sebagainya. Ini menyukarkan mereka
untuk memberi tumpuan kepada aktiviti menyemak latihan yang banyak dan
berulang.
b) Mengelakkan penilaian berat sebelah (Norshuhani et. al., 2006). Terdapat
pensyarah yang memberi keistimewaan kepada pelajar tertentu atau pilih kasih.
Pelajar yang diberi perhatian yang lebih biasanya akan diberikan markah yang
tinggi berbanding dengan pelajar yang tidak diminati, walaupun jawapan yang
dihantar mempunyai kualiti yang lebih kurang sama. Dengan menggunakan sistem
ini, pensyarah tidak tahu jawapan siapa, kerana sistem akan menilai dan memberi
markah secara automatik.
c) Maklum balas yang lebih cepat (Truong et. al., 2005). Pelajar pengaturcaraan
perlukan maklum balas yang cepat dalam usaha untuk mengetahui kelemahan
mereka dan di mana kesilapan yang telah dilakukan. Dengan ini mereka boleh
memperbetulkan kesilapan tersebut dan tidak diulangi untuk latihan yang akan
datang. Memandangkan beban pensyarah yang sangat banyak, mereka mungkin
tidak dapat menyemak dan menilai latihan dengan kadar yang segera. Ini
menyebabkan pelajar tidak mendapat maklumat tentang setakat mana keupayaan
mereka dalam subjek pengaturcaraan tersebut.
11
d) Mampu mengesan plagiat dengan lebih mudah (Wise, 1993). Terdapat sistem yang
mampu mengesan plagiarisme di dalam jawapan pelajar. Sekiranya plagiat dapat
dikesan dengan lebih awal, pensyarah berkesempatan untuk memanggil pelajar-
pelajar yang terlibat dan memberikan konsultasi.
e) Tugasan pelajar dapat diurus dengan lebih cekap (Ala-Mutka, 2005). Sekiranya
kaedah manual digunakan, pengajar perlu mengumpulkan jawapan dalam bentuk
cetakan pada kertas, atau ada pelajar yang menghantar dalam e-mel, mungkin
dalam bentuk salinan lembut dalam cakera keras atau disket. Medium yang
pelbagai ini sangat sukar untuk diselenggara dan sangat mudah untuk tersilap letak
atau tercicir. Dengan penggunaan sistem ini pengajar boleh mencapai semua
jawapan pelajar melalui satu medium sahaja.
Walaupun terdapat banyak kelebihan menggunakan PATP berbanding kaedah
manual, namun kaedah penyemakan aturcara bagi kebanyakan institut masih lagi
menggunakan kaedah manual (Charter, 2003). Keadaan mungkin disebabkan pembangunan
sistem PATP yang bersifat akademik dan tidak cukup ramah pengguna untuk digunakan
oleh kebanyakan pengajar. Antara faktor lain yang menjadi penyebab adalah kebanyakan
PATP yang dibangunkan tidak dapat menyokong semua bahasa pengaturcaraan. Oleh itu
usaha untuk membangunkan sistem PATP yang mudah diubahsuai untuk menyokong
pelbagai bahasa harus dipertingkatkan.
2.3 PENDEKATAN-PENDEKATAN YANG DIGUNA PAKAI DALAM
PENYEMAKAN ATURCARA
Walau apa jua bahasa pengaturcaraan yang disokong oleh sistem tersebut, dua pendekatan
yang biasanya diguna pakai; sama ada penyemakan secara dinamik atau statik.
Memandangkan tiada pendekatan tunggal yang mampu memuaskan penyemakan aturcara
secara menyeluruh, biasanya sistem penyemak automatik tugasan pengaturcaraan
menggabungkan beberapa pendekatan atau peralatan yang menyemak aturcara daripada
pelbagai aspek (Rohaida, 2003).
12
2.3.1 Pendekatan Analisis Dinamik
Pendekatan dinamik melibatkan pelaksanaan aturcara program dengan menguji program
dengan set-set data ujian yang tertentu (Foxley et. al., 1996). Melalui kaedah ini, program
yang diuji perlu menghasilkan output, dan output tersebut akan dibandingkan dengan output
kawalan. Daripada perbandingan ini, sistem akan menentukan kebetul-salahan program
yang diuji.
Memandangkan kaedah ini memerlukan kod aturcara dilaksanakan, beban yang
berlebihan mungkin akan menyebabkan kegagalan kepada komputer pelayan. Program
perlu dipastikan tidak mengandungi gelung yang tidak berpenghujung (infinite loop) untuk
mengelakkan sistem tergantung. Kod aturcara perlu dipastikan tidak mengandungi program
yang berunsur virus (seperti virus Trojan horse atau serangan denial of service ) yang akan
mengganggu kelancaran sistem. Segala kemungkinan ini perlu ditangani supaya sistem
yang terhasil adalah selamat dan boleh digunakan secara konsisten. Ini akan menambahkan
kekompleksan sistem dan kos yang lebih tinggi.
Isu-isu berkaitan analisis dengan pendekatan dinamik telah diterangkan dengan
panjang lebar oleh Rohaida (2003). Melalui kajiannya, beliau mengkategorikan pengujian
dinamik kepada tiga, iaitu pengujian kotak hitam, pengujian kotak putih dan regresi.
2.3.2 Pendekatan Analisis Statik
Penilaian menggunakan pendekatan analisis statik adalah satu kaedah untuk mengumpulkan
maklumat mengenai kod aturcara tanpa perlu melaksanakannya (Ala-Mutka, 2005). Ini
adalah antara kaedah yang digunakan untuk mengesan ralat semantik dan sintaksis. Kaedah
ini juga berguna untuk mengesan gelung tak berpenghujung, pernyataan yang mungkin
tidak akan dilaksanakan, mengesan indentasi dalam aturcara, menilai gaya pengaturcaraan
dan sebagainya.
2.4 ANALISIS-ANALISIS MENGGUNAKAN PENDEKATAN STATIK
Kebanyakan sistem PATP menggunakan pendekatan dinamik dengan menggunakan set data
ujian untuk menentukan kebolehan program berfungsi dengan betul. Namun terdapat
beberapa ciri-ciri dalam penilaian aturcara yang hanya memerlukan implementasi
13
menggunakan kaedah pendekatan statik. Antaranya ialah penentuan gaya pengaturcaraan,
pengesanan ralat aturcara, penilaian metrik perisian, penilaian struktur aturcara, penentuan
plagiarisme dan penilaian diagram.
2.4.1 Penentuan Gaya Pengaturcaraan
Terdapat keperluan untuk penulis aturcara menulis dengan gaya tertentu untuk memastikan
aturcara mudah dibaca dan diselenggara. Aturcara yang berkualiti mestilah mempunyai
indentasi supaya mudah dibaca. Pembolehubah dan pengecam yang digunakan mestilah
mempunyai maksud yang memudahkan orang lain untuk memahami apa yang dilakukan
oleh aturcara (Marini et. al. 2002). Faktor-faktor tersebut perlu diambil kira untuk
menentukan aturcara yang berkualiti. Antara sistem yang dibangunkan untuk menangani
keperluan penyemakan gaya pengaturcaraan ini ialah Style++ (Ala-Mutka et. al., 2004).
Semakan Style++ tertumpu kepada penggunaan komen, baris kosong, penerangan mengenai
program, penamaan pembolehubah, struktur program, skop pembolehubah, layout program
dan penggunaan pemalar.
2.4.2 Pengesanan Ralat Aturcara (Sintaksis atau Semantik)
Ralat sintaksis atau semantik boleh dikesan sebelum aturcara dihantar untuk proses
seterusnya. Kebiasaannya proses ini mampu dilakukan dengan berkesan menggunakan
pengkompil. Pengkompil masa kini sangat maju dan mampu menunjukkan di mana ralat
berlaku. Terdapat juga pengkompil yang mampu memberikan cadangan untuk
membetulkan ralat sintaksis atau semantik yang terdapat dalam aturcara.
Daripada segi semantik pula, terdapat PATP yang mampu mengesan struktur
aturcara yang mencurigakan seperti pengesan gelung yang tidak berkesudahan, dalam
Ceilidh (Foxley et. al., 1996).
Aplikasi seperti CAP (Code Analyzer for Pascal) dibangunkan oleh Schorsch (1995)
mampu mengesan ralat sintaksis, ralat logik dan juga ralat daripada segi gaya (style error)
untuk Pascal. Apa yang menarik dalam aplikasi ini ialah kedudukan ralat dan apa kesalahan
yang berlaku dinyatakan dengan terperinci. Terdapat juga cadangan pembetulan yang
sangat komprehensif untuk membantu pelajar. Aplikasi ini mempunyai objektif yang sangat
14
besar iaitu ia cuba menggantikan pengajar atau tutor dalam usaha pelajar membuat latihan
aturcara.
2.4.3 Penilaian Metrik Perisian
Banyak sistem PATP telah dibangunkan untuk mengendali skop ini, Ceilidh, BOSS (Joy
dan Luck, 1998), Style++ (Ala-Mutka et. al., 2004), CAP dan banyak lagi. Terdapat
beberapa metrik perisian yang diimplementasikan dalam sistem mereka. Antaranya ialah
McCabe (1976) yang mencadangkan kekompleksan cyclomatic yang digunakan dalam
Assyst (Jackson dan Usher, 1997), ELP (Truong et. al., 2004) dan Verilog Logiscope
WinViewer (Mengel dan Yerramilli, 1999).
Beberapa metrik perisian yang digunakan dalam PATP untuk menyukat
kekompleksan aturcara disenaraikan dalam Jadual 2.1.
Jadual 2.1 Beberapa contoh metrik perisian
Metrik perisian Kegunaan Diperkenalkan oleh
1 Cyclomatic Complexity
menyukat jumlah logik keputusan dalam modul aturcara. Cyclometic Complexity ditentukan dengan e – n +2, di mana e adalah bilangan pinggir dan n adalah bilangan nod dalam graf aliran kawalan. Metrik ini dinilai untuk setiap kelakuan dalam kelas.
n1 – bilangan operator unikn2 – bilangan operan unikN1 – jumlah bilangan kehadiran operatorN2 - jumlah bilangan kehadiran operan
Daripada empat pengukuran tersebut, lahir metrik pengukuran berikut;n = n1 + n2 – vocabulary programN = N1 + N2 – panjang programV = N.log2n – isipadu programV* = (2+ nJ)lo.g2(2+ nl) – isipadu potensi (potential volume)L = V*/V – taraf algoritmaE = V/L – kesusahan aturcara
Halstead (1977)
bersambung ...
15
... sambungan
3 NOC (Number of Classes)
Menyukat bilangan kelas dalam aturcara Tegarden et. al. (1995).
4 SIZE2 (Number of properties)
Menyukat bilangan sifat (properties) Li and Henry (1993)
5 AC (Attributes Complexity)
OpCom (Operation Complexity of Classes)
Mengira nilai semua atribut dalam kelas berdasarkan nilai tertentu.
Menilai semua nilai kekompleksan untuk setiap kelakuan dalam kelas.
Chen dan Lu (1993)
2.4.4 Penilaian Struktur Aturcara
Melalui kaedah ini, kod aturcara yang dihantar akan ditentukan sama ada struktur program
menepati kehendak atau tidak. Cara yang biasa dilakukan adalah membandingkan kod
aturcara pelajar dengan model penyelesaian yang disediakan oleh pengajar.
Dalam kajian Truong et. al. (2004), kod aturcara pelajar diterjemahkan kepada
pohon sintaksis abstrak (Abstract Syntax Tree, AST) dalam bentuk perwakilan XML
(Badros, 2000). Struktur abstrak yang telah terhasil akan dibandingkan dengan struktur
abstrak model melalui kaedah analisis persamaan struktur (structural similarity analysis).
Daripada kaedah ini, aturcara pelajar akan ditentukan sama ada ia sepadan dengan abstrak
model atau tidak.
2.4.5 Penilaian Bukan-Struktur
Norshuhani et. al. (2006) pula mencadangkan kaedah analisis kesamaan bukan-struktur
(non-structural similarity analysis) untuk mencari persamaan antara aturcara pelajar dengan
aturcara model daripada pengajar. Kaedah ini mampu dilakukan dengan bantuan algoritma
pemetaan teks (text mapping) dan juga algoritma pencarian teks (text searching).
Memandangkan penilaian melalui perbandingan struktur atau bukan-struktur
aturcara memerlukan pengajar menyediakan model penyelesaian (satu atau lebih model
diperlukan untuk pemadanan yang lebih berkesan), pelbagai kemungkinan penyelesaian
perlu disediakan. Adalah mustahil untuk menyediakan kesemua kemungkinan penyelesaian
16
untuk masalah yang lebih rumit. Jadi dua kaedah ini hanya sesuai untuk permasalahan
aturcara untuk peringkat permulaan sahaja, (Thruong et. al., 2004).
2.4.6 Penilaian Dengan Kata Kunci
Penilaian menerusi kaedah ini memerlukan sistem untuk mencari pernyataan dengan kata
kunci tertentu. Saikkonen (2001) telah membangunkan Scheme-robo untuk menilai latihan
aturcara yang ditulis dalam satu pengaturcaraan fungsian, Scheme. Terdapat latihan tertentu
yang tidak membenarkan pelajar menggunakan beberapa kata kunci dalam jawapan mereka.
2.4.7 Pengesanan Plagiarisme
Pengesan plagiarisme adalah aplikasi yang mampu untuk menentukan dua atau lebih kod
aturcara ditiru daripada satu aturcara lain. Plague adalah antara aplikasi yang awal yang
mampu mengesan plagiarisme yang berlaku pada kod aturcara menggunakan perbandingan
token menggunakan satu varian daripada kaedah Longest Common Subsequence (LCS). Ia
dibangunkan oleh Whale (1986) untuk menyokong bahasa Pascal, Prolog, Bourne Shell dan
Llama. Namun aplikasi ini dianggap tidak popular kerana terdapat kerumitan untuk
diimplementasi kepada bahasa pengaturcaraan yang lain (Granville 2002).
YAP (Yet Another Plague) adalah satu aplikasi pemadanan kod aturcara untuk
mengesan plagiat (Wise, 1994) yang menggunakan kaedah pemadanan metrik struktur
(Donaldson et. al., 1981). Dalam versi yang terkini, YAP3 menggunakan algoritma
pemadanan teks Running-Karp-Rabin Greedy-String-Tiling (RKR-GST). Algoritma ini
mampu untuk melakukan pemadanan teks dengan lebih berkesan dan cepat.
JPlag boleh diperoleh melalui halaman web http://wwwipd.ira.uka.de/jplag/
(Prechelt et. al., 2000). Aplikasi ini menggunakan Java sebagai bahasa pembangunan. Ia
mampu mengesan plagiarisme untuk bahasa Java, C, C++ dan Scheme. Pada dasarnya ia
menggunakan algoritma RKR-GST yang diasaskan oleh Wise (1994).
2.4.8 Penilaian Diagram
Terdapat juga beberapa PATP yang mampu melakukan fungsi-fungsi khas yang lain seperti
menyemak rajah carta alir, reka bentuk berasaskan objek dan juga menjalankan simulasi
17
untuk rajah litar elektronik (Symeonidis, 1998). Semua peralatan penyemakan tersebut
terdapat di dalam sistem CourseMaster dan ia dilakukan secara analisis statik. Penyemak
carta alir tersebut akan menterjemah carta alir pelajar kepada bahasa BASIC sebelum
dihantar kepada peralatan penyemakan dinamik untuk dinilai. Penyemak reka bentuk objek
akan menilai reka bentuk yang dihasilkan pelajar. Pengujian akan menentukan
kesempurnaan, kebetulsalahan, ketepatan dan hubungan antara objek yang betul. Litar logik
elektronik juga boleh direka dan dihantar kepada sistem penyemak, CircuitSim. CircuitSim
akan melakukan simulasi untuk menentukan penggunaan komponen elektonik yang betul,
pendawaian yang sempurna dan juga pengaliran arus yang tepat. Sebarang penggunaan
komponen yang tidak diperlukan dan juga pendawaian yang tidak sempurna akan
menyebabkan markah dikurangkan.
2.5 KELEBIHAN DAN KELEMAHAN PENDEKATAN ANALISIS STATIK
Bahagian 2.5.1 merupakan ringkasan kelebihan dan bahagian 2.5.2 merupakan ringkasan
kelemahan dalam pendekatan analisis statistik.
2.5.1 Kelebihan
a) Implementasi yang lebih mudah dan murah (Truong et. al. , 2004) kerana tidak
memerlukan pengkompil dan pelaksana aturcara.
b) Kurang membebankan pelayan (Truong et. al., 2004) dengan ketiadaan
pengkompil dan pelaksana.
c) Boleh dijalankan walaupun terdapat ralat dalam aturcara (Rohaida, 2003).
d) Tidak memerlukan input ujian (Rohaida, 2003).
e) Memberikan lebih fleksibiliti kepada jawapan pelajar (Norshuhaini et. al., 2006).
2.5.2 Kelemahan
a) Perlu menyediakan banyak penyelesaian yang mungkin, untuk perbandingan
struktur atau bukan-struktur (Truong et. al., 2004).
b) Tidak dapat menentukan fungsi dan efisien program (Ala-Mutka, 2005).
18
2.6 KAJIAN-KAJIAN LEPAS BERKAITAN PENGUJIAN MENGGUNAKAN
PENDEKATAN STATIK
Terdapat banyak kajian-kajian yang lepas yang menggunakan gabungan pendekatan
dinamik dan statik untuk membina sistem PATP. Hanya segelintir yang bergantung kepada
pendekatan statik semata-mata. Perbincangan hanya berkisar tentang bahagian penyemakan
dengan menggunakan pendekatan statik, walaupun pendekatan dinamik digunakan bersama
dalam sistem PATP tersebut. Penyelidikan-penyelidikan lepas yang dipilih ialah
Ceilidh/CourseMaster, ELP dan WAGS.
2.6.1 Ceilidh/CourseMaster
Sistem ini pada asalnya dibangunkan oleh Universiti Nottingham sejak 1988 untuk
menyokong bahasa C (Foxley et. al., 1996). Sekarang sistem ini dinamakan CourseMaster
dan diubahsuai supaya mampu menyokong penulisan aturcara melalui pendekatan
berasaskan objek. Sistem ini telah mengalami evolusi dengan penyertaan beberapa
universiti yang lain sehingga mampu menyokong bahasa C++, SQL, Pascal, SML, Fortran
dan lain-lain lagi.
Sistem ini menggunakan kedua-dua pendekatan, statik dan dinamik. Apa yang
dilakukan oleh sistem ini untuk penilaian statik ialah;
a) penilaian susunan(layout) dan struktur aturcara,
b) pengesanan indentasi,
c) pemilihan pengecam,
d) mudah dibaca,
e) metrik kompleksiti,
f) penggunaan denotasi,
g) amaran keserabutan (penggunaan goto yang merumitkan aturcara)
h) pengesan struktur yang mencurigakan (untuk mengelakkan gelung yang tak
berkesudahan – infinite loop).
2.6.2 ELP
Truong et. al., (2004), telah membangunkan satu sistem ELP (Environment to Learning
Programming) untuk menyokong bahasa pengaturcaraan Java can C#. Beliau menggunakan
19
pendekatan analisis dinamik dan juga statik. Untuk bahagian analisis statik, perkara-perkara
berikut telah diambil kira dalam pembangunan sistem tersebut. Perkara-perkara tersebut
ialah analisis metrik kejuruteraan perisian dan analisis kesamaan struktur.
Dalam analisis metrik kejuruteraan perisian, perkara-perkara yang diambil kira oleh
penulis adalah seperti dalam Jadual 2.2.
Jadual 2.2 Penilaian metrik kejuruteraan perisian dalam ELP
Item KeteranganStatistik program Mengira bilangan pembolehubah, kenyataan dan
ungkapan.Pembolehubah bayangan Menentukan kehadiran pembolehubah yang sama
diisytihar dalam skop kelas dan skop metod.Kerumitan cyclomatic Mengira bilangan keputusan logik dalam aturcaraParameter tidak digunakan Memeriksa parameter yang tidak digunakan dalam
metod.Ungkapan logik berganda Mengesan ungkapan logik berganda seperti
“X==true”Pembolehubah yang tidak digunakan
Mengesan pembolehubah yang diisytihar tetapi tidak digunakan.
Nombor ajaib Pastikan penyelesaian pelajar tidak terlalu bergantung pada nilai literal.
Had capaian Menentukan pembolehubah dan metod menggunakan had capaian yang betul.
Pernyataan switch Memastikan pernyataan switch yang digunakan mengandungi default, dan setiap case diakhiri dengan break.
Bilangan aksara dalam baris Mengira bilangan aksara dalam satu baris (maksimum 80).
Tiada tab Memastikan ruang kosong (space) digunakan menggantikan tab sebagai indentasi.
Dalam proses analisis kesamaan struktur, beliau menggunakan kaedah perbandingan
abstrak kod pseudo. Kod pseudo abstrak adalah perwakilan kepada struktur asas algoritma
kepada aturcara. Aturcara pelajar yang dihantar melalui sistem tersebut akan diterjemahkan
kepada kod pseudo abstrak dan dibandingkan dengan skema kod pseudo abstrak yang
dibekalkan oleh pengajar. Beliau menegaskan bahawa kaedah ini hanya sesuai untuk
menganalisis aturcara mudah bagi peringkat pengenalan kepada bahasa pengaturcaraan
yang dipelajari. Kaedah ini tidak sesuai untuk digunakan kepada pengaturcaraan yang
melibatkan penulisan aturcara yang panjang. Ini kerana masalah yang lebih kompleks akan
memungkinkan beberapa kaedah penyelesaian yang berbeza dihantar oleh pelajar. Jadi
struktur aturcara yang lebih daripada satu diperlukan sebagai skema penyelesaian. Ada
20
kemungkinan terdapat banyak kaedah penyelesaian yang mungkin tidak terfikir oleh
pengajar dalam menyediakan skema. Ini akan merumitkan proses perbandingan kod pseudo
(Rich dan Wills, 1990).
Kaedah yang diimplementasikan dalam sistem ini adalah penjanaan AST (Abstract
Syntax Tree) yang diwakilkan dalam format XML, seperti contoh dalam Rajah 2.1. Kaedah
ini dicadangkan oleh Parr (2006) dalam perisian yang dibangunkannya, ANTLR (boleh
diperoleh dari http://antlr.org/). AST aturcara pelajar akan dibandingkan dengan AST yang
dibekalkan oleh pengajar. Dengan membandingkan kedua-dua AST, sistem ini dapat
mengesan sekiranya aturcara pelajar ada kesamaan dengan jawapan pengajar atau pun tidak.
Tetapi sistem ini hanya dapat memberi salah satu daripada dua keputusan, struktur yang
do{ printf("Staff no : %d\n",i); printf("Key in the salary\n"); scanf("%f",&salary); if(salary<=1000){ tax=salary*0.04; } else{ tax=salary*0.08; }printf("Your tax is : RM.2%f\n",tax); i++; }while (i<=5);}
START declare v1 as integer v1=1 declare v2 as float declare v3 as float DO display value of v1 display "text" get user data for v2 IF v2 < 1000 calculate v3 = v2*0.04 ELSE calculate v3 = v2*0.08 ENDIF display the value of v2 display the value of v3 i=+1 WHILE i < 5END
Penjana Kodpseudo
32
… sambungan
IfStatement → if ( Expression ) Block { IF Expression Block }
Berdasarkan contoh dalam Jadual 3.3, berikut adalah pengiraan kesamaan pengisytiharan
pembolehubah.
= Nb x 5
Nt
= (1/2) x 5 = 2.5
36
b. Perbandingan Proses
Seterusnya adalah perbandingan antara kod pseudo pernyataan bukan pengisytiharan
pembolehubah yang terdapat dalam kod pseudo pelajar dengan kod pseudo skema.
Bahagian ini dibandingkan menggunakan salah satu fungsi perbandingan rentetan yang
terdapat dalam pustaka PHP, iaitu similar_text (php.net, 2007). Sila rujuk 3.2.6 (c) untuk
penerangan lanjut tentang fungsi similar_text.
Peratus persamaan = peratus persamaan daripada similar_text X 95/100
Setiap proses yang berlaku dalam kelas pembanding kod pseudo ini akan berlaku
berulang-kali untuk perbandingan kod pseudo pelajar dengan kod pseudo skema yang
berikutnya, sehingga kesemua kod pseudo skema dibandingkan. Ringkasan dalam bentuk
visual mengenai proses pembandingan tersebut terdapat dalam Rajah 3.5.
Rajah 3.8 Proses pembandingan kod pseudo pelajar dengan kod skema
37
Kod pseudo pelajar
%kesamaan tertinggi
Kod pseudo
skema 1
Kod pseudo
skema 2
Kod pseudo skema n
% kesamaan 1
% kesamaan 2
% kesamaan n
Perbandingan Kod Pseudo
c. Fungsi similar_text
Fungsi similar_text adalah antara fungsi piawai yang terdapat dalam pustaka PHP. Ia telah
dibangunkan oleh salah seorang penyumbang untuk bahasa PHP menggunakan kaedah
perbandingan rentetan aksara demi aksara (php.net, 2007). Fungsi ini menerima dua
rentetan dan mengembalikan peratus aksara yang sama berdasarkan algoritma yang
dicadangakan oleh Oliver (1993). Kompleksiti algortima ini adalah O(N3) di mana N ialah
saiz rentetan yang terpanjang.
Terdapat juga satu fungsi lain dalam pustaka PHP yang mampu mendapatkan
persamaan antara dua rentetan, iaitu levenshtein. Fungsi ini mengira bilangan aksara yang
minimum untuk ditukar, dimasukkan atau dibuang untuk menukarkan rentetan pertam
kepada rentetan kedua (php.net, 2008), berdasarkan algoritma yang dicadangkan oleh
Levenshtein (1966). Kompleksiti algoritma fungsi ini ialah O(M*N), yang mana lebih baik
daripada fungsi similar_text. Walaubagaimanapun, fungsi ini hanya mampu memproses
rentetan yang saiznya adalah tidak kurang daripada 255 aksara (php.net, 2008). Sekiranya
salah satu rentetan bersaiz lebih daripada 255 aksara, fungsi akan mengembalikan -1.
Berdasarkan kekangan ini, maka penulis memilih untuk menggunakan similar_text. Ini
kerana besar kemungkinan kod pseudo yang dihasilkan daripada kod sumber nanti akan
bersaiz lebih besar daripada 255 aksara.
Jadual 3.4 Perbandingan kualitatif antara fungsi similar_text dengan levenshtein yang
terdapat dalam pustaka PHP
Fungsi / kriteria similar_text levenshteinKompleksiti O(N3) O(M*N)Had panjang rentetan tiada 255
3.2.7 Kelas Antara muka Output
Kelas ini menyediakan antara muka untuk memaparkan senarai peratus persamaan yang
diperoleh daripada perbandingan aturcara pelajar dengan setiap satu aturcara skema. Nilai-
nilai tersebut diperoleh daripada kelas PembandingKodPseudo. Antara muka juga akan
memaparkan nilai peratus yang tertinggi.
38
3.3 ALGORITMA-ALGORITMA PENTING
Berikut adalah algoritma yang terlibat dalam pelaksanaan aplikasi ini. Penulis hanya akan
memfokus kepada tiga proses penting; penganalisa leksikal, penjanaan kod pseudo dan
perbandingan kod pseudo.
Kod pseudo dalam Rajah 3.6 adalah ringkasan proses yang berlaku dalam
perbandingan kod sumber pelajar dengan kod sumber instruktor.
Dapatkan jawapan pelajarTukar kod aturcara pelajar kepada senarai token menggunakan Penganalisis LeksikalTukar senarai token aturcara pelajar kepada kod pseudo menggunakan ... Penjana KodpseudoSelagi masih ada skema jawapan
Dapatkan salah satu skema jawapanTukar kod aturcara skema kepada kod pseudo Bandingkan kod pseudo pelajar dengan kod pseudo skema jawapan ...
Menggunakan Pembanding KodpseudoSimpan peratus persamaanProses skema jawapan berikutnya
Dapatkan peratus persamaan yang tertinggi
Rajah 3.9 Kod pseudo bagi ringkasan proses
3.3.1 Algoritma Penganalisis Leksikal
Bagi setiap perkataan yang disendengkan dalam kod pseudo Rajah 3.10-3.29, sila rujuk
kepada sintak leksikal (Rajah 3.4) untuk penjelasan lanjut.
Fungsi PENGANALISISLEKSIKALDapatkan rentetan kodSumberDapatkan panjang rentetan kodSumber, bilanganAksaraKodSumber
Set pembilang sebagai 0Selagi pembilang < bilanganAksaraKodSumber
Dapatkan satu aksara dari kodSumber, sebagai aksaraSemasaJika aksara tak nampak, atau WhiteSpace
Abaikan aksaraSemasaProses aksara seterusnya
Jika aksaraSemasa adalah Letter, mungkin Variable atau KeywordPergi ke fungsi Katakunci
bersambung ......sambungan
39
Jika aksaraSemasa adalah DigitPergi ke fungsi Nombor
Jika aksaraSemasa adalah “ ‘ ”Pergi ke fungsi NilaiLiteralAksara
Jika aksaraSemasa adalah “ “ ”Pergi ke fungsi NilaiLiteralRentetan
Jika aksaraSemasa adalah “/”Pergi ke fungsi ProsesOperatorBahagi
Jika aksaraSemasa adalah “*”Pergi ke fungsi ProsesOperatorDarab
Jika aksaraSemasa adalah “%”Pergi ke fungsi ProsesOperatorModulo
Jika aksaraSemasa adalah “+”Pergi ke fungsi ProsesOperatorTambah
Jika aksaraSemasa adalah “-”Pergi ke fungsi ProsesOperatorTolak
Jika aksaraSemasa adalah “=”Pergi ke fungsi ProsesOperatorSama
Jika aksaraSemasa adalah “>”Pergi ke fungsi ProsesOperatorBesar
Jika aksaraSemasa adalah “<”Pergi ke fungsi ProsesOperatorKecil
Jika aksaraSemasa adalah “&”Pergi ke fungsi ProsesOperatorDan
Jika aksaraSemasa adalah “|”Pergi ke fungsi ProsesOperatorAtau
Jika aksaraSemasa adalah “!”Pergi ke fungsi ProsesOperatorTak
Jika aksaraSemasa adalah Separator Tambah aksaraSemasa kepada senaraiToken, kategori Separator
Jika aksaraSemasa adalah DigitPergi ke fungsi Number
Jika aksaraSemasa adalah “\n”Tambah aksaraSemasa kepada senaraiToken, kategori NewLine
Selain daripada ituToken tidak dapat dikenalpastiTambah token kepada senaraiToken, kategori Unknown
Dapatkan aksara seterusnyaTamat ulangan (pembilang < bilanganAksaraKodSumber)
Tamat Fungsi PENGANALISISLEKSIKAL
Rajah 3.10 Kod pseudo bagi fungsi PENGANALISISLEKSIKAL
Fungsi KatakunciTambah aksaraSemasa kepada tokenSementara
40
Selagi aksara seterusnya Digit atau “_”Proses aksara seterusnyaTambah aksaraSemasa kepada tokenSementara
Jika semua aksara dalam tokenSementara adalah hurufUji tokenSementara dengan senarai KeywordJika tokenSementara adalah Keyword
Tambah tokenSementara kepada senaraiTokenSelain daripada itu, tokenSementara adalah Variable
Pergi ke fungsi PembolehubahTamat Fungsi Katakunci
Rajah 3.11 Kod pseudo bagi fungsi Katakunci
Fungsi PembolehubahHantar tokenSementara kepada fungsi PenamaanSemulaPembolehubahTambah namaPembolehubah kepada senaraiToken, kategori Variable
Tamat Fungsi Pembolehubah
Rajah 3.12 Kod pseudo bagi fungsi Pembolehubah
Fungsi PenamaanSemulaPembolehubah (pembolehubahSemasa)Jika tiada senarai dalam JadualPembolehubah
Set namaBaruPembolehubah sebagai “v1”Simpan pembolehubahSemasa dan namaBaruPembolehubah ...
dalam JadualPembolehubahKembalikan namaBaruPembolehubah
Jika ada senarai dalam JadualPembolehubahSemak pembolehubahSemasa dengan JadualPembolehubahJika pembolehubahSemasa telah wujud dalam JadualPembolehubah
Dapatkan namaBaruPembolehubah dari JadualPembolehubahKembalikan namaBaruPembolehubah
Jika pembolehubahSemasa tidak wujud dalam JadualPembolehubahKira bilangan dalam senarai JadualPembolehubah, sebagi bilSet namaBaruPembolehubah sebagai “v”bilSimpan pembolehubahSemasa dan namaBaruPembolehubah ...
dalam JadualPembolehubahKembalikan namaBaruPembolehubah
Tamat fungsi PenamaanSemulaPembolehubah
Rajah 3.13 Kod pseudo bagi fungsi PenamaanSemulaPembolehubah
Fungsi NomboraksaraSemasa adalah Digit
41
Set tokenSementara sebagai aksaraSemasaSelagi aksaraSemasa ialah Digit atau “.”
Tambah aksaraSemasa kepada tokenSementaraJika aksaraSemasa adalah “.”
Nombor bukan integerDapatkan aksara seterusnya
Jika nombor bukan integerTambah tokenSementara kepada senaraiToken, kategori Real
Selain daripada ituTambah tokenSementara kepada senaraiToken, kategori Integer
Tamat Fungsi Nombor
Rajah 3.14 Kod pseudo bagi fungsi Nombor
Fungsi NilaiLiteralAksaraNilai aksaraSemasa adalah “ ‘ ”Set tokenSementara sebagai aksaraSemasaDapatkan aksara seterusnyaSelagi aksaraSemasa bukan “ ‘ ”
Tambah aksaraSemasa kepada tokenSementaraDapatkan aksara seterusnya
Tambah tokenSementara kepada senaraiToken, kategori CharacterTamat Fungsi NilaiLiteralAksara
Rajah 3.15 Kod pseudo bagi fungsi NilaiLiteralAksara
Fungsi NilaiLiteralRentetanNilai aksaraSemasa adalah “ “ ”Set tokenSementara sebagai aksaraSemasaDapatkan aksara seterusnyaSelagi aksaraSemasa bukan “ “ ”
Tambah aksaraSemasa kepada tokenSementaraDapatkan aksara seterusnya
Tambah tokenSementara kepada senaraiToken, kategori StringTamat Fungsi NilaiLiteralRentetan
Rajah 3.16 Kod pseudo bagi fungsi NilaiLiteralRentetan
Fungsi ProsesOperatorBahagiJika aksara seterusnya adalah “/”
42
Pergi kepada fungsi KomenBarisJika aksara seterusnya adalah “*”
Pergi kepada fungsi KomenBlokJika aksara seterusnya adalah “=”
Dapatkan aksara seterusnya sebagai aksaraSemasa Tambah aksaraSemasa kepada tokenSementara Nilai tokenSementara ialah “/=” Tambah tokenSementara kepada senaraiToken, kategori BinaryOperatorSelain daripada itu
tokenSemasa adalah “/”, Tambah tokenSementara kepada senaraiToken, kategori BinaryOperator
Tamat Fungsi ProsesOperatorBahagi
Rajah 3.17 Kod pseudo bagi fungsi ProsesOperatorBahagi
Fungsi ProsesOperatorDarabSet tokenSementara sebagai “*”Jika aksara seterusnya adalah “=”
Dapatkan aksara seterusnya sebagai aksaraSemasa Tambah aksaraSemasa kepada tokenSementara Nilai tokenSementara ialah “*=” Tambah tokenSementara kepada senaraiToken, kategori AssignOperatorX
Dapatkan aksara seterusnyaSelain daripada itu
Nilai token sementara adalah “*” Tambah tokenSementara kepada senaraiToken, kategori ArithmeticOperatorTamat Fungsi ProsesOperatorDarab
Rajah 3.18 Kod pseudo bagi fungsi ProsesOperatorDarab
Fungsi ProsesOperatorModuloSet tokenSementara sebagai “%”Jika aksara seterusnya adalah “=”
Dapatkan aksara seterusnya sebagai aksaraSemasa Tambah aksaraSemasa kepada tokenSementara Nilai tokenSementara ialah “%=” Tambah tokenSementara kepada senaraiToken, kategori AssignOperatorX
Dapatkan aksara seterusnyaSelain daripada itu
Nilai token sementara adalah “%” Tambah tokenSementara kepada senaraiToken, kategori ArithmeticOperatorTamat Fungsi ProsesOperatorModulo
Rajah 3.19 Kod pseudo bagi fungsi ProsesOperatorModulo
43
Fungsi ProsesOperatorTambah Set tokenSementara sebagai “+”
Jika aksara seterusnya adalah “=”Dapatkan aksara seterusnya sebagai aksaraSemasaTambah aksaraSemasa kepada tokenSementaraNilai tokenSementara ialah “+=”Tambah tokenSementara kepada senaraiToken, kategori AssignOperatorX
Jika aksara seterusnya adalah “+”Dapatkan aksara seterusnya sebagai aksaraSemasaTambah aksaraSemasa kepada tokenSementaraNilai tokenSementara adalah “++”Tambah tokenSementara kepada senaraiToken, kategori
CompoundOperatorSelain daripada itu
Nilai token sementara adalah “+” Tambah tokenSementara kepada senaraiToken, kategori ArithmeticOperatorTamat Fungsi ProsesOperatorTambah
Rajah 3.20 Kod pseudo bagi fungsi ProsesOperatorTambah
Fungsi ProsesOperatorTolak Set tokenSementara sebagai “-”
Jika aksara seterusnya adalah “=”Dapatkan aksara seterusnya sebagai aksaraSemasaTambah aksaraSemasa kepada tokenSementaraNilai tokenSementara ialah “-=”Tambah tokenSementara kepada senaraiToken, …
kategori ArithmeticOperatorX Jika aksara seterusnya adalah “-”
Dapatkan aksara seterusnya sebagai aksaraSemasaTambah aksaraSemasa kepada tokenSementaraNilai tokenSementara adalah “--”Tambah tokenSementara kepada senaraiToken, …
kategori CompoundOperatorSelain daripada itu
Nilai tokenSementara adalah “-” Tambah tokenSementara kepada senaraiToken, …
kategori ArithmeticOperatorTamat Fungsi ProsesOperatorTolak
Rajah 3.21 Kod pseudo bagi fungsi ProsesOperatorTambah
Fungsi KomenBarisSelagi aksaraSemasa bukan “\n”, iaitu baris baru
Dapatkan aksara seterusnyaTiada token dijana daripada fungsi iniSemua aksara yang diproses akan diabaikan
Tamat Fungsi KomenBaris
Rajah 3.22 Kod pseudo bagi fungsi KomenBaris
44
Fungsi KomenBlokSelagi aksaraSemasa bukan “*” dan diikuti oleh “\”
Dapatkan aksara seterusnyaTiada token dijana daripada fungsi iniSemua aksara yang diproses akan diabaikan
Tamat Fungsi KomenBlok
Rajah 3.23 Kod pseudo bagi fungsi KomenBlok
Fungsi ProsesOperatorSama Set tokenSementara sebagai “=”
Dapatkan token seterusnyaJika aksaraSemasa adalah “=”
Tambah aksaraSemasa kepada tokenSementaraNilai tokenSementara adalah “==”Tambah tokenSementara kepada senaraiToken, …
kategori RelationalOperatorSelain daripada itu
Nilai tokenSementara adalah “=” Tambah tokenSementara kepada senaraiToken, …
kategori AssignOperatorTamat Fungsi ProsesOperatorSama
Rajah 3.24 Kod pseudo bagi fungsi ProsesOperatorSama
Fungsi ProsesOperatorBesar Set tokenSementara sebagai “>”
Dapatkan token seterusnyaJika aksaraSemasa adalah “=”
Tambah aksaraSemasa kepada tokenSementaraNilai tokenSementara adalah “>=”Tambah tokenSementara kepada senaraiToken, …
kategori RelationalOperatorSelain daripada itu
Nilai tokenSementara adalah “>” Tambah tokenSementara kepada senaraiToken, …
kategori RelationalOperatorTamat Fungsi ProsesOperatorBesar
Rajah 3.25 Kod pseudo bagi fungsi ProsesOperatorBesar
45
Fungsi ProsesOperatorKecil Set tokenSementara sebagai “<”
Dapatkan token seterusnyaJika aksaraSemasa adalah “=”
Tambah aksaraSemasa kepada tokenSementaraNilai tokenSementara adalah “<=”Tambah tokenSementara kepada senaraiToken, …
kategori RelationalOperatorSelain daripada itu
Nilai tokenSementara adalah “<” Tambah tokenSementara kepada senaraiToken, …
kategori RelationalOperatorTamat Fungsi ProsesOperatorKecil
Rajah 3.26 Kod pseudo bagi fungsi ProsesOperatorKecil
Fungsi ProsesOperatorTak Set tokenSementara sebagai “!”
Dapatkan token seterusnyaJika aksaraSemasa adalah “=”
Tambah aksaraSemasa kepada tokenSementaraNilai tokenSementara adalah “<=”Tambah tokenSementara kepada senaraiToken, …
kategori RelationalOperatorSelain daripada itu
Nilai tokenSementara adalah “!” Tambah tokenSementara kepada senaraiToken, …
kategori UnaryOperatorTamat Fungsi ProsesOperatorTak
Rajah 3.27 Kod pseudo bagi fungsi ProsesOperatorTak
Fungsi ProsesOperatorDan Set tokenSementara sebagai “&”
Dapatkan token seterusnyaJika aksaraSemasa adalah “&”
Tambah aksaraSemasa kepada tokenSementaraNilai tokenSementara adalah “&&”Tambah tokenSementara kepada senaraiToken, …
kategori LogicalOperatorSelain daripada itu
Nilai tokenSementara adalah “&” Tambah tokenSementara kepada senaraiToken, …
kategori AddressOperatorTamat Fungsi ProsesOperatorDan
Rajah 3.28 Kod pseudo bagi fungsi ProsesOperatorDan
46
Fungsi ProsesOperatorAtau Set tokenSementara sebagai “|”
Dapatkan token seterusnyaJika aksaraSemasa adalah “|”
Tambah aksaraSemasa kepada tokenSementaraNilai tokenSementara adalah “||”Tambah tokenSementara kepada senaraiToken, …
kategori LogicalOperatorSelain daripada itu
Nilai tokenSementara adalah “|” Tambah tokenSementara kepada senaraiToken, …
kategori UnknownTokenTamat Fungsi ProsesOperatorAtau
Rajah 3.29 Kod pseudo bagi fungsi ProsesOperatorAtau
3.3.2 Algoritma Penjanaan Kod Pseudo
Bagi setiap perkataan yang disendengkan dalam kod pseudo Rajah 3.30-3.46, sila rujuk
kepada spesifikasi tatabahasa (Rajah 3.7) untuk penjelasan lanjut.
Fungsi PENJANAKODPSEUDOSelagi terdapat token dalam senarai
Jika jumpa ‘main’ dalam senarai tokenBuang kepala fungsi ‘main’ beserta simbol-simbol ‘(’, ‘)’ dan ‘{’
Set “START” dalam senaraiKodPesudoSet blokSemasa sebagai “main”
Proses token seterusnya
Selain itu, jika token adalah DataType, sama ada int, char,float atau doublePergi ke fungsi DeclarationStatement
Selain itu, jika token adalah pembolehubahDapatkan token seterusnyaJika token adalah ‘=’
Pergi ke fungsi AssignmentOperationJika token adalah AssignOperatorX
Pergi ke fungsi AssignmentOperationXSelain itu, jika token adalah CompoundOperator
Pergi ke fungsi CompoundExpressionSelain itu, jika token adalah “printf”
Pergi ke fungsi PrintfStatementSelain itu, jika token adalah “scanf”
Pergi ke fungsi ScanfStatementSelain itu, jika token adalah “else”
Jika token seterusnya adalah “if”Pergi ke fungsi IfElseStatement
bersambung ...
47
... sambungan
Selain ituPergi ke fungsi ElseStatement
Selain itu, jika token adalah “switch”Pergi ke fungsi SwitchStatement
Selain itu, jika token adalah “case”Pergi ke fungsi CaseStatement
Selain itu, jika token adalah “default”Pergi ke fungsi DefaultStatement
Selain itu, jika token adalah “do”Pergi ke fungsi DoWhileStatement
Selain itu, jika token adalah “while”Pergi ke fungsi WhileStatement
Selain itu, jika token adalah “for”Pergi ke fungsi ForStatement
Selain itu, jika token adalah CompoundOperatorPergi ke fungsi CompoundExpression
Selain itu, jika token adalah “}”Jika blokSemasa = “main”
Tambah “END”dalam senaraiKodPesudoKeluarkan “main” daripada timbunan blokSemasa
Jika blokSemasa = “switch”Tambah “ENDIF”dalam senaraiKodPesudoKeluarkan “switch” daripada timbunan blokSemasa
Jika blokSemasa = “if”Tambah “ENDIF”dalam senaraiKodPesudoKeluarkan “if” daripada timbunan blokSemasa
Selain daripada itu,Token tidak di ketahuiPaparkan mesej kod sumber ada ralat
Dapatkan token seterusnyaSenarai token tamat
Tamat Fungsi PENJANAKODPSEUDO
Rajah 3.30 Kod pseudo bagi fungsi PENJANAKODPSEUDO
Fungsi DeclarationStatementSet jenisDataSemasaPergi ke token seterusnyaSelagi token bukan “;”
Dapatkan nama pembolehubah pada tokenTambah “DECLARE Variable AS jenisDataSemasa” ...
... kepada senaraiKodPesudoDapatkan token seterusnyaJika token adalah “=”
Pergi ke fungsi DirectAssignmentDapatkan token seterusnya
bersambung ...
48
... sambungan
Jika token adalah “;”Tamat Fungsi DeclarationStatement
Selain itucontinue
Jika token adalah “,”Dapatkan token seterusnya, abaikan token “,” continue
Tamat gelungTamat Fungsi DeclarationStatement
Rajah 3.31 Kod pseudo bagi fungsi DeclarationStatement
Fungsi AssignmentOperationDapatkan token seterusnyaJika tokenSemasa adalah nilai Literal
Jika fungsi dipanggil dari ForStatementTamat Fungsi AssignmentOperation
Tambah “Variable = Literal” kepada senaraiKodPesudoSelain itu, jika tokenSemasa adalah Variable
Set “Variable = “ ke dalam kodpseudoAssignDapatkan token seterusnyaSelagi tokenSemasa bukan “;” , atau “)” yang diikuti oleh “{”
Tambah tokenSemasa kepada kodpseudoAssignProses token seterusnya
Jika fungsi dipanggil dari ForStatementKembalikan kodpseudoAssign
Selain ituTambah kodpseudoAssign kepada senaraiKodPesudo
Tamat Fungsi AssignmentOperation
Rajah 3.32 Kod pseudo bagi fungsi AssignmentOperation
Fungsi DirectAssignmentSelagi token bukan “,” atau “;”
Tambah token kepada senaraiKodPesudoTamat Fungsi DirectAssignment
Rajah 3.33 Kod pseudo bagi fungsi DirectAssignment
49
Fungsi CompoundStatementJika token adalah “++”
Jika fungsi dipanggil dari ForStatement Kembalikan “Variable = Variable + 1”
Tamat Fungsi CompoundStatementSelain itu
Tambah “Variable = Variable + 1” kepada senaraiKodPesudoJika token adalah “--”
Jika fungsi dipanggil dari ForStatement Kembalikan “Variable = Variable - 1”
Tamat Fungsi CompoundStatementSelain itu
Tambah “Variable = Variable - 1” kepada senaraiKodPesudoTamat Fungsi CompoundStatement
Rajah 3.34 Kod pseudo bagi fungsi CompoundStatement
Fungsi AssignmentOperationXJika token adalah “+=”
Sediakan kodpseudoX “Variable=Variable+”Jika token adalah “-=”
Sediakan kodpseudoX “Variable=Variable-”Jika token adalah “*=”
Sediakan kodpseudoX “Variable=Variable*”Jika token adalah “/=”
Sediakan kodpseudoX “Variable=Variable/”Jika token adalah “%=”
Sediakan kodpseudoX “Variable=Variable%”Dapatkan token seterusnyaSelagi token bukan “;” , atau “)” yang diikuti oleh “{”
Sambung kodpseudoX dengan token semasaDapatkan token seterusnya
Tamat gelungJika fungsi dipanggil dari ForStatement
Kembalikan kodpseudoXJika tidak
Tambah kodpseudoX kepada senaraiKodPesudoTamat Fungsi AssignmentOperationX
Rajah 3.35 Kod pseudo bagi fungsi AssignmentOperationX
50
Fungsi PrintfStatementSet kodpseudoPrintf sebagai “DISPLAY ”Dapatkan token seterusnya, abaikan token “(” Dapatkan token seterusnyaJika ada Variable
Tambah “the value of ” kepada kodpseudoPrintfSelagi token bukan “)”
Tambah token semasa kepada kodpseudoPrintfJika tiada Variable
Tambah token semasa kepada kodpseudoPrintf//contoh “DISPLAY ‘text’”,
//kerana sebarang rentetan akan ditukar kepada ‘text’Tambah kodpseudoPrintf kepada senaraiKodPesudo
Tamat Fungsi PrintfStatement
Rajah 3.36 Kod pseudo bagi fungsi PrintfStatement
Fungsi ScanfStatementSet kodpseudoScanf sebagai “INPUT ”Selagi token bukan “)”
Jika token adalah Variable Tambah token semasa kepada kodpseudoScanf
Jika token adalah “,”Tambah token semasa kepada kodpseudoScanf
Dapatkan token seterusnyaTambah kodpseudoScanf kepada senaraiKodPesudo
Tamat Fungsi ScanfStatement
Rajah 3.37 Kod pseudo bagi fungsi ScanfStatement
Fungsi IfStatementTambah “if” kepada timbunan blokSemasaSet kodpseudoUngkapanIf sebagai “IF”Dapatkan token seterusnyaDapatkan token seterusnya, abaikan “(”Selagi token bukan “)” dan diikuti “{”, untuk proses ungkapan if
Tambah token semasa kepada kodpseudoUngkapanIfDapatkan token seterusnya
Tambah kodpseudoUngkapanIf kepada senaraiKodPesudoPergi ke fungsi PENJANAKODPSEUDO, untuk pemprosesan BLOCK
Tamat Fungsi IfStatement
Rajah 3.38 Kod pseudo bagi fungsi IfStatement
51
Fungsi IfElseStatementSet blokSemasa sebagai “elseif”Set kodpseudoUngkapanElseIf sebagai “ELSEIF”Dapatkan token seterusnyaDapatkan token seterusnya, abaikan “else”Selagi token bukan “)” dan diikuti “{”, untuk proses ungkapan else ... if
Tambah token semasa kepada kodpseudoUngkapanElseIfDapatkan token seterusnya
Tambah kodpseudoUngkapanElseIf kepada senaraiKodPesudoPergi ke fungsi PENJANAKODPSEUDO, untuk pemprosesan BLOCK
Tamat Fungsi IfElseStatement
Rajah 3.39 Kod pseudo bagi fungsi IfElseStatement
Fungsi ElseStatementTambah “else” kepada timbunan blokSemasaTambah “ELSE” kepada senaraiKodPesudoDapatkan token seterusnyaDapatkan token seterusnya, abaikan “{”Pergi ke fungsi PENJANAKODPSEUDO, untuk pemprosesan BLOCK
Tamat Fungsi ElseStatement
Rajah 3.40 Kod pseudo bagi fungsi ElseStatement
Fungsi SwitchStatementTambah “switch” kepada timbunan blokSemasaSet ungkapanSwitch kepada “”Dapatkan token seterusnyaDapatkan token seterusnya, abaikan “(”
Selagi token bukan “)” dan dikuti “{”Tambah token kepada ungkapanSwitch Dapatkan token seterusnya
Dapatkan token seterusnyaTamat Fungsi SwitchStatement
Rajah 3.41 Kod pseudo bagi fungsi SwitchStatement
Fungsi CaseStatementTambah “case” kepada timbunan blokSemasaDapatkan nilai ungkapanSwitchSelagi benar
Dapatkan nilai Literal selepas “case :”Set kodpseudoSyarat ungkapanSwitch = LiteralDapatkan token seterusnya Dapatkan token seterusnya, abaikan “:”
bersambung ...
52
... sambunganJika token semasa adalah “case”
Tambah “OR” kepada kodpseudoSyaratSelain daripada itu
Henti ulangan, untuk proses “case” seterusnya
Jika “case” adalah yang pertama dalam ungkapan “switch”Tambah “IF kodpseudoSyarat” kepada senaraiKodPseudo
Jika bukan “case” yang pertamaTambah “ELSEIF kodpseudoSyarat” kepada senaraiKodPseudo
Pergi ke fungsi PENJANAKODPSEUDOTamat Fungsi CaseStatement
Rajah 3.42 Kod pseudo bagi fungsi CaseStatement
Fungsi DefaultStatementTambah “ELSE” senaraiKodPseudoDapatkan token seterusnya, abaikan “:”Pergi ke fungsi PENJANAKODPSEUDO
Tamat Fungsi DefaultStatement
Rajah 3.43 Kod pseudo bagi fungsi DefaultStatement
Fungsi DoWhileStatementTambah “do” kepada timbunan blokSemasaTambahkan “DO ” kepada senaraikodPseudoDapatkan token seterusnya, abaikan “{”Pergi ke fungsi PENJANAKODPSEUDO, untuk memproses BlockSelepas kembali dari fungsi PENJANAKODPSEUDO, ...
dapatkan token seterusnyaSet ungkapanWhile kepada “WHILE”Dapatkan token seterusnyaDapatkan token seterusnya, abaikan “(”Selagi token bukan “)” dan diikuti oleh “;”
Tambah nilai token kepada ungkapanWhileDapatkan token seterusnya
Tambahkan ungkapanWhile kepada senaraikodPseudoTamat Fungsi DoWhileStatement
Rajah 3.44 Kod pseudo bagi fungsi DoWhileStatement
53
Fungsi WhileStatementTambah “while” kepada timbunan blokSemasaTambah “WHILE ” kepada senaraiKodPseudoDapatkan token seterusnyaDapatkan token seterusnya, abaikan “(”Set ungkapanWhile sebagai “”Selagi token bukan “)” diikuti oleh “{”
Tambah nilai token kepada ungkapanWhileDapatkan token seterusnya
Tambah ungkapanWhile kepada senaraiKodPseudoPergi ke fungsi PENJANAKODPSEUDO
Tamat Fungsi WhileStatement
Rajah 3.45 Kod pseudo bagi fungsi WhileStatement
Fungsi ForStatement dalam Rajah 3.43 menukarkan arahan for kepada bentuk
do...while. for mempunyai format berikut;
for (nilaiMula; syarat; langkah){
Statements;
}
Arahan for di atas akan ditukar kepada bentuk do...while, seperti berikut
nilaiMula
do {
Statements;
langkah
}while (syarat);
Fungsi ForStatementDapatkan token seterusnyaDapatkan token seterusnya, abaikan “(”
//Proses seterusnya adalah untuk mendapatkan nilaiMulaJika token adalah DataType
Pergi ke fungsi DeclarationStatementJika token adalah Variable
Pergi ke fungsi AssignmentOperationnilaiMula diperolehiProses token seterusnya, untuk abaikan “;”//Proses seterusnya adalah untuk mendapatkan syaratSelagi token bukan “;”
Tambah nilai token kepada syaratForDapatkan token seterusnya
bersambung ...
54
... sambungan
Jika nilaiMula bukan NULLTambah nilaiMula kepada senaraiKodPseudo
Tambah “WHILE” kepada senaraiKodPseudo//Proses seterusnya adalah untuk mendapatkan langkahForDapatkan token seterusnya, abaikan “;”Set langkah for kepada “”Selagi token bukan “)”
Jika token ialah Variable dan diikuti oleh “=”Pergi ke fungsi AssignmentOperation
Jika token ialah Variable dan diikuti oleh AssignOperatorXPergi ke fungsi CompoundStatement
Jika token ialah AssignOperatorX dan diikuti oleh VariablePergi ke fungsi CompoundStatement
Dapatkan token seterusnyaSimpan langkahFor dalam timbunanLangkahForDapatkan token seterusnya, untuk abaikan “)”Dapatkan token seterusnya, untuk abaikan “{”Tambah “for” kepada timbunan blokSemasaPergi ke fungsi PENJANAKODPSEUDO
Tamat Fungsi ForStatementRajah 3.46 Kod pseudo bagi fungsi ForStatement
3.3.3 Algoritma Perbandingan Kod Pesudo
Fungsi ini menerima dua kod pseudo iaitu satu kod pseudo jawapan instruktor dan satu lagi
kod pseudo skema pengajar. Dalam algoritma ini, input adalah dalam bentuk satu rentetan
panjang. Rajah 3.47 hingga 3.51 merupakan kod pseudo yang menerangkan proses-proses
yang berlaku dalam kelas Perbandingan Kod Pseudo.
Fungsi PEMBANDINGKODPSEUDO (kodPseudoPelajar, kodPseudoInstruktor)Tukar setiap baris dalam kodPseudoPelajar kepada bentuk tatasusunan ...
dengan menghantar kepada fungsi TukarKepadaTatasusunanTukar setiap baris dalam kodPseudoInstruktor kepada bentuk tatasusunan ...
dengan menghantar kepada fungsi TukarKepadaTatasusunanDapatkan isytiharanPembolehubahPelajar dan prosesPelajar dengan ...
hantar kodPseudoPelajar ke fungsi PemisahIsytiharPembolehubahDapatkan isytiharanPembolehubahInstruktor dan prosesInstruktor dengan ...
hantar kodPseudoInstruktor ke fungsi PemisahIsytiharPembolehubahDapatkan markahPembolehubah dengan panggil ...
fungsi BandingPembolehubah Dapatkan markahProses dengan panggil fungsi BandingProses
markahPersamaan = markahPembolehubah + markahProsesTamat Fungsi PEMBANDINGKODPSEUDO
Rajah 3.47 Kod pseudo bagi fungsi PEMBANDINGKODPSEUDO
55
Fungsi TukarKepadaTatasusunan (kodPseudo)kodPseudoTatasusunan adalah NULLDapatkan panjangKodPseudo dengan mengira bilangan rentetan kodPseudoSet pembilang kepada 0Set satuBarisKodpseudo kepada NULLSelagi pembilang <= panjangKodPseudo
Dapatkan aksara seterusnya daripada kodPseudoJika aksaraSemasa bukan “\n”
Tambahkan aksaraSemasa kepada satuBarisKodpseudoSelain itu, jika aksaraSemasa adalah “\n”
Tambahkan aksaraSemasa kepada satuBarisKodpseudoTambahkan satuBarisKodpseudo kepada ...
kodPseudoTatasusunanSet satuBarisKodpseudo kepada NULL
Kembalikan kodPseudoTatasusunanTamat Fungsi TukarKepadaTatasusunan
Rajah 3.48 Kod pseudo bagi fungsi TukarKepadaTatasusunan
Fungsi PemisahIsytiharPembolehubah (kodPseudo)Set senaraiPembolehubah sebagai NULLSet barisProses sebagai NULLUntuk setiap baris dalam kodPseudo
Semak barisSemasaJika terdapat rentetan “DECLARE” dalam barisSemasa
Semak jenis data pembolehubahJika jenis data adalah “integer” atau “long”
Tambah “integer” kepada senaraiPembolehubahJika jenis data adalah “float” atau “double”
Tambah “real” kepada senaraiPembolehubahJika jenis data adalah “char”
Tambah “character” kepada senaraiPembolehubahSelain daripada itu
Tambah barisSemasa kepada barisProsesKembalikan senaraiPembolehubah dan barisProses
Tamat Fungsi PemisahIsytiharPembolehubah
Rajah 3.49 Kod pseudo bagi fungsi PemisahIsytiharPembolehubah
Fungsi BandingPembolehubah (senaraiPembolehubahPelajar, senaraiPembolehubahInstruktor)
Kira bilanganInteger dari senaraiPembolehubahPelajarKira bilanganReal dari senaraiPembolehubahPelajarKira bilanganChar dari senaraiPembolehubahPelajar
Kira bilanganInteger dari senaraiPembolehubahInstruktorKira bilanganReal dari senaraiPembolehubahInstruktor
bersambung ...
56
... sambungan
Kira bilanganChar dari senaraiPembolehubahInstruktor
Jika bilanganInteger pelajar >= bilanganInteger instruktormarkahInteger =1
Selain itumarkahInteger =0
Jika bilanganReal pelajar >= bilanganReal instruktormarkahReal =1
Selain itumarkahReal =0
Jika bilanganChar pelajar >= bilanganChar instruktormarkahChar =1
Selain itumarkahChar =0
markahPembolehubah = (markahInteger + markahReal + markahChar)/3*5Tamat Fungsi BandingPembolehubah
Rajah 3.50 Kod pseudo bagi fungsi BandingPembolehubah
main(){ int i=10; do{ printf("%d\n",i); i--; }while(i>=1); getch();}
68
terdapat kesalahan major. Tetapi secara keseluruhan, aplikasi ini dapat berfungsi
berdasarkan skop yang telah ditentukan. Ia mampu menerima input aturcara pelajar dan
model-model penyelesaian pengajar seterusnya dapat melakukan perbandingan kod pseudo
sehingga terhasilnya markah yang diperolehi untuk setiap latihan pelajar.
69
BAB V
KESIMPULAN
1.11 PENDAHULUAN
Sistem yang dibangunkan ini adalah satu eksperimen untuk mengenal pasti keupayaan
perbandingan kod pseudo dalam menyemak latihan aturcara pelajar subjek bahasa
pengaturcaraan C. Bab ini membincangkan tentang dapatan dan sumbangan kajian kepada
bidang penyemakan automatik aturcara. Di samping itu ia juga membincangkan tentang
kelemahan aplikasi yang dicadangkan, dan juga perkara-perkara yang boleh diperluaskan
pada masa akan datang.
1.12 HASIL KAJIAN
Berikut adalah hasil daripada kajian;
a) Menghasilkan satu kaedah untuk menterjemah kod aturcara C kepada kod pseudo.
b) Menghasilkan kaedah untuk membuat penyemakan latihan aturcara C pelajar secara
automatik menggunakan kaedah perbandingan kod pseudo.
c) Menghasilkan aplikasi untuk menerima aturcara C pelajar dan beberapa model
penyelesaian untuk dibuat perbandingan. Aplikasi tersebut dapat menentukan
peratus kesamaan aturcara pelajar dengan model penyelesaian dan memaparkan
markah yang diperoleh.
1.13 SUMBANGAN KAJIAN
a) Kod aturcara C pelajar dapat disemak secara automatik menggunakan aplikasi yang
dibina.
70
b) Menambahkan satu lagi kaedah iaitu perbandingan kod pseudo dalam penyemakan
automatik aturcara yang menggunakan pendekatan analisis statik.
c) Satu kertas kerja berkenaan kajian ini telah dibentangkan dalam satu seminar
(Khirulnizam et. al., 2007). Perkongsian ini diharap dapat membantu penyelidik lain
yang mengkaji bidang yang sama seperti ini.
1.14 PERLUASAN KAJIAN PADA MASA HADAPAN
Penyelidik mengenal pasti beberapa kelemahan dalam aplikasi yang dibangunkan, serta
penambahbaikan yang boleh dilakukan pada masa hadapan. Antaranya ialah:
a) Perbandingan yang dibuat adalah berdasarkan kaedah perbandingan aksara. Adalah
lebih baik sekiranya perbandingan dapat dilakukan menggunakan kaedah
perbandingan token demi token. Kaedah perbandingan berasaskan perbandingan
token perlu dibangunkan untuk mengatasi kelemahan ini.
b) Aplikasi ini hanya merupakan salah satu komponen utama dalam penghasilan sistem
penyemakan aturcara automatik. Untuk memudahkan implementasi dengan interaksi
daripada pengguna, satu sistem pengurusan pangkalan data yang lengkap perlu
dibina.
c) Setakat ini, aplikasi hanya mampu menyemak aturcara asas C. Kajian seterusnya
perlu menambah baik aplikasi supaya mampu menyemak aturcara C yang lebih
rumit yang melibatkan tatasusunan, fungsi, sistem fail dan struktur data.
d) Memandangkan banyak subjek bahasa pengaturcaraan yang lain, sistem perlu
mengambil kira sokongan terhadap bahasa-bahasa tersebut supaya lebih diterima
ramai.
1.15 RUMUSAN
Melalui pemerhatian penulis walaupun terjemahan kod aturcara kepada kod pseudo dapat
memudahkan penambahbaikan aplikasi ini untuk menyokong bahasa aturcara lain, namun
terdapat juga kelemahan lain. Antaranya ialah, aturcara yang ingin disemak tidak boleh
mempunyai ralat sintaksis mahupun semantik. Ini kerana semasa proses penukaran kod
aturcara kepada kod pseudo, ia mesti dilakukan dengan menggunakan nahu bahasa
pengaturcaraan C yang betul. Sekiranya berlaku ralat sintaksis atau semantik, proses itu
71
akan mengalami gangguan dan tidak akan berfungsi dengan baik. Ia juga boleh
menyebabkan proses tergendala. Untuk mengelakkan keadaan ini (pada masa akan datang),
penyelidik mencadangkan bahawa proses pemetaan teks yang digunakan oleh Norshuhani
et. al., (2006) merupakan proses yang lebih baik untuk perbandingan aturcara melalui
kesamaan bukan-struktur.
Walaupun begitu, kaedah yang dicadangkan oleh penyelidik, iaitu menukarkan kod
aturcara kepada kod-pseudo adalah lebih baik untuk mengurangkan model penyelesaian
yang perlu disediakan. Ini kerana pernyataan yang fungsinya lebih kurang sama (seperti
while…do dengan for, switch…case dengan if…elseif…else) dapat diseragamkan dengan
menterjemahkan kepada kod-pseudo.
Kajian ini mencadangkan satu lagi kaedah dalam pendekatan analisis statik dalam
penyemakan automatik tugasan pengaturcaraan. Ia telah berjaya membuktikan bahawa kod
aturcara boleh diterjemahkan kepada kod pseudo dan perbandingan antara kod pseudo
pelajar dengan kod pseudo model penyelesaian boleh dilakukan.
72
RUJUKAN
Ala-Mutka, K., Uimonen T., Järvinen H. M. 2004. Supporting Students in C++ Programming Courses with Automatic Program Style Assessment. Journal of Information Technology Education 3. http://jite.org/documents/Vol3/v3p245-262-135.pdf [24 Jun 2007]
Ala-Mutka, Kirsti M. 2005. A Survey of Automated Assessment Approaches for Programming Assignments. Computer Science Education 15 (June 2005): 83-102.
Badros, Greg. 2000. JavaML : An XML-based Source Code Representation for Java Programs. Proceedings of the 9th International World Wide Web Conference. http://www9.org/w9cdrom/342/342.html [24 Jun 2007]
Bloom, B.S. . 1956. Taxonomy of Educational Objectives: Handbook I: Cognitive Domain: Longmans, Green and Company.
Botev C., Chao H., Chao T., Cheng Y., Doyle R., Grankin S., Guarino J., Guha S, Lee P. C., Perry D., Re C, Rifkin I., Yuan T., Abdullah D., Carpenter K., Gries D., Kozen D., Myers A., Schwartz D., Shanmugasundaram J.. 2005. Supporting Workflow In A Course Management System. ACM SIGCSE Bulletin 37(1), hlm. 262-266.
Chen, J. Y. and Lu, J. F. 1993. A New Metric for Object-oriented Design. Journal of Information Software Technology 35 (April 1993): 232–240.
Coleman M., Pratt S. 1989. Software Engineering for Students: Chartwell-Bratt Ltd.
David P. Tegarden , Steven D. Sheetz , David E. Monarchi. 1995. A Software Complexity Model of Object-oriented Systems. Decision Support System 13, hlm. 241-262.
Dennis Ritchie. 1975. C Programming Manual. Bell Labs. http://cm.bell-labs.com/cm/cs/who/dmr/cman.pdf [20 Oktober 2008]
Donaldson, John L., Ann-Marie Lancaster and, and Paula H. Sposato. 1981. A Plagiarism Detection System. Proceedings of 12th SIGCSE Technical Symposium, hlm. 21-25.
Foxley, E. Higgins, C, & Gibbon, C. 1996. The Ceilidh System : A General Overview. http://www.cs.nott.ac.uk/CourseMarker/more_info/html/Overview96.htm [24 Jun 2007]
Booch, G., Rubargh, J., Jacobson, I. 1999. The Unified Modeling Language User Guide: Addison Wesley.
Granville, A. 2002. Detecting Plagiarism in Java Code, Tesis Sarjanamuda Sains Komputer, University of Sheffield.
Chu H. D., Dobson, J. E. and Liu, I.C.. 1997. FAST-A Framework for Automating Statistic-based Testing. http://citeseer.nj.com/73306.html [30 Jun 2006]
Halstead, M. H. 1977. Elements of Software Science. North-Holland: Elsevier.
73
Hollingsworth, J. 1960. Automatic Graders for Programming Classes. Communication of the ACM 3 (10), hlm. 528-529.
Jackson, D. & Usher, M. 1997. Grading Student Programs Using ASSYST. ACM SIGCSE Bulletin29(1), hlm. 335-339.
Joy M & Luck M. 1998. The BOSS System for On-line Submission and Assessment. http://www.ulster.ac.uk/cticomp/joy.html [24 Jun 2007]
Khirulnizam Abd Rahman, Md Jan Nordin, Che Wan Shamsul Bahri Che Wan Ahmad, Juzlinda Mohd Ghazali. 2007. Development of an Automated Assessment for C Programming Exercises using Pseudocodes Comparison Technique. Proceedings of Conference on IT Research & Application 2007, hlm. 119-126.
Levenstein , V. I.. 1966. Binary Codes Capable of Correcting Deletions, Insertions and Reversals. Soviet Physics Doklady, Vol. 10, hlm.707-710.
Mahmud Ab Rahman. 2006. Persekitaran Pembangunan Bersepadu Pintar Bahasa Pengaturcaraan C Berasaskan Web bagi Pengaturcara Baru. Tesis Sarjana Teknologi Maklumat, Universiti Kebangsaan Malaysia.
Marini Abu Bakar, Norleyza Jailani, Sufian Idris. 2002. Pengaturcaraan C. Kuala Lumpur: Prentice Hall.
McCabe, T. J. 1976. A Complexity Measure. IEEE Transaction of Software Engineering 4 (SE-2), hlm. 308-320.
Parr, Terence, & Klaren, Ric. ANTLR - Complete Language Translation Solutions.http://www.antlr.org/ [01 Jun 2006]
Truong, N., Roe, P., Bancroft, P.. 2003. A Web Based Environment for Learning to Program. Proceedings of the 26th Australasian Computer Science Conference, hlm. 255-264.
Truong, N., Roe, P., Bancroft, P.. 2004. Static Analysis of Students’ Java Programs. Proceedings of 6th Australian Computing Education Conference (ACE2004), hlm. 317-325.
Truong, N., Roe, P., Bancroft, P. 2005. Automated Feedback for “Fill in the Gap” Programming Exercises. Proceedings of 7th Australasian Computing Education, hlm. 117-126.
Norshuhani Zamin, Emy Elyanee Mustapha, Savita K.Sugathan, Mazlina Mehat, Ellia, and Anuar. 2006. Development Of A Web-Based Automated Grading System For Programming Assignments Using Static Analysis Approach. Proceedings of International Conference on Electrical and Informatics, Bandung, Indonesia.
Norshuhani Zamin, Savita K.Sugathan, Mazlina Mehat, Emy Elyanee Mustapha, Ellia Anuar. 2006. WAGS: A Web-Based Automated Grading System For Programming Assignments From Users’ Perspectives. Proceedings of International Conference on Science & Technology: Application in Industry & Education (2006).
php.net. 2007. PHP Manual. http://php.net/similar_text [01 Jun 2007].
74
php.net. 2008. PHP Manual. http://php.net/lahvenstein [19 Oktober 2008].
Prechelt L, Malpohl G., Philippsen M. 2000. Finding plagiarisms among a set of programs with JPlag. Journal of Universal Computer Science. 8(11), hlm. 1016 - 1038.
Rich, C. and Wills, L. M. . 1990. Recognizing a Program's Design: A Graph-Parsing Approach. IEEE Software. 7 (1), hlm. 82-89.
Robertson, L. A. 2004. Simlple Program Design: A Step by Step Approach: Thomson Course Technology.
Rohaida Romli, Mazni Omar, Cik Fazilah Hibadullah. 2004. Automatic Correctness Assessment Program for Java Programming Assignment. M2USIC 2004, Malaysia. http://m2usic.mmu.edu.my/main/Proceeding2004/Paper%20276.pdf [24 Jun 2007]
Rohaida Romli. 2003. Penjanaan Data Ujian untuk Penaksiran Automatik Tugasan Aturcara C, Tesis Sarjana Teknologi Maklumat, Universiti Kebangsaan Malaysia.
Saikkonen, R., Malmi, L., and Korhonen A., 2001. Fully Automatic Assessment of Programming Exercises. Proceedings of the 6th Annual Conference on Innovation and Technology in Computer Science Education, hlm. 133-136.
Schorsch, Tom. 1995. CAP: An Automated Self-Assessment Tool To Check Pascal Programs For Syntax, Logic And Style Errors. Proceedings of the 6th Annual Conference on Innovation and Technology in Computer Science Education, hlm. 133-136.
Shafer, S. C. 2005. LUDWIG: An Online Programming Tutoring and Assessment System. inroads – The SIGCSE Bulletin. 37 (June 2005), hlm. 56-60.
Symeonidis, P. 1998. An in-depth Review of CourseMaster’s Marking Subsystem. http://www.cs.nott.ac.uk/CourseMarker/more_info/pdf/AnIn-depthReviewofCourseMastersMarkingSubsystem.pdf [06 Jun 2006]
Venables A., Haywood L. 2003. Programming students NEED instant feedback! Conferences in Research and Practice in Information Technology. Proceedings of the 5th Australasian Conference on Computing Education. 20, hlm. 267 - 272.
Wei Li, Sallie Henry. 1993. Object-oriented Metrics that Predict Maintainability. Journal of Systems and Software 23, hlm. 111-122.
Whale, Geoff. 1986. Detection of Plagiarism in Student Programs. 9th Australian Computer Science Conference, Canberra.
Wise, M. J. 1992. Detection of Similarities in Student Programs: YAP’ing maybe preferable to Plague’ing. ACM SIGCSE Bulletin. 24, March, hlm. 268-271.
Wise, M. J. 1993. String Similarity via Greedy String Tiling and Running-Karp-Rabin Matching. ftp://ftp.cs.su.oz.au/michaelw/doc/RKR_GST.ps [24 Jun 2007].
75
Yerramilli, Susan, Mengel A., Vinay. 1999. A Case Study Of The Static Analysis Of The Quality Of Novice Student Programs. ACM SIGCSE Bulletin. 31(1), hlm. 78-82.
Zin, A.M. and Foxley, E. 1991. Automatic Program Quality Assessment System. Proceedings of the IFIP Conference on Software Quality, S P University, Vidyanagarm India, March 1991.
Zin, M. A. & Foxley, E. 1994. Automatic Program Assessment System. http://www.cs.nott.ac.uk/~ceilidh/papers/ASQA.html [24 Jun 2007].
Data-data yang disimpan dalam kelas ini ialah; typeE – maklumat berkenaan jenis token yang dipegang. tokenE – token yang dipegang. next – penunjuk kepada token yang seterusnya dalam senarai jujukan token. previous – penunjuk kepada nod sebelumnya dalam senarai jujukan token.
Metod-metod yang terdapat dalam kelas Token dan peranan masing-masing. Token – konstruktor kepada kelas ini. getType – mengembalikan jenis token. getToken – mengembalikan token yang dipegang oleh nod. goNext – mengembalikan alamat nod yang seterusnya.
b) Kelas KataKunci KataKunci
-listkw-wordToMatch+Keyword+findMatchKeyword
Data-data yang disimpan dalam kelas ini ialah; listkw – menyimpan senarai semua kata kunci (dalam bentuk tatsusunan) yang
ditentukan dalam nahu atur cara yang diproses. wordToMatch – menyimpan perkataan yang akan dibandingkan dengan senarai
kata kunci.
Metod-metod yang terdapat dalam kelas KataKunci dan peranan masing-masing. Keyword – konstruktor kepada kelas ini. findMatchKeyword – mengembalikan true jika perkataan yang diproses adalah
Data-data yang disimpan dalam nod ini ialah; firstNode – nod yang pertama dalam senarai jujukan tersebut. currentNode – kedudukan nod semasa. lastNode – nod terakhir dalam senarai jujukan. head – penunjuk kepada nod kepala yang juga seperti nod pertama. currentToken – token semasa dalam proses penyelusuran.
Metod-metod yang terdapat dalam kelas SenaraiToken dan peranan masing-masing. ListToken – konstruktor kepada objek ini. isEmpty – mengembalikan true/benar sekiranya senarai jujukan tiada nod. getCurrentToken – mengembalikan token semasa dalam proses penyelusuran. insertNode – menyelitkan nod token yang baru dibina. goNext – pergi kepada nod seterusnya. goFirst – pergi ke nod pertama dalam senarai jujukan. setHead – menyimpan alamat nod pertama atau nod kepala. getHead – mengembalikan alamat nod pertama. traverse – berfungsi melakukan proses menyelusur senarai jujukan nod.
Data-data yang disimpan dalam kelas ini ialah; input – menyimpan kod atur cara sumber. tempToken – menyimpan nod token sementara sebelum diselit ke dalam senarai
jujukan. inputlength – mengandungi maklumat tentang panjang aksara dalam kod atur
cara sumber. c – satu aksara daripada kod atur cara sumber. tokenList – memegang objek (berasal dari kelas ListToken) yang akan
menyediakan kemudahan menyenaraikan token. keys – objek kepada kelas Keyword.
Metod-metod yang terdapat dalam kelas PenganalisisLeksikal dan peranan masing-masing. Lexer – konstruktor kepada kelas ini. isSeparator – mengembalikan true sekiranya aksara yang dihantar termasuk
daripada kategori separator (pemisah). Antara aksara yang dikategorikan sebagai pemisah ialah “,”, “;”, “{”, “}” ,“[” ,“]”, “(”,“)” dan “:”.
lexList – metod ini adalah yang terpenting dalam kelas ini, ia berfungsi untuk membuat analisis leksikal kepada kod atur cara sumber dan menjana senarai jujukan token.
traverseLexList – berfungsi melakukan proses menyelusur senarai jujukan token yang telah dihasilkan oleh metod lexList.
returnHeadTokenList – mengembalikan alamat token pertama yang juga menjadi kepada senarai berjujukan token.
Data-data yang disimpan dalam kelas ini ialah; pseudolist – senarai kod pseudo dalam tatasusunan. Setiap satu baris kod pseudo
merupakan satu item dalam tatasusunan ini. indentation – mengandungi maklumat berapa jarak indentasi untuk satu baris kod
pseudo. Indentasi berbeza mengikut blok di mana baris kod pseudo berada. nod – ini adalah objek daripada kelas token. Ia menyimpan maklumat token
semasa yang berada dalam senarai jujukan token yang sedang diproses.
80
tokenList – merupakan objek daripada ListToken yang menyimpan maklumat senarai jujukan token.
block – menyimpan maklumat di dalam blok mana kod atur cara sumber sedang diproses. Kedudukan blok (seperti blok fungsi main, atau dalam struktur kawalan if…else, do…while, for, dan switch…case) perlu diketahui kerana proses yang berbeza akan dilakukan kepada kod atur cara yang berada dalam blok berbeza.
forStepStack – pernyataan penerusan dalam gelung for. forConditionStack – pernyataan ujian dalam gelung for. currentDataType – jenis data semasa bagi pemboleh ubah yang diproses. switchLeftStmt – ungkapan atau pemboleh ubah pada pernyataan switch. firstCase – true jika switch…case yang diproses adalah case yang pertama, false
jika sebaliknya.
Metod-metod yang terlibat; PseudoCodeGenerator – konstruktor kepada kelas ini. Ia akan menerima kod
atur cara dalam bentuk rentetan memanggil metod pseudocodegen untuk membentuk kod pseudo.
getPseudolist – mengembalikan tatasusunan yang mengandungi kod pseudo. getArrayLastItem – mengembalikan nilai item yang terakhir dalam suatu
tatasusunan tanpa menghapuskan item tersebut. isDataType – mengembalikan true sekiranya suatu nilai string itu tergolong
dalam senarai berikut “int”, “float”, “double”, “char”, “long”, “short” dan “signed”.
isLiteralValue – mengembalikan true sekiranya token tergolong dalam nilai lateral untuk integer, nomber perpuluhan, aksara atau rentetan. Integer dan nombor perpuluhan tidak dikurung oleh apa-apa simbol. Contoh nilai 9 dan 3.142. Manakala untuk aksara dan rentetan, nilai lateral dikurung masing-masing dengan simbol berikut: ‘h’dan “nama”.
printPseudoList – memaparkan senarai kod pseudo yang terhasil dalam textarea dalam halaman HTML. Contoh: <textarea>Di sini kod pseudo yang telah dihasilkan</textarea>
stringPseudoList – mengembalikan kod pseudo dalam bentuk string. printIndentation – menyelitkan indentasi sebelum satu baris kod pseudo
dimasukkan ke dalam senarai kod pseudo (pseudolist). Panjang indentasi berbeza mengikut kedudukan baris dalam blok atur cara.
goNextNod – proses nod token yang seterusnya dalam senarai berjujukan token. isSemicolonOrComa – mengembalikan true sekiranya aksara adalah
semicolon(;) atau koma (,). isExpressionOps – mengembalikan true jika rentetan tergolong dalam kategori
operator Boolean ataupun operator perbandingan.Operator Boolean : TAK “!”, DAN “&&” dan ATAU “||”.Operator perbandingan : sama dengan “==”, tak sama dengan “!=”, lebih kecil “<”, lebih besar “>”, lebih kecil atau sama dengan “<=”, dan lebih besar atau sama dengan “>=”.
directAssignment – memproses operasi umpukan di mana pernyataan di sebelah kanan tidak mengandungi operasi arithmetik. Aliran proses akan masuk ke metod ini sekiranya token yang diproses ialah “=”.
declarationStatements – memproses pernyataan pengisytiharan pemboleh ubah. Aliran proses akan masuk ke metod ini sekiranya token semasa yang diproses ialah token yang mengandungi jenis data (iaitu “int”, “float”, “double”, “char”, “long”, “short” dan “signed”). Untuk setiap nama pembolehubah yng dijumpai, masing-masing akan diubah kepada v1, v2, v3 dan seterusnya vN mengikut mana dahulu yang dijumpai. Di sini penulis membuat sedikit perubahan daripada
81
cadangan Norshuhaini et. al. (2006) yang mana setiap pembolehubah yang dijumpai akan diganti dengan perkataan ”var”.
assignmentOperations – memproses operasi umpukan di mana pernyataan di sebelah kanan mengandungi operasi arithmetik. Aliran proses akan masuk ke metod ini sekiranya token yang diproses ialah “=” dan diikuti dengan operasi arithmetik.
printfStatement – menukar arahan printf() yang terdapat dalam C kepada pernyataan DISPLAY. Rentetan yang terdapat dalam kurungan “??????” akan diubah kepada “teks”, seperti yang dicadangkan oleh Norshuhaini et. al. (2006). Ini dilakukan untuk menambahkan kesamaan dengan model penyelesaian. Memandangkan mesej yang cuba disampaikan dalam arahan printf() adalah pelbagai, maka penulis mencadangkan supaya rentetan mesej diseragamkan kepada “teks”.
scanfStatement – menukar arahan scanf() kepada INPUT diikuti dengan senarai pemboleh ubah yang terbabit.
ifStatement – metod ini akan mengendalikan penukaran pernyataan if kepada format yang dicadangkan oleh Robertson (2002).
ifElseStatement – metod menukarkan if…else kepada IF…ELSE. elseStatement – metod menukarkan pernyataan else kepada ELSE. compoundStatement – pernyataan kompaun merujuk kepada switchStatement – metod akan menukarkan pernyataan switch yang dijumpai
dalam atur cara sumber kepada IF. caseStatement – metod menukarkan pernyataan case kepada IF atau IF…ELSE
bergantung pada kes yang ke berapa. defaultStatement – metod menukarkan pernyataan default dalam switch…case
kepada ELSE. doWhileStatement – metod menukarkan pernyataan do…while kepada DO…
WHILE. whileStatement – metod menukarkan pernyataan while kepada WHILE. forStatement – metod menukarkan pernyataan for kepada WHILE. pseudocodegen – metod utama dalam kelas ini. Metod ini mengawal penelusuran
senarai jujukan token dan menentukan metod yang akan dipanggil untuk menentukan aliran proses.
Maklumat yang disimpan dalam kelas ini ialah; pseudocodelist – senarai kod pseudo dalam tatasusunan. Setiap satu baris kod
pseudo merupakan satu item dalam tatasusunan ini.
82
listVarDeclaration – semua pengisytiharan pemboleh ubah dikumpulkan di sini dalam bentuk tatasusunan.
listflow – semua pernyataan selain daripada pengisytiharan pemboleh ubah dikumpulkan di sini.
variableTable – senarai pemboleh ubah yang diperolehi daripada kod pseudo.
Metod-metod yang terdapat dalam kelas PemisahPembolehubah dan peranan masing-masing.
VarDeclarationSeparator – konstruktor kelas ini. Menerima kod pseudo dalam bentuk satu rentetan panjang.
separateVarDecFromCode – memisahkan kod pseudo yang mengandungi pengisytiharan pemboleh ubah daripada pernyataan yang lain. Dua senarai akan terbentuk (dalam tatasusunan) iaitu senarai pengisytiharan pemboleh ubah dan senarai kod pseudo bukan pengisytiharan pemboleh ubah.
getVarDecList – mengembalikan senarai kod pseudo yang mengandungi pengisytiharan pemboleh ubah sahaja (dalam tatasusunan).
getFlowList – mengembalikan senarai kod pseudo yang mengandungi selain daripada pengisytiharan pemboleh ubah (dalam tatasusunan).
stringVarDecList – mengembalikan senarai kod pseudo yang mengandungi pengisytiharan pemboleh ubah sahaja (dalam bentuk rentetan).
stringFlowList – mengembalikan senarai kod pseudo yang mengandungi selain daripada pengisytiharan pemboleh ubah (dalam bentuk rentetan).
stringVariableTable – mengembalikan senarai pemboleh ubah (dalam bentuk rentetan).
Data-data yang disimpan dalam kelas ini ialah; pseudostudent – input kod pseudo jawapan pelajar (dalam bentuk rentetan). pseudoschema – input kod pseudo model penyelesaian(dalam bentuk rentetan). pseudostudentArray – kod pseudo jawapan pelajar (dalam bentuk tatasusunan). pseudoschemaArray – kod pseudo model penyelesaian (dalam bentuk
tatasusunan). markvardec – markah untuk pemboleh ubah. markflow – markah untuk kod pseudo aliran aturcara. totalmark – markah perbandingan (markvardec + markflow). vdsStudent – kod pseudo pengisytiharan pemboleh ubah pelajar (dalam bentuk
tatasusunan). vdsSchema – kod pseudo pengisytiharan pemboleh ubah model penyelesaian
(dalam bentuk tatasusunan). flowStudent – kod pseudo aliran kerja pelajar (dalam bentuk tatasusunan). flowSchema – kod pseudo aliran kerja model penyelesaian (dalam bentuk
tatasusunan). stdVarTable – memegang senarai pemboleh ubah terdapat dalam kod-pseudo
jawapan pelajar. schemaVarTable – memegang senarai pemboleh ubah terdapat dalam kod-
pseudo skema jawapan. highest – memegang markah yang paling tinggi antara semua markah
perbandingan. schemanumber – bilangan model penyelesaian yang dibekalkan.
Metod-metod yang terdapat dalam kelas PembandingKodPseudo dan peranan masing-masing.
ComparePseudocodes – konstruktor kelas ini. Menerima dua kod pseudo; iaitu kod pseudo pelajar dan kod pseudo model penyelesaian. Keduanya dalam bentuk rentetan. Selepas kedua-dua kod pseudo diubah format, kelas ini akan memanggil metod compareFlow, compareDeclaration dan mengira markah keseluruhan.
pseudocodeToArrayLine – metod ini akan mengubah kod pseudo daripada bentuk rentetan kepada bentuk tatasusunan.
compareDeclaration – compareFlow – membuat perbandingan antara kod pseudo aliran kerja pelajar
aturcara dan kod pseudo aliran kerja model penyelesaian. Peratus kesamaan antara keduanya diperolehi dengan menggunakan fungsi similar_text (Manual PHP, 2007) yang terdapat dalam pustaka PHP.
getTotalMark – mengembalikan markah keseluruhan. getFlowMark – mengembalikan markah peratus kesamaan untuk kod pseudo
aliran kerja. getVariableMark – mengembalikan markah untuk kesamaan senarai
pembolehubah. getStringFlowStudent – mengembalikan kod pseudo aliran kerja pelajar (dalam
bentuk rentetan). getStringFlowSchema – mengembalikan kod pseudo aliran kerja model
penyelesaian (dalam bentuk rentetan). analyseVar – membuat analisis tentang berapa bilangan pemboleh ubah berjenis
integer, nombor nyata dan juga aksara. calculateHighestMark – menentukan markah mana yang tertinggi antara semua
perbandingan. getHighestMark – mengembalikan peratus kesamaan yang paling tinggi.