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
ii
Abstraksi Tugas Akhir 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
iv
Daftar Isi 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
viii
Daftar Tabel 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
x
Daftar Istilah
Istilah / singkatan
Penjelasan
AST
Abstract Syntax Tree
Bison
Nama salah satu software parser generator
DFA
Deterministic Finite Automaton
Flex
Nama salah satu software scanner generator
Grammar
Aturan yang menata rangkaian kalimat atau kata dalam bahasa Teknik identifikasi obyek dengan cara mengubah obyek menjadi kode id
Hash
unik, sehingga memungkinkan obyek dicari dengan cepat Program yang menerjemahkan bahasa tingkat tinggi menjadi kode
kompilator
assembly
Lex
Nama salah satu software scanner generator
Macro
Fasilitas pada bahasa C yang dipakai selama preprocessing
NFA
Nondeterministic Finite Automaton
Parser
Program yang melakukan proses parsing
Scanner
Program yang memecah kode sumber menjadi serangkaian token
Token
Rangkaian karakter/simbol yang bermakna dalam suatu bahasa
Yacc
Nama salah satu software parser generator