63
BAB V
Implementasi Dan Pengujian
Bab ini membahas implementasi dari prototipe perangkat lunak c2p, pembahasan yang dicakup adalah lingkungan implementasi, batasan implementasi, dan pembahasan hasil implementasi. Pembahasan mengenai pengujian perangkat lunak juga dilakukan, meliputi metode pengujian dan hasil pengujian.
5.1 Implementasi
Pembahasan mengenai implementasi mencakup lima aspek, yaitu lingkungan perangkat lunak, lingkungan perangkat keras, batasan implementasi, implementasi struktur data dan implementasi modul.
5.1.1 Lingkungan Perangkat Lunak
Deskripsi lingkungan perangkat lunak dari proses pengembangan aplikasi translator adalah sebagai berikut :
a. Sistem operasi : Open SuSe Linux 10.3 kernel 2.6.22.17-0.1 b. Parser generator : GNU Bison 1.875c
c. Scanner generator : Flex 2.5.33
d. Kompilator C : GNU C Compiler GCC-4.1
e. Kompilator Pascal : Free Pascal Compiler ( FPC ) 2.2.0 f. Editor teks : Vim 7.1
g. Kakas perangkat lunak lainnya : GNU Make 3.81, GDB 6.6.50.20070706
5.1.2 Lingkungan Perangkat Keras
Deskripsi lingkungan perangkat keras adalah sebagai berikut : a. Memori : DDR1 512 MB Visipro
c. Cakram keras : Seagate Barracuda 40 GB 5400 rpm
5.2 Batasan
Implementasi
Untuk membatasi kompleksitas, baik dalam tingkat kerumitan (kesulitan) implementasi secara teknis dan skala/ukuran program, maka proses implementasi dibatasi. Tabel V-1 menampilkan batasan proses implementasi
Tabel V-1 Batasan Implementasi
item keterangan Preprocessing Hanya menangani pembuangan komentar
Penamaan ulang simbol Tidak menangani penamaan ulang simbol yang clash dengan kata kunci bahasa Pascal
Deklarasi variabel Translasi deklarasi variabel tipe dasar, struktur, pointer dan senarai
Deklarasi tipe dengan typedef Translasi dari typedef ke type Deklarasi enumerasi Translasi dari enumerasi ke const
Deklarasi dan definisi fungsi Translasi dari deklarasi dan definisi fungsi menjadi subrutin
Tipe String ( Pascal ) Tidak mengimplementasikan tipe string
Tipe kompleks Tidak melakukan translasi tipe kompleks ( seperti pointer to pointer )
escape sequence Tidak ditranslasi
Operator sizeof Operator sizeof ditranslasi menjadi konstanta integer Operator relasional Translasi dilakukan
Operator aritmatika dasar Translasi dilakukan
Operator logika Translasi operator && dan | |
Operator increment dan decrement Operator ditranslasi menjadi pustaka standar Pascal Operator assignment Hanya ada satu operator assignment yang ditranslasi,
yaitu operator =
Lanjutan Tabel V-1
Item keterangan
Operator bit Tidak ditranslasi
Akses elemen senarai dan struktur Translasi dilakukan
Pemanggilan fungsi Translasi dilakukan
Pustaka standar Hanya melakukan translasi printf dan scanf Statement pengulangan Hanya mengimplementasikan translasi while Statement pemilihan Hanya mengimplementasikan translasi if Jump statement Tidak ditranslasi
5.3 Implementasi Struktur Data
Upa bab ini menguraikan implementasi dari rancangan stuktur data yang telah dibahas pada bab sebelumnya. Semua implementasi dilakukan dalam bahasa C.
5.3.1 Implementasi tabel simbol
Tabel simbol diimplementasikan sebagai tabel hash. Elemen paling penting dari tabel hash adalah fungsi hash dan badan tabel. Fungsi hash melakukan kalkulasi saat pencarian string, sedangkan badan tabel menyimpan referensi ke obyek di memori. Tabel V-2 menampilkan implementasi tabel hash.
Tabel V-2 Implementasi tabel hash
typedef struct BUCKET /*elemen dari list (collision chain).*/ {
struct BUCKET *next; struct BUCKET **prev; } BUCKET;
typedef struct HASH_TAB /*implementasi tabel simbol*/ {
int sz, nmemb;
unsigned (*hash_func)(); /*pointer ke fungsi hash*/ int (*cmp_func)();
BUCKET *data[1]; /*data dari tabel hash*/ } HASH_TAB;
5.3.2 Implementasi simbol, struktur dan sistem tipe
Simbol ditambahkan secara bebas ke tabel hash karena tabel hash bersifat generic. Tabel V-3 menampilkan implementasi simbol.
Tabel V-3 implementasi simbol dan sistem tipe
typedef struct symbol /*representasi simbol*/ {
unsigned char name[ MAX_NAME ];/*nama simbol.*/
short unsigned level :13; /*blok level simbol dideklarasi*/ short unsigned implicit : 1;
short unsigned duplicate: 1; /*flag bahwa simbol terduplikasi*/ short unsigned _auto : 1; /*simbol yang dibuat otomatis*/
struct link *dcl; /*sistem representasi tipe*/ struct link *end;
struct symbol *args; /* parameter fungsi atau initializer*/ struct symbol *next; /* implementasi cross link*/
struct object *p_obj; /* pointer ke obyek PASCAL. */ } symbol;
typedef struct specifier /*sistem tipe*/ {
short unsigned noun : 4;/*tipe data*/
short unsigned sclass : 3;/*storage class: static, extern, dll*/ short unsigned qualif : 2;/*qualifier: const,volatile*/
short unsigned _long : 2;/*long atau short*/ short unsigned _sign : 2;/*signed atau unsigned*/
union {
int v_int;
unsigned v_uint;
long v_long;
unsigned long v_ulong;
float v_float;
double v_double;
struct structdef *v_struct; struct symbol *v_tdef; } const_val;
} specifier;
typedef struct declarator {
short unsigned nmemb : 14;/*jumlah elemen (kasus array)*/
short unsigned dclass : 2; /*declarator: pointer, array, function*/ } declarator;
typedef struct structdef {
unsigned char name[ MAX_NAME ]; /*nama struktur*/
Lanjutan Tabel V-3
short unsigned _union : 2 ; /*flag penanda union*/ short unsigned level : 13;
symbol *fields; /*item dari struktur*/ } structdef;
5.3.3 Implementasi fungsi hash
Spesifikasi fungsi hash diambil dari [GRU00]. Fungsi hash bergantung pada ukuran dari tabel hash. Pada tugas akhir ini, ukuran tabel hash disesuaikan dengan spesifikasi fungsi hash, yaitu 1008.
Tabel V-4 Implementasi fungsi hash
/*definisi fungsi hash dari "Modern Compiler Design"*/
#define K 613 /*K adalah bilangan pengali sebagai pengacak*/
unsigned hash_str( s )/*fungsi bekerja pada string*/ char *const s;
{
register unsigned long h = 0 ; unsigned i = 0 ; for( ; s[i] ; ) h= s[i++]*K + h ; return (h & ~(~0 << 30)); } 5.3.4 Implementasi AST
Algoritma yang menelusuri pohon parsing tidak bersifat rekursif melainkan DFS iteratif (Deep First Search), sehingga tiap simpul AST memiliki beberapa pointer yang memungkinkan proses traversal dapat kembali ke simpul sebelumnya yang sudah dikunjungi.
Tabel V-5 Implementasi AST
typedef struct ast {
short unsigned info; /*kode komponen parsing*/ union { int v_int; float v_float; symbol* v_symbol; ... } dnode;
*left, *right; /**/ } AST;
5.4 Implementasi
modul
Pada bab IV telah diuraikan struktur modul program secara global. Rincian implementasi modul per berkas dapat dilihat pada tabel V-6
Tabel V-6 Detail implementasi modul
Nama modul Berkas pendukung
Penganalisis leksikal c.lex, lex.yy.c Penganalisis sintaksis c.y, c.tab.h, c.tab.c
Struktur data internal symtab.h, symtab.c, hashtab.h, hashtab.c, ast.h
Pembangkit kode decl.c, pascal.c
5.5 Pengujian
Upa bab ini membahas pengujian perangkat lunak c2p. Hal yang dibahas meliputi dua macam, yaitu : metode pengujian dan hasil pengujian.
5.5.1 Metode Pengujian
Metode pengujian yang diterapkan pada tugas akhir ini adalah black box. Program menerima berkas masukan, lalu menghasilkan berkas keluaran dan yang terakhir, berkas keluaran dievaluasi oleh kompilator pascal fpc.
5.5.2 Hasil Pengujian
Upabab ini menyajikan hasil proses pengujian untuk masing-masing kasus uji. Tidak semua pengujian berhasil, ada kasus uji dimana berkas keluaran hasil proses translasi gagal dikompilasi oleh kompilator fpc. Berkas masukan dan keluaran untuk masing-masing pengujian dapat dilihat pada lampiran E.
Pengujian 1
yang menjadi masyhur karena dikenalkan oleh Kernighan-Ritchie dalam buku “The C Programming Language”. Berkas masukan dan keluaran untuk pengujian 1 dapat dilihat pada tabel E-1. Berkas keluaran ( helloworld.pas ) lolos kompilasi oleh fpc dan kode hasil kompilasi dapat dieksekusi.
Pengujian 2
Pengujian ini menampilkan proses translasi dari deklarasi variabel dari tipe dasar yang dapat ditangani oleh program. Berkas masukan dan keluaran untuk pengujian 2 dapat dilihat pada tabel E-2. Berkas keluaran ( type.pas ) lolos kompilasi oleh fpc. dan kode hasil kompilasi dapat dieksekusi.
Pengujian 3
Pengujian ini menampilkan proses translasi enum pada C ke dalam konstanta bilangan bulat pada Pascal. Berkas masukan dan keluaran untuk pengujian 3 dapat dilihat pada tabel E-3. Berkas keluaran ( enum.pas ) lolos kompilasi oleh fpc dan kode hasil kompilasi dapat dieksekusi..
Pengujian 4
Pengujian ini mengenalkan penggunaan input pada program uji. Program menerima masukan dari user berupa lima nilai bilangan bulat, lalu menghitung nilai rata-rata ( average )-nya. Berkas masukan dan keluaran untuk pengujian 4 dapat dilihat pada tabel E-4. Berkas keluaran ( avg.pas ) lolos kompilasi oleh fpc dan kode hasil kompilasi dapat dieksekusi..
Pengujian 5
Pengujian ini mengenalkan penggunaan subrutin pada program dan juga implementasi statement seleksi IF, pada subrutin max, yang menerima dua bilangan bulat dan menentukan mana nilai maksimum dari keduanya. Berkas masukan dan keluaran untuk pengujian 5 dapat dilihat pada tabel E-5. Berkas keluaran ( max.pas ) lolos kompilasi oleh fpc dan kode hasil kompilasi dapat dieksekusi..
Pengujian 6
Pengujian 6 mengenalkan translasi operator aritmatika mod. Program membaca masukan dari user berupa angka tahun, lalu menentukan apakah tahun tersebut kabisat atau bukan. Berkas masukan dan keluaran untuk pengujian 6 dapat dilihat pada tabel E-6. Berkas keluaran ( mod.pas ) lolos kompilasi oleh fpc dan kode hasil kompilasi dapat dieksekusi..
Pengujian ini mengenalkan implementasi statement pengulangan WHILE pada subrutin power, yang menghitung nilai perpangkatan dua bilangan bulat. Berkas masukan dan keluaran untuk pengujian ini dapat dilihat pada tabel E-7. Berkas keluaran power.pas lolos kompilasi oleh fpc dan kode hasil kompilasi dapat dieksekusi..
Pengujian 8
Pengujian 8 menampilkan proses translasi operator sizeof pada C menjadi bilangan bulat pada Pascal. Operator sizeof yang diimplementasikan pada tugas akhir ini hanya menangani tipe dasar. Operator sizeof yang menangani obyek program tidak diimplementasikan. Berkas masukan dan keluaran untuk pengujian ini dapat dilihat pada tabel E-8. Berkas keluaran sizeof.pas lolos kompilasi oleh fpc dan kode hasil kompilasi dapat dieksekusi..
Pengujian 9
Pengujian ini menampilkan proses translasi senarai multidimensi. Penggunaan senarai multidimensi pada program uji adalah untuk merepresentasikan matriks. Berkas masukan dan keluaran untuk pengujian ini dapat dilihat pada tabel E-9. Berkas keluaran ( matrix.pas ) lolos kompilasi dan kode hasil kompilasi dapat dieksekusi..
Pengujian 10
Pengujian 10 menampilkan proses translasi passing parameter tipe kompleks ( dalam hal ini adalah pointer to integer ) dari suatu subrutin. Subrutin yang dipanggil ( callee ) pada pengujian ini berfungsi menukar dua nilai bilangan bulat. Subrutin pemanggil ( caller ) melakukan passing parameter berupa alamat ( address ) dari dua variabel bilangan bulat. Berkas masukan dan keluaran untuk pengujian 10 dapat dilihat pada tabel E-10. Berkas keluaran ( swap.pas ) lolos kompilasi oleh fpc dan kode hasil kompilasi dapat dieksekusi..
Pengujian 11
Pengujian 11 menampilkan proses translasi struktur sederhana. Berkas masukan dan keluaran untuk pengujian ini dapat dilihat pada tabel E-11. Berkas keluaran ( simple_struct.pas ) lolos kompilasi oleh fpc dan kode hasil kompilasi dapat dieksekusi..
Pengujian 12
Pada pengujian 12, program uji menerima berkas masukan yang menggunakan tipe struktur kompleks, yaitu structure of structure. Penerjemahan struktur kompleks sendiri berhasil, tetapi berkas keluaran gagal dikompilasi oleh fpc karena dalam kode masukan, dilakukan operasi assignment antar struktur. ANSI C mendukung structure assignment namun Pascal tidak. Proses
assignment harus dipecah menjadi per member struktur. Tugas akhir tidak menangani hal ini. Kedua berkas (complx_struct.c dan complx_struct.pas) dapat dilihat pada tabel E-12.
Pengujian 13
Program uji menerima masukan berkas berupa kode yang menggunakan UDT ( User Defined Type ). Program melakukan translasi dari UDT C ke UDT Pascal. Berkas masukan dan keluaran dapat dilihat pada tabel E-13. Berkas keluaran ( point.pas ) lolos kompilasi oleh fpc dan kode hasil kompilasi dapat dieksekusi..
Pengujian 14
Pada pengujian 14, berkas masukan berisi sekumpulan prosedur untuk mengurutkan senarai bilangan bulat dengan menggunakan metode shell sort. Berkas keluaran shell_sort.pas lolos kompilasi oleh fpc dan kode hasil kompilasi dapat dieksekusi.. Berkas masukan dan keluaran dapat dilihat pada tabel E-14.
Pengujian 15
Pada pengujian ini, program masukan berisi implementasi desktop calculator sederhana. Program uji yang berupa kalkulator ini menggunakan seluruh fitur yang diimplementasikan pada program translator. Berkas masukan dan keluaran dapat dilihat pada tabel E-15. Berkas keluaran ( calc.pas ) lolos kompilasi oleh fpc dan kode hasil kompilasi dapat dieksekusi.