PENGEMBANGAN PROTOTIPE APLIKASI KONVERSI KODE DARI BAHASA C KE PASCAL LAPORAN TUGAS AKHIR Disusun Sebagai Syarat Kelulusan Tingkat Sarjana oleh : Ipam Fuaddina Adam / 13502079 PROGRAM STUDI TEKNIK INFORMATIKA SEKOLAH TEKNIK ELEKTRO DAN INFORMATIKA INSTITUT TEKNOLOGI BANDUNG 2008
i Lembar Pengesahan Program Studi Sarjana Informatika Pengembangan Prototipe Aplikasi Konversi Kode Dari Bahasa C Ke Pascal Tugas Akhir Program Studi Sarjana Informatika ITB Oleh Ipam Fuaddina Adam / 13502079 Telah disetujui dan disahkan sebagai laporan tugas akhir di Bandung, pada tanggal 17 Juni 2008 Pembimbing Ir. Rinaldi Munir, M.T NIP. 132084796
Abstraksi Tugas Akhir ii Tugas akhir ini bertujuan membangun program yang melakukan proses konversi kode sumber program dari bahasa C ke Pascal. Proses translasi dilakukan dengan membuat rule yang mencocokkan grammar dari C dan Pascal, rule ini kemudian dipakai untuk memproduksi kode yang ekivalen dengan kode masukan. Beberapa komponen program dibangun dengan bantuan kakas scanner generator dan parser generator. Pada akhir proses pengembangan, dilakukan pengujian untuk mengetahui kebenaran jalannya program. Tidak semua komponen bahasa C ditranslasi, fitur-fitur yang kompleks seperti C preprocessing, function pointer, tipe kompleks ( pointer to pointer ), dll, tidak ditranslasi. Alur kerja dari program konversi kode dibagi menjadi tiga bagian : preprocessing ( dilakukan dengan memanggil program eksternal ), scanning parsing ( komponen ini dikembangkan dengan menggunakan kakas ) dan code generation, yaitu proses penerjemahan dan pembangkitan kode, yang merupakan inti dari tugas akhir. Seluruh komponen program konversi kode dikembangkan dengan bahasa C. Hasil akhir dari tugas akhir ini adalah prototipe perangkat lunak translator yang mampu mengkonversi kode dari bahasa C ke Pascal. Program menerima inputi berupa berkas ( file ) yang berisi kode sumber program dalam bahasa C, dan menghasilkan keluaran berupa file yang berisi kode program yang ekivalen dalam bahasa Pascal. Nama file keluaran selalu sama dengan nama file masukan, hanya berbeda ekstensi menjadi.pas. Program konversi kode dioperasikan lewat console dan berjalan pada sistem operasi Linux/Unix. Kata kunci : kompilator, translator, grammar, penganalisis leksikal (scanner), penganalisis sintaks ( parser ), pembangkit kode ( code generator ), tabel simbol ( symbol table ).
iii Kata Pengantar Puji syukur penulis panjatkan kepada Tuhan YME atas berkat dan rahmat-nya, tugas akhir ini dapat diselesaikan dengan lancar. Selama pelaksanaan tugas akhir ini, penulis mendapatkan banyak dukungan dari berbagai pihak, tanpa mereka tugas akhir ini tidak akan selesai. Penulis ingin mengucapkan terima kasih, kepada : 1. Bapak dan ibu yang tiada hentinya memberikan dukungan moral, kasih, dan sumbangan pemikiran 2. Bapak Ir. Rinaldi Munir, M.T. yang telah bersedia menjadi dosen pembimbing selama tugas akhir ini dilaksanakan 3. Adikku Deka yang aku sayangi, yang selalu menanyakan perkembangan tugas akhir ini 4. Semua staf dosen dan karyawan teknik informatika ITB 5. Semua civitas akademika teknik informatika ITB yang menemani hari demi hari selama penulis menimba ilmu di ITB Sebagai penutup, penulis menyadari bahwa tugas akhir ini adalah karya yang jauh dari sempurna, oleh karenanya penulis selalu mengharapkan kritik dan saran dari pembaca, demi proses perbaikan di masa yang akan datang. Bandung, 12 Juni 2008 Penulis
Daftar Isi iv Lembar Pengesahan... ii Abstraksi Tugas Akhir... ii Kata Pengantar... iii Daftar Isi... iv Daftar Gambar... vii Daftar Tabel... viii BAB I PENDAHULUAN... 11 1.1 Latar Belakang... 11 1.2 Rumusan Masalah... 13 1.3 Tujuan... 13 1.4 Batasan Masalah... 14 1.5 Metodologi... 14 1.6 Sistematika Laporan... 15 BAB II DASAR TEORI... 16 2.1 Kompilator... 16 2.2 Penganalisis Leksikal / Lexical Analyzer... 18 2.3 Penganalisis Sintaks / Grammar... 18 2.3.1 Bottom-up Parser... 19 2.3.2 Top-down Parser... 20 2.4 Pembangkitan Kode... 20 2.5 Tabel Simbol... 21 2.6 C dan Pascal... 23 2.6.1 Struktur Program... 24 2.6.2 Tipe String... 24 2.6.3 Komentar... 25 2.6.4 Deklarasi... 25 2.6.5 Operator Assignment... 26 2.6.6 Standar Input Output... 26 2.6.7 Statement for... 27 2.6.8 Macro... 27
v 2.6.9 Senarai... 28 2.6.10 Subrutin... 29 2.7 Kakas Parser Generator dan Scanner Generator... 29 BAB III ANALISIS PEMECAHAN MASALAH... 31 3.1 Alur Kerja Global... 31 3.2 Spesifikasi Grammar Bahasa C... 32 3.3 Proses Parsing... 36 3.4 Konfigurasi Kakas Flex dan Yacc... 41 3.5 Proses Konversi... 44 BAB IV ANALISIS DAN PERANCANGAN PERANGKAT LUNAK... 50 4.1 Analisis Aliran Data... 50 4.1.1 Diagram level 0... 50 4.1.2 Diagram level 1... 51 4.1.3 Diagram Level 2 Proses 3... 52 4.2 Analisis Modul... 52 4.3 Perancangan Struktur Data... 54 4.3.1 Specifier dan Declarator... 54 4.3.2 Representasi Tipe... 56 4.3.3 Implementasi Tabel Simbol... 57 4.3.4 Elemen Tabel Simbol... 59 4.3.5 Struktur Tabel Simbol... 60 4.3.6 AST ( Abstract Syntax Tree )... 60 4.4 Perancangan Antarmuka dan Perintah... 62 BAB V Implementasi Dan Pengujian... 63 5.1 Implementasi... 63 5.1.1 Lingkungan Perangkat Lunak... 63 5.1.2 Lingkungan Perangkat Keras... 63 5.2 Batasan Implementasi... 64 5.3 Implementasi Struktur Data... 65 5.3.1 Implementasi Tabel Simbol... 65 5.3.2 Implementasi Simbol dan Sistem tipe... 66 5.3.3 Implementasi Fungsi Hash... 67
vi 5.3.4 Implementasi AST... 67 5.4 Implementasi modul... 68 5.5 Pengujian... 68 5.5.1 Metode Pengujian... 68 5.5.2 Hasil Pengujian... 68 BAB VI Kesimpulan dan Saran... 72 6.1 Kesimpulan... 72 6.2 Saran... 73 DAFTAR PUSTAKA... 74 LAMPIRAN... 75
vii Daftar Gambar Gambar I-1 Alur Kerja Kompilator Empat Fase... 12 Gambar II-1 Kompilator Empat Fase... 17 Gambar II-2 Pohon Parsing... 20 Gambar III-1 Alur Kerja Global... 31 Gambar IV-1 diagram DFD level 0... 50 Gambar IV-2 Diagram DFD level 1... 51 Gambar IV-3 Diagram DFD level 2 proses 3... 52 Gambar IV-4 Struktur modul program... 53 Gambar IV-5 Representasi tipe... 56 Gambar IV-6 Tabel simbol... 58 Gambar IV-7 Struktur item tabel simbol... 59 Gambar IV-8 Stuktur AST... 61 Gambar IV-9 Pemanggilan program dari console... 62
Daftar Tabel viii Tabel II-1 Contoh Tabel Simbol... 22 Tabel II-2 Perbandingan C dan Pascal... 23 Tabel II-3 Pebandingan Struktur Program... 24 Tabel II-4 String pada C dan Pascal... 25 Tabel II-5 Deklarasi Variabel... 26 Tabel II-6 Input dan Output... 27 Tabel II-7 Pengulangan for... 27 Tabel II-8 Efek preprocessing... 28 Tabel II-9 Penggunaan Senarai pada C dan Pascal... 28 Tabel II-10 Subrutin pada C dan Pascal... 29 Tabel III-1 Spesifikasi Grammar... 33 Tabel III-2 Pemrosesan Deklarasi Struktur... 37 Tabel III-3 Pemrosesan Deklarasi Enumerasi... 38 Tabel III-4 Pemrosesan Definisi Fungsi... 39 Tabel III-5 Pemrosesan Ekspresi... 40 Tabel III-6 Konfigurasi input untuk Kakas Lex/Flex... 42 Tabel III-7 Konfigurasi input untuk Kakas Yacc/Bison... 43 Tabel III-8 Konversi typedef... 44 Tabel III-9 Pemakaian Nama Tipe sebagai identifier... 45 Tabel III-10 Konversi storage class... 45 Tabel III-11 Penanganan duplikasi visibilitas variabel... 46 Tabel III-12 Pemrosesan struktur... 47 Tabel III-13 Pemrosesan union... 48 Tabel III-14 Pemorsesan typedef... 48 Tabel III-15 Ekspresi Kondisional... 49 Tabel IV-1 keterangan entitas dan proses untuk level 0... 50 Tabel IV-2 keterangan DFD level 1... 51 Tabel IV-3 Proses pembangkitan kode... 52 Tabel IV-4 Penjelasan modul... 53 Tabel IV-5 Senarai pada C dan Pascal... 55
ix Tabel V-1 Batasan Implementasi... 64 Tabel V-2 Implementasi tabel hash... 65 Tabel V-3 implementasi simbol dan sistem tipe... 66 Tabel V-4 Implementasi fungsi hash... 67 Tabel V-5 Implementasi AST... 67 Tabel V-6 Detail implementasi modul... 68
Daftar Istilah x Istilah / singkatan AST Bison DFA Flex Grammar Hash kompilator Lex Macro NFA Parser Scanner Token Yacc Penjelasan Abstract Syntax Tree Nama salah satu software parser generator Deterministic Finite Automaton Nama salah satu software scanner generator Aturan yang menata rangkaian kalimat atau kata dalam bahasa Teknik identifikasi obyek dengan cara mengubah obyek menjadi kode id unik, sehingga memungkinkan obyek dicari dengan cepat Program yang menerjemahkan bahasa tingkat tinggi menjadi kode assembly Nama salah satu software scanner generator Fasilitas pada bahasa C yang dipakai selama preprocessing Nondeterministic Finite Automaton Program yang melakukan proses parsing Program yang memecah kode sumber menjadi serangkaian token Rangkaian karakter/simbol yang bermakna dalam suatu bahasa Nama salah satu software parser generator