UNIVERSITAS BINA NUSANTARA Program Ganda Teknik Informatika Matematika Skripsi Sarjana Program Ganda Semester Genap 2003/2004 PERANCANGAN BAHASA PEMROGRAMAN BERORIENTASI OBJEK DOGI Ari Prasetyo NIM: 0992980032 ABSTRAK Skripsi ini merupakan perancangan sebuah bahasa pemrograman berorientasi objek bernama DOGI. DOGI dibuat sedemikian rupa sehingga memiliki simplisitas dan ortogonalitas yang tinggi. Perancangan menitikberatkan pada bahasa pemrograman, dan bukan teknik kompilasi. Perancangan bahasa diusahakan menghindari ambiguitas dan tata bahasa dituliskan dengan menggunakan BNF (Backus-Naur Form). Bahasa DOGI yang dihasilkan dalam perancangan ini memiliki sifat objectoriented seperti pada Smalltalk, namun berhasil memiliki disain sintaks dengan elemen-elemen seperti halnya bahasa pemrograman lain. Bahasa lain yang diperbandingkan dengan DOGI di sini adalah C++, C#, Java, dan Object Pascal, yang semuanya adalah bahasa pemrograman berorientasi objek. DOGI memiliki karakteristik sederhana dan ortogonal, dengan ekspresivitas yang memungkinkan penulisan dalam bentuk yang paling intuitif (kecuali dalam hal presedensi operator), disain sintaks yang jelas, dan memiliki metoda-metoda dan kelas-kelas untuk membentuk struktur kendali. Beberapa elemen bahasa pemrograman tidak diimplementasikan pada kompiler untuk mengurangi kompleksitas. Bahasa DOGI yang dibuat dapat memenuhi tujuan semula, yaitu bahasa yang sederhana dan ortogonal. Di sisi yang lain, DOGI memiliki kekurangan seperti terlihat pada masalah presedensi operator. Diharapkan DOGI dapat dikembangkan sehingga kekurangan-kekurangan tersebut dapat tertutupi. Kata dan frasa kunci: Bahasa pemrograman, object-oriented, simplisitas, ortogonalitas, ekspresivitas, struktur kendali. v
PENGANTAR Penulis mengucap syukur kepada Tuhan Yang Maha Esa karena tuntunannya sehingga penulis dapat menyelesaikan skripsi ini, sekalipun banyak sekali hambatan yang penulis hadapi. Berbagai pihak telah membantu terlaksananya penulisan skripsi ini. Oleh karena itu pada kesempatan ini penulis ingin mengucapkan terima kasih kepada: 1. Bapak Wikaria Gazali, S. Si., M. T., yang telah banyak membantu penulis dalam menyelesaikan masalah administrasi, 2. Bapak Junaedi Santoso, Dipl.Ing., M.Kom., selaku pembimbing dari Fakultas Ilmu Komputer, yang banyak memberikan masukan dalam penulisan, 3. Bapak Don Tasman, Drs., M.M., selaku pembimbing dari Fakultas MIPA, bimbingan yang beliau berikan sangat membantu penulis, dan karena beliau telah menjadi editor skripsi ini, 4. Sdri. Anita Wijaya, S.Kom., S.Si., yang membantu penulis selama awal penulisan skripsi, pinjaman bukunya, juga untuk memahami algoritmaalgoritma menyangkut masalah kompilasi (beliau memiliki kemampuan menjelaskan algoritma secara manusiawi kemampuan yang dapat menjawab kebutuhan peradaban ini). Tentu saja penulis tidak beranggapan bahwa skripsi ini adalah sebuah karya yang sempurna. Masih banyak kekurangan di sana-sini, dan penulis berharap pada masa yang akan datang penulis sanggup untuk menuliskan karya ilmiah dengan jauh lebih baik. Sebagai catatan tambahan, Dogi adalah nama seekor anjing yang tinggal bersama penulis. Jakarta, Juli 2004 Penulis Ari Prasetyo 0992980032 vi
DAFTAR ISI HALAMAN JUDUL LUAR...I HALAMAN JUDUL DALAM... II HALAMAN PERSETUJUAN HARDCOVER... II HALAMAN PENGESAHAN DEWAN PENGUJI...IV ABSTRAK...V PENGANTAR...VI DAFTAR ISI... VII DAFTAR TABEL...XI DAFTAR GAMBAR... XII BAB I PENDAHULUAN... 1 1.1 LATAR BELAKANG MASALAH... 1 1.2 RUANG LINGKUP... 4 1.3 TUJUAN DAN MANFAAT... 5 1.3.1 Tujuan... 5 1.3.2 Manfaat... 6 1.4 METODOLOGI... 6 BAB II LANDASAN TEORI... 7 2.1 TEORI HIMPUNAN... 7 vii
2.1.1 Himpunan dan Elemen himpunan... 7 2.1.2 Subhimpunan, kesamaan dua himpunan, dan ekivalensi dua himpunan... 7 2.1.3 Operasi-operasi pada himpunan... 8 2.1.4 Relasi biner... 10 2.1.5 Penutup (closure)... 11 2.1.6 Fungsi... 13 2.2 BAHASA PEMROGRAMAN... 14 2.2.1 Kategori bahasa pemrograman... 14 2.2.2 Bahasa pemrograman imperatif... 14 2.2.3 Bahasa pemrograman berorientasi objek... 18 2.2.4 Kriteria evaluasi bahasa pemrograman... 22 2.3 TEORI BAHASA DAN OTOMATA... 27 2.3.1 Tata bahasa (grammar)... 28 2.3.2 Hirarki bahasa menurut Chomsky... 31 2.3.3 Backus-Naur Form dan Extended Backus-Naur Form... 32 2.3.4 Otomata... 34 2.4 TEKNIK KOMPILASI... 36 2.4.1 Proses kompilasi... 36 2.4.2 Semantik operasional... 39 BAB III PERANCANGAN... 40 3.1 SPESIFIKASI BAHASA DOGI... 40 3.1.1 Token... 40 3.1.2 Struktur program... 51 viii
3.1.3 Package... 51 3.1.4 Kelas... 53 3.1.5 Ekspresi... 63 3.1.6 Package System... 65 3.2 PERANCANGAN KOMPILER DOGI... 73 3.2.1 Spesifikasi rancangan... 73 3.2.2 Antarmuka pemakai... 74 3.2.3 Scanner... 74 3.2.4 Parser... 74 3.2.5 Aturan semantik tata bahasa DOGI... 75 3.3 PERANCANGAN DOGIVM (DOGI VIRTUAL MACHINE)... 81 3.3.1 Instruksi-instruksi dasar DOGIVM... 81 3.3.2 Siklus eksekusi instruksi... 84 3.3.3 State... 84 BAB IV HASIL PENELITIAN DAN PENERAPAN... 87 4.1 KARAKTERISTIK BAHASA PEMROGRAMAN DOGI... 87 4.1.1 Simplisitas ortogonalitas... 87 4.1.2 Struktur kendali... 88 4.1.3 Tipe data dan struktur... 89 4.1.4 Disain sintaks... 90 4.1.5 Abstraksi... 91 4.1.6 Ekspresivitas... 91 4.1.7 Type checking... 91 ix
4.1.8 Aliasing... 92 4.2 PERBANDINGAN DENGAN BAHASA PEMROGRAMAN LAINNYA... 92 4.2.1 Komponen yang dibandingkan... 93 4.2.2 Perbandingan secara umum dengan C++, C#, Java, dan Object Pascal... 95 4.2.3 Perbandingan secara khusus dengan C++... 96 4.2.4 Perbandingan secara khusus dengan bahasa C#... 97 4.2.5 Perbandingan secara khusus dengan bahasa Java... 97 4.2.6 Perbandingan secara khusus dengan Object Pascal Delphi... 97 4.3 CONTOH PROGRAM... 98 BAB V SIMPULAN DAN SARAN... 99 5.1 SIMPULAN... 99 5.2 SARAN PENGEMBANGAN... 100 DAFTAR PUSTAKA... 101 RIWAYAT HIDUP... 103 LAMPIRAN A LAMPIRAN B LAMPIRAN C PRODUKSI TATA BAHASA DOGI...L1 KODE SUMBER PROGRAM DOGI...L9 PERBANDINGAN CONTOH PROGRAM...L35 x
DAFTAR TABEL Tabel 3.1 Karakter-karakter escape yang berlaku... 45 Tabel 3.2 Pemisah dalam bahasa DOGI... 49 Tabel 3.3 Daftar metoda yang terdapat dalam kelas void... 68 Tabel 3.4 Daftar metoda yang terdapat dalam kelas int... 69 Tabel 3.5 Daftar metoda yang terdapat dalam kelas bool... 69 Tabel 3.6 Daftar metoda yang terdapat dalam kelas real... 70 Tabel 3.7 Daftar metoda yang terdapat dalam kelas string... 70 Tabel 3.8 Daftar metoda yang terdapat dalam kelas array... 71 Tabel 3.9 Daftar metoda yang terdapat dalam kelas code... 71 Tabel 3.10 Daftar metoda yang terdapat dalam kelas _if... 72 Tabel 3.11 Daftar metoda yang terdapat dalam kelas _loop... 72 Tabel 3.12 Daftar metoda yang terdapat dalam kelas console... 72 Tabel 3.13 Daftar opsi yang tersedia dalam program DOGI... 74 Tabel 3.14 Daftar instruksi DOGIVM... 84 Tabel 4.1 Perbandingan fitur-fitur yang dimiliki bahasa-bahasa pemrograman... 94 xi
DAFTAR GAMBAR Gambar 2.1 Perubahan state awal menjadi state akhir (sumber: Morgan (1994, p4))... 14 Gambar 2.2 Proses kompilasi (sumber: Sebesta (2002))... 37 Gambar 3.1 Graf sintaks untuk digit... 42 Gambar 3.2 Graf sintaks untuk digit heksadesimal... 43 Gambar 3.3 Graf sintaks untuk literal integer... 43 Gambar 3.4 Graf sintaks untuk literal floating-point... 44 Gambar 3.5 Graf sintaks untuk karakter tunggal... 46 Gambar 3.6 Graf sintaks untuk karakter... 46 Gambar 3.7 Graf sintaks untuk literal string... 46 Gambar 3.8 Graf sintaks untuk literal array... 47 Gambar 3.9 Graf sintaks untuk literal code... 48 Gambar 3.10 Graf sintaks untuk komentar... 50 Gambar 3.11 Graf sintaks untuk file program dalam bahasa DOGI... 51 Gambar 3.12 Graf sintaks untuk package... 52 Gambar 3.13 Graf sintaks untuk class... 54 Gambar 3.14 Graf sintaks untuk field... 55 Gambar 3.15 Graf sintaks untuk metoda... 57 Gambar 3.16 Graf sintaks untuk properti... 60 Gambar 3.17 Graf sintaks untuk antarmuka kelas... 62 Gambar 3.18 Graf sintaks untuk ekspresi... 64 Gambar 3.19 Graf sintaks untuk term... 65 xii
Gambar 3.20 Graf sintaks untuk objek... 65 Gambar 3.21 Siklus fetch-execute DOGIVM... 86 xiii