• Tidak ada hasil yang ditemukan

Implementasi Dan Pengujian

N/A
N/A
Protected

Academic year: 2021

Membagikan "Implementasi Dan Pengujian"

Copied!
9
0
0

Teks penuh

(1)

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

(2)

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 =

(3)

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;

(4)

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 {

(5)

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;

(6)

*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

(7)

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..

(8)

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

(9)

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.

Gambar

Tabel V-1 Batasan Implementasi
Tabel simbol diimplementasikan sebagai tabel hash. Elemen paling penting dari tabel  hash adalah fungsi hash dan badan tabel
Tabel V-3 implementasi simbol dan sistem tipe
Tabel V-4 Implementasi fungsi hash
+2

Referensi

Dokumen terkait

Selanjutnya dilakukan perhitungan menggunakan program SAP untuk menghitung gaya gaya yang bekerja pada jembatan untuk menghitung ikatan angin, penggantung, dan pelengkung yang

2.4.6 Gerak Lanjutan pada Pukulan Backhand Overhead Lob. Setelah pemain melakukan Pukulan Backhand Overhead Lob Putarlah tubuh hingga menghadap ke net lakukan langkah

Sedangkan menurut tingkat pengeluaran rumah tangga per kapita, terdapat kecenderungan semakin tinggi tingkat pengeluaran rumah tangga semakin rendah Persentase perempuan yang

Ciri utama sistem pelaporan keuangan di Jerman adalah laporan secara pribadi oleh auditor kepada dewan direktur pengelola perusahaan dan dewan pengawas perusahaan,

Interpretasi data ini dilakukan dengan cara menentukan hubungan antara beberapa regulasi yang mengatur mengenai hukum lingkungan seperti Undang-Undang Nomor 32 Tahun

tingkat kerentanan kawasan tinggi sebaiknya diprioritaskan sebagai zona inti maupun zona rimba, mengingat daerah tersebut merupakan daerah bahaya erosi, daerah

2015 Judul Paper : Pengaruh Abu Vulkanik Kelud dan Pupuk Kandang Terhadap Ketersediaan dan Serapan Sulfur Pada Jagung.. di

Temuan ini berarti bahwa anak yang orangtuanya memberikan stimulasi psikososial yang optimal, memiliki tingkat pendidikan yang tinggi, dan memiliki persepsi yang positif