Analisis Perancangan Perangkat Lunak Ide (Integrated Development Environment) Fortran G77

(1)

FORTRAN G77

SKRIPSI

JEFRI UMAR 051401042

PROGRAM STUDI S1 ILMU KOMPUTER DEPARTEMEN ILMU KOMPUTER

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SUMATERA UTARA

MEDAN 2009


(2)

SKRIPSI

Diajukan untuk melengkapi tugas dan memenuhi syarat mencapai gelar Sarjana Komputer

JEFRI UMAR 051401042

PROGRAM STUDI S1 ILMU KOMPUTER DEPARTEMEN ILMU KOMPUTER

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SUMATERA UTARA

MEDAN 2009


(3)

PERSETUJUAN

Judul : ANALISIS DAN PERANCANGAN PERANGKAT LUNAK IDE (INTEGRATED DEVELOPMENT ENVIRONMENT) FORTRAN G77

Kategori : SKRIPSI

Nama : JEFRI UMAR

Nomor Induk Mahasiswa : 051401042

Program Studi : SARJANA (S1) ILMU KOMPUTER

Departemen : ILMU KOMPUTER

Fakultas : MATEMATIKA DAN ILMU PENGETAHUAN ALAM (FMIPA) UNIVERSITAS SUMATERA UTARA

Diluluskan di Medan, 15 Juli 2009 Komisi Pembimbing :

Pembimbing 2 Pembimbing 1

Ir. Elviawaty MZ, MT, MM Syahriol Sitorus, S.Si, MIT

NIP 132 306 873 NIP 132 174 687

Diketahui/Disetujui oleh

Departemen Ilmu Komputer FMIPA USU Ketua,

Prof. Dr. Muhammad Zarlis NIP 131 570 434


(4)

PERNYATAAN

ANALISIS DAN PERANCANGAN PERANGKAT LUNAK IDE (INTEGRATED DEVELOPMENT ENVIRONMENT)

FORTRAN G77

SKRIPSI

Saya mengakui bahwa skripsi ini adalah hasil kerja saya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing disebutkan sumbernya.

Medan, 15 Juli 2009

JEFRI UMAR 051401042


(5)

PENGHARGAAN

Puji dan syukur penulis panjatkan kepada Tuhan Yang Maha Pemurah dan Maha Penyayang, dengan limpah karunia-Nya, kertas kajian ini berhasil diselesaikan dalam waktu yang telah ditetapkan.

Ucapan terima kasih penulis sampaikan kepada Syahriol Sitorus, S.Si, MIT dan Ir. Elviawaty MZ, MT, MM selaku pembimbing pada penyelesaian skripsi ini yang telah memberikan panduan dan penuh kepercayaan kepada penulis untuk menyempurnakan kajian ini. Panduan ringkas, padat, dan profesional telah diberikan kepada penulis agar dapat menyelesaikan tugas ini. Ucapan terima kasih juga ditujukan kepada Ketua dan Sekretaris Departemen Ilmu Komputer, Prof. Dr. Muhammad Zarlis dan Syahriol Sitorus, S.Si, M.I.T, Dekan dan Pembantu Dekan Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Sumatera Utara, semua dosen pada Departemen Ilmu Komputer FMIPA USU, pegawai di Ilmu Komputer FMIPA USU, dan rekan-rekan kuliah. Tidak lupa juga penulis menyampaikan terima kasih kepada Ayahanda Salim dan Ibunda Herlinah yang memberikan dukungan, doa, dan semangat tanpa henti. Terakhir, kepada Yuli dan Yudi yang selalu memberikan inspirasi, kepada Johnny yang selalu memberikan semangat, dan juga kepada Sherly yang selalu mendukung dan memotivasi penulis. Semoga Tuhan Yang Maha Esa memberikan limpahan karunia kepada semua pihak yang telah memberikan bantuan, perhatian, serta dukungan kepada penulis dalam menyelesaikan skripsi ini.


(6)

ABSTRAK

Fortran merupakan bahasa pemrograman yang dikhususkan untuk melakukan komputasi numerik, sehingga bahasa Fortran sesuai untuk kepentingan akademis. Tetapi bahasa Fortran tidak umum digunakan oleh mahasiswa, hal ini dikarenakan kurang tersedianya lingkungan pengembangan Fortran; Lingkungan pengembangan mengintegrasikan modul-modul yang dibutuhkan untuk pengembangan program. Isu berikutnya yang perlu diperhatikan adalah otentikasi kode sumber. Diperlukan modul tambahan yang terintegrasi ke dalam lingkungan pengembangan untuk melakukan otentikasi kode sumber. Objektif utama dari kajian ini adalah untuk merancang dan membangun IDE Fortran G77 yang mengintegrasikan modul code editor, compiler chain, dan enkripsi/dekripsi. Menganalisis efisiensi dan efektivitas pengembangan program, serta menganalisis otentikasi kode sumber melalui pemanfaatan IDE tersebut. IDE yang dihasilkan, dinamakan dengan cryptIDE. cryptIDE kemudian dianalisis dan diperoleh, bahwa otentikasi kode sumber lebih terjamin serta efisiensi dan efektivitas pengembangan program menjadi lebih baik dengan pemanfaatan cryptIDE. cryptIDE dikembangkan dengan menggunakan Borland Delphi 7 Enterprise. Paket compiler yang digunakan adalah GNU Fortran G77 versi 2.95.


(7)

IDE (INTEGRATED DEVELOPMENT ENVIRONMENT) FORTRAN G77 SOFTWARE ANALYSIS AND DESIGN

ABSTRACT

Fortran is a programming language that is specialized to do numerical computation, and so, Fortran is suitable for academical use. But Fortran is not popular among the student. This is caused by there are not much Fortran development environment; Development environment integrates modules which are needed in program development. Next concerning issue is source code authentication. Extra module that is integrated to the development environment to authenticate source code is needed. Main objectives of this study is to design and build IDE Fortran G77 that integrates code editor, compiler chain, and encryption/decryption modules. Analyze the efficiency and effectivity of developing program, and also, analyze source code authentication by using the IDE. The IDE is named after cryptIDE. Next, cryptIDE is being analyzed, henced, source code authentication is more safe, and also, the efficiency and effectivity of developing program by using cryptIDE is better. cryptIDE is developed with Borland Delphi 7 Enterprise. Compiler package that is used is GNU Fortran G77 version 2.95.


(8)

DAFTAR ISI

Halaman

Persetujuan ii

Pernyataan iii

Penghargaan iv

Abstrak v

Abstract vi

Daftar Isi vii

Daftar Tabel ix

Daftar Gambar x

Bab 1 Pendahuluan 1

1.1 Latar Belakang 1

1.2 Rumusan Masalah 2

1.3 Batasan Masalah 2

1.4 Tujuan Penelitian 3

1.5 Manfaat Penelitian 3

1.6 Langkah-Langkah Pengerjaan Penelitian 3

1.7 Sistematika Penulisan 4

Bab 2 Landasan Teori 5

2.1 Sejarah Bahasa Pemrograman 5

2.2 Tahapan Proses Penerjemahan Program 6

2.3 Rekayasa Perangkat Lunak 8

2.3.1 Proses Perangkat Lunak 8

2.3.1.1 Spesifikasi Perangkat Lunak 9 2.3.1.2 Perancangan dan Implementasi Perangkat Lunak 9

2.3.1.3 Validasi Perangkat Lunak 10

2.3.1.4 Evolusi Perangkat Lunak 11

2.3.2 Model Proses Perangkat Lunak: Model Proses Air Terjun 11 2.4 Analisis Leksikal, Besaran Leksik, dan Code Highlighting 13 2.5 Algoritma Kriptografi Klasik: Caesar Cipher 14

2.6 Fortran 15

2.6.1 Sejarah Fortran 15

2.6.2 Himpunan Karakter pada Fortran 16

2.6.3 Tipe Data pada Fortran 17

2.6.4 Nama Simbol pada Fortran 18

2.6.5 Pernyataan pada Fortran 18

2.6.6 Struktur Baris pada Fortran 19

2.6.7 Struktur Program pada Fortran 20

2.7 Interaksi Pengguna dengan Fortran 21

Bab 3 Analisis dan Perancangan Perangkat Lunak 23


(9)

3.1.1 Kata Tercadang pada Fortran 23

3.1.2 Konstanta pada Fortran 24

3.1.3 Fortran G77 26

3.2 Diagram Aliran Data (Data Flow Diagram) & Kamus Data 30

3.2.1 Diagram Aliran Data Level 0 30

3.2.2 Diagram Aliran Data Level 1 31

3.2.3 Diagram Aliran Data Level 2 34

3.2.4 Diagram Aliran Data Level 3 38

3.2.5 Kamus Data 40

3.3 State Diagram 43

3.4 Perancangan Antarmuka 46

Bab 4 Hasil dan Pembahasan 54

4.1 Antarmuka cryptIDE 54

4.2 Kode Program cryptIDE 70

4.3 Pembahasan cryptIDE 74

4.3.1 Analisis Memory 74

4.3.2 Analisis Storage 77

4.3.3 Analisis Efisiensi 78

Bab 5 Implementasi dan Pengujian 81

5.1 Implementasi 81

5.1.1 Kebutuhan Sistem Minimum (Minimum System Requirement) 81

5.1.2 Pengaturan cryptIDE 81

5.2 Pengujian cryptIDE 82

Bab 6 Kesimpulan dan Saran 86

6.1 Kesimpulan 86

6.2 Saran 87

Daftar Pustaka 88

Lampiran A: Rincian Fungsi getlexeme 89


(10)

DAFTAR TABEL

Halaman Tabel 2.1 Tabel Substitusi dengan Pergeseran Sejauh 3 Huruf 15 Tabel 2.2 Himpunan Karakter Alphabet dan Karakter Angka 17 Tabel 2.3 Himpunan Karakter Khusus dan Karakter Alphabet Tambahan 17

Tabel 3.1 Daftar Kata Tercadang 24

Tabel 3.2 Penanda Baris 25

Tabel 3.3 Daftar Opsi Wrapper 27

Tabel 3.4 Daftar Opsi Compiler 28

Tabel 3.5 Daftar Opsi Assembler 29

Tabel 3.6 Daftar Opsi Linker 29

Tabel 3.7 Kamus Data Diagram Aliran Data 40

Tabel 4.1 Daftar Opsi Compiler pada Jendela Compiler Options 62 Tabel 4.2 Opsi Environment pada Jendela Environment Options 66 Tabel 4.3 Alokasi Memory Proses cryptIDE untuk n Buah Berkas 76 Tabel 4.4 Memory yang Digunakan untuk Memuat Sebuah Berkas 77 Tabel 4.5 Rincian Ukuran Berkas dan Folder cryptIDE 78


(11)

DAFTAR GAMBAR

Halaman

Gambar 2.1 Proses Perakitan Program 5

Gambar 2.2 Tahapan Proses Transformasi Kode Sumber 7

Gambar 2.3 Model Air Terjun 12

Gambar 2.4 Struktur Baris pada Fortran 20

Gambar 2.5 Mengolah Kode Sumber Melalui Notepad 21

Gambar 2.6 Memanggil Wrapper 21

Gambar 2.7 Menjalankan Executable 22

Gambar 3.1 Diagram Aliran Data Level 0 30

Gambar 3.2 Diagram Aliran Data Level 1 32

Gambar 3.3 Proses Registrasi 34

Gambar 3.4 Proses Enkripsi / Dekripsi 35

Gambar 3.5 Proses Code Editor 36

Gambar 3.6 Proses Mengolah Opsi-Opsi P/L IDE 37

Gambar 3.7 Proses Compiler Chain 38

Gambar 3.8 Proses Enkriptor 38

Gambar 3.9 Proses Dekriptor 39

Gambar 3.10 Proses Editor 40

Gambar 3.11 State Diagram Bilangan Desimal 43

Gambar 3.12 State Diagram Bilangan Biner 43

Gambar 3.13 State Diagram Bilangan Oktal 44

Gambar 3.14 State Diagram Bilangan Heksadesimal 44

Gambar 3.15 State Diagram Bilangan Pecahan 45

Gambar 3.16 State Diagram Untaian Karakter 45

Gambar 3.17 Jendela Utama Perangkat Lunak IDE 46

Gambar 3.18 Menu File 47

Gambar 3.19 Menu Edit 47

Gambar 3.20 Menu Search 47

Gambar 3.21 Menu Execute 48

Gambar 3.22 Menu Tools 48

Gambar 3.23 Menu Window 49

Gambar 3.24 Jendela Find 49

Gambar 3.25 Jendela Replace 50

Gambar 3.26 Jendela Compiler Options 50

Gambar 3.27 Jendela Environment Options 51

Gambar 3.28 Jendela Editor Options 52

Gambar 3.29 Jendela Register 52

Gambar 3.30 Jendela Compile Progress 53

Gambar 4.1 Jendela Utama cryptIDE 54

Gambar 4.2 Menu File 55

Gambar 4.3 Jendela Open 56

Gambar 4.4 Jendela Save As 56


(12)

Gambar 4.6 Jendela Warning (1) 57

Gambar 4.7 Menu Edit 58

Gambar 4.8 Menu Search 58

Gambar 4.9 Jendela Find Text 58

Gambar 4.10 Jendela Replace Text 59

Gambar 4.11 Menu Execute 59

Gambar 4.12 Jendela Compile Progress 60

Gambar 4.13 Jendela Warning (2) 60

Gambar 4.14 Menu Tools 61

Gambar 4.15 Jendela Compiler Options: Dialect 61 Gambar 4.16 Jendela Compiler Options: Optimization 62 Gambar 4.17 Jendela Environment Options: Compiler 64 Gambar 4.18 Jendela Environment Options: Assembler 64 Gambar 4.19 Jendela Environment Options: Linker 65 Gambar 4.20 Jendela Environment Options: Warnings 65 Gambar 4.21 Jendela Environment Options: Directories 66

Gambar 4.22 Jendela Editor Options: General 67

Gambar 4.23 Jendela Editor Options: Syntax 67

Gambar 4.24 Jendela Register 68

Gambar 4.25 Jendela Information (1) 68

Gambar 4.26 Jendela Information (2) 68

Gambar 4.27 Menu Window 69

Gambar 4.28 Menu Popup Toolbar 69

Gambar 4.29 Menu Popup Tab Code Editor 70

Gambar 4.30 Rincian Proses cryptIDE yang Sedang Idle 75 Gambar 4.31 Rincian Proses cryptIDE dengan Satu Berkas Terbuka 75 Gambar 4.32 Rincian Proses Notepad yang Sedang Idle 76

Gambar 4.33 Berkas dan Folder cryptIDE 78

Gambar 4.34 Ilustrasi Perbandingan Lingkungan Kerja 79

Gambar 5.1 Environment Options: Directories 82

Gambar 5.2 Jendela Register Pengguna A 83

Gambar 5.3 Proses Pengolahan Kode Sumber 83

Gambar 5.4 Isi Berkas ‘tes1.4esc’ pada Media Penyimpanan 83

Gambar 5.5 Jendela Register Pengguna B 84


(13)

BAB 1

PENDAHULUAN

1.1 Latar Belakang

Dewasa ini, pemanfaatan bahasa pemrograman semakin berkembang. Bahkan, bahasa pemrograman digunakan untuk kepentingan akademis, misalnya pengembangan program untuk menyelesaikan suatu persamaan matematik yang kompleks. Satu di antara alasan mengapa pemanfaatan bahasa pemrograman semakin berkembang adalah tersedianya lingkungan pengembangan (development environment) yang mengintegrasikan (integrating) modul-modul yang dibutuhkan sehingga pengembangan program menjadi mudah dan juga kemampuan compiler dapat dimanfaatkan secara maksimal.

Satu di antara bahasa pemrograman yang digunakan adalah Fortran. Fortran merupakan singkatan dari FORmula TRANslator. Fortran merupakan bahasa pemrograman yang dikhususkan untuk melakukan komputasi numerik dan scientific. Compiler Fortran yang umum dipakai di lingkungan akademis adalah Fortran 77. Tetapi, IDE untuk compiler Fortran 77 masih sangat kurang, sehingga pemanfaatan compiler Fortran 77 tidak maksimal dan diperlukan pengetahuan yang lebih lanjut untuk mengoperasikan compiler Fortran 77.

Isu berikutnya yang harus diperhatikan adalah otentikasi kode sumber, yaitu kepemilikan kode sumber. Diperlukan suatu modul untuk mengamankan kode sumber, sehingga kode sumber tersebut dapat diotentikasi, yaitu dapat ditentukan siapa pemilik dari kode sumber tersebut. Idealnya modul tersebut harus terintegrasi ke dalam IDE, tetapi arsitektur IDE yang ada sekarang ini tidak menyediakan fitur seperti yang diharapkan. Menurut Wong dalam IDEs of Change, IDE yang beredar pada umumnya


(14)

mengandung modul-modul yang terintegrasi, diantaranya code editor, compiler chain, dan debugger.

Oleh karena itu, maka pada skripsi ini akan dilakukan studi, perancangan, dan pengembangan perangkat lunak IDE untuk Fortran 77. Selain itu, juga akan dilakukan analisis terhadap IDE yang dihasilkan.

1.2 Rumusan Masalah

Dari uraian latar belakang, masalah-masalah yang muncul dapat dirumuskan menjadi: 1. Bagaimana merancang dan membangun suatu perangkat lunak IDE yang

mengintegrasikan modul-modul yang dibutuhkan untuk pengembangan program. 2. Apakah pengembangan program dengan perangkat lunak IDE yang akan dibangun

dapat meningkatkan efisiensi dan efektivitas dibandingkan dengan pengembangan program tanpa menggunakan perangkat lunak IDE tersebut.

3. Apakah keotentikan kode sumber dapat dicapai dengan pemanfaatan modul enkripsi/dekripsi yang terintegrasi ke dalam IDE yang akan dibangun.

1.3 Batasan Masalah

Supaya pembahasan masalah lebih mendalam dan terperinci, maka pembahasan masalah dibatasi menjadi:

1. IDE yang akan dibangun adalah IDE GNU Fortran G77 versi 2.95 19990728. 2. Tiap pengguna IDE memiliki kode registrasi yang unik.

3. IDE yang akan dibangun terdiri atas modul code editor, compiler chain, enkripsi, dan dekripsi.

4. Code editor hanya melakukan code highlighting.

5. Teknik kriptografi yang digunakan dalam enkripsi dan dekripsi kode sumber adalah Caesar cipher.

6. IDE yang akan dibangun adalah IDE yang berjalan pada sistem operasi Windows. 7. Perangkat Lunak IDE dibangun dengan Borland Delphi 7.


(15)

1.4 Tujuan Penelitian

Adapun tujuan penelitian yang hendak dicapai adalah:

1. Merancang dan membangun perangkat lunak IDE yang mengintegrasikan modul code editor, compiler chain, enkripsi, dan dekripsi.

2. Menganalisis efisiensi dan efektivitas pengembangan program melalui pemanfaatan IDE yang akan dibangun.

3. Menganalisis keaslian (authentication) kode sumber melalui pemanfaatan modul enkripsi/dekripsi yang terintegrasi ke dalam IDE yang akan dibangun.

1.5 Manfaat Penelitian

Manfaat penelitian yang hendak dicapai di antaranya:

1. Penelitian dan hasilnya diharapkan dapat digunakan untuk kepentingan akademis dan untuk memperkaya literatur akademis.

2. Efisiensi dan efektivitas pengembangan program serta keotentikan kode sumber dapat dicapai dengan menggunakan perangkat lunak IDE ini.

1.6 Langkah-Langkah Pengerjaan Penelitian

Penelitian dikerjakan berdasarkan urutan langkah-langkah berikut: 1. Studi literatur.

2. Analisis dan perancangan perangkat lunak IDE. 3. Implementasi.

4. Pengujian perangkat lunak IDE.


(16)

1.7 Sistematika Penulisan

Sistematika penulisan dari skripsi ini terdiri dari beberapa bagian utama sebagai berikut:

BAB 1: PENDAHULUAN

Bab ini menjelaskan mengenai latar belakang pemilihan judul skripsi “Analisis dan Perancangan Perangkat Lunak IDE (Integrated Development Environment) Fortran G77”, rumusan masalah, batasan masalah, tujuan penelitian, manfaat penelitian, langkah-langkah pengerjaan penelitian, dan sistematika penulisan.

BAB 2: LANDASAN TEORI

Bab ini membahas sejarah bahasa pemrograman, tahapan penerjemahan program, rekayasa perangkat lunak, analisis leksikal, algoritma kriptografi klasik, dan Fortran.

BAB 3: ANALISIS DAN PERANCANGAN PERANGKAT LUNAK

Bab ini menguraikan analisis perangkat lunak yang dilakukan serta perancangan perangkat lunak yang sesuai dengan tujuan penelitian.

BAB 4: HASIL DAN PEMBAHASAN

Bab ini digunakan untuk memaparkan perangkat lunak hasil rancangan. Selain itu, bab ini juga menyajikan hasil analisis dari perangkat lunak tersebut.

BAB 5: IMPLEMENTASI DAN PENGUJIAN

Bab ini menjelaskan prasyarat dan syarat yang harus dipenuhi supaya perangkat lunak yang dikembangkan dapat dijalankan secara baik serta pengujian terhadap perangkat lunak tersebut.

BAB 6: KESIMPULAN DAN SARAN

Bab ini memuat kesimpulan dari uraian bab-bab sebelumnya dan hasil penelitian yang diperoleh. Bab ini juga memuat saran yang diharapkan dapat bermanfaat untuk pengembangan selanjutnya.


(17)

BAB 2

LANDASAN TEORI

2.1 Sejarah Bahasa Pemrograman

Pada awal komputer diciptakan, para pemrogram diharuskan untuk memrogram komputer dengan suatu bahasa, dimana tiap instruksi direduksi menjadi serangkaian angka-angka yang dikenal dengan bahasa mesin (machine language). Program yang ditulis dengan bahasa mesin dapat langsung diinputkan kepada komputer, dan dapat dijalankan tanpa perlu diterjemahkan terlebih dahulu. Tetapi, bahasa mesin merupakan bahasa yang sulit dipahami oleh manusia. Oleh karena itu, perekayasa perangkat lunak memilih untuk menulis program dengan menggunakan bahasa sederhana, dimana tiap kata dalam bahasa tersebut mewakili instruksi bahasa mesin. Bahasa ini dikenal dengan bahasa rakitan (assembly language). Kemudian, kode program bahasa rakitan yang ditulis oleh perekayasa perangkat lunak, dirakit (diterjemahkan) oleh pemrogram menjadi kode program bahasa mesin, seperti diilustrasikan pada Gambar 2.1, untuk kemudian diinputkan kepada komputer.

Programmer .

. MOV A, 47 ADD A, B HALT . .

. . 1010 1111 0011 0111 0111 0110 .

.

Bahasa Rakitan (Assembly Language)

Proses Perakitan (Assembly)

Bahasa Mesin (Machine Language)

Gambar 2.1 Proses Perakitan Program Sumber: Practical C Programming


(18)

Pada saat itu, proses penerjemahan/translasi merupakan pekerjaan yang sulit serta memerlukan ketelitian dan ketepatan. Sehingga dibangun suatu program yang disebut assembler untuk melakukan pekerjaan tersebut. Namun, pada saat tersebut biaya pengoperasian komputer jauh lebih tinggi dibandingkan dengan biaya untuk menggaji pemrogram.

Seiring berkembangnya komputer, proses penerjemahan bahasa rakitan dengan menggunakan assembler menjadi lebih efektif. Dengan pemanfaatan bahasa rakitan, program menjadi lebih terstruktur dan lebih mudah untuk dipahami. Tetapi, program yang ditulis dengan bahasa rakitan menjadi lebih rumit untuk dipahami dan dijalankan oleh komputer; Program terlebih dahulu harus diterjemahkan menjadi bahasa mesin sebelum dapat dijalankan.

Kemudian, untuk memperluas pemanfaatan bahasa pemrograman, maka pengembang perangkat lunak mengembangkan bahasa pemrograman yang lebih baik. Bahasa pemrograman ini digolongkan sebagai bahasa pemrograman tingkat tinggi (high level language). Bahasa pemrograman berkembang menjadi semakin mudah untuk digunakan oleh para pemrogram.

Bahasa pemrograman tingkat tinggi memerlukan tambahan tahapan proses untuk penerjemahan sebelum dapat dijalankan oleh komputer. Tetapi, waktu yang diperlukan untuk melakukan penerjemahan tidak menjadi masalah yang signifikan. Sejalan dengan perkembangan kecepatan komputasi, waktu yang diperlukan untuk menerjemahkan kode program bahasa tingkat tinggi menjadi bahasa mesin menjadi semakin singkat. Serangkaian bahasa pemrograman tingkat tinggi yang telah dikembangkan, diantaranya: COBOL, Fortran, Pascal, C.

2.2 Tahapan Proses Penerjemahan Program

Program yang ditulis dengan menggunakan bahasa pemrograman tingkat tinggi terdiri atas huruf, angka, dan simbol-simbol. Sedangkan, komputer dijalankan berdasarkan bahasa tingkat rendah (low level language) yang disebut kode mesin, yang merupakan


(19)

serangkaian angka-angka. Sehingga, sebelum dapat dijalankan, kode sumber harus melalui serangkaian tahapan proses transformasi, seperti tampak pada Gambar 2.2.

Gambar 2.2 Tahapan Proses Transformasi Kode Sumber Sumber: Practical C Programming

Program berasal dari ide dan gagasan pemrogram. Melalui teks editor, ide dan gagasan tersebut direalisasikan menjadi kode sumber (source code). Seperti tampak pada Gambar 2.2, kode sumber akan diterjemahkan oleh compiler menjadi kode rakitan (assembly code). Berikutnya, kode rakitan diterjemahkan menjadi berkas kode objek (object code) oleh assembler. Kemudian, linker menggabungkan berkas kode objek dengan rutin-rutin yang telah didefinisikan terlebih dahulu (predefined routines) yang berada di dalam pustaka standar (standard library) dan menghasilkan program yang dapat dijalankan (executable program) yang merupakan sekumpulan instruksi dalam bahasa mesin.

Dewasa ini, kebanyakan sistem pemrograman (programming system) juga menyediakan program pembungkus (wrapper), yaitu program yang digunakan untuk


(20)

memanggil compiler, assembler, dan linker secara runtun. Bahkan beberapa sistem pemrograman menyediakan lingkungan pengembangan terpadu (Integrated Development Environment). Sebuah paket IDE dapat terdiri atas editor, compiler, assembler, linker, debugger, dan sebagainya.

2.3 Rekayasa Perangkat Lunak

Rekayasa perangkat lunak merupakan kegiatan penspesifikasian, perancangan, pengimplementasian, pemvalidasian, penyebaran, dan pemeliharaan sistem sebagai satu kesatuan.

2.3.1 Proses Perangkat Lunak

Proses perangkat lunak merupakan proses yang sangat rumit dan bergantung pada penilaian manusia. Karena dibutuhkan penilaian dan kreativitas, keberhasilan usaha untuk mengotomasi proses perangkat lunak menjadi terbatas. Satu alasan mengapa otomasi proses memiliki cakupan yang terbatas adalah adanya keragaman proses perangkat lunak. Proses telah berkembang untuk mengeksploitasi kemampuan manusia dan karakteristik spesifik sistem yang dikembangkan. Maka, bisa jadi terdapat banyak proses yang digunakan untuk pengembangan perangkat lunak.

Walaupun terdapat banyak proses perangkat lunak, terdapat kegiatan-kegiatan mendasar yang umum bagi semua proses perangkat lunak adalah:

1. Penspesifikasian perangkat lunak. Mendefinisikan fungsionalitas perangkat lunak dan batasan operasinya.

2. Perancangan dan implementasi perangkat lunak. Merancang dan membangun perangkat lunak yang memenuhi persyaratan.

3. Pemvalidasian perangkat lunak. Menjamin bahwa perangkat lunak bekerja sesuai dengan apa yang diinginkan.

4. Pengevolusian perangkat lunak. Perangkat lunak harus dapat dikembangkan untuk menghadapi kebutuhan yang berubah.


(21)

Walaupun tidak terdapat proses perangkat lunak yang ideal, terdapat banyak cakupan untuk memperbaiki proses perangkat lunak. Perbaikan proses perangkat lunak dapat diimplementasikan dengan sejumlah cara. Hal ini bisa dilakukan melalui standarisasi proses, sehingga keragaman proses perangkat lunak dapat diperkecil.

2.3.1.1 Spesifikasi Perangkat Lunak

Spesifikasi perangkat lunak ditujukan untuk menetapkan layanan apa yang dituntut dari sistem dan batasan pada operasi dan pengembangan perangkat lunak IDE. Disebut juga dengan rekayasa persyaratan. Rekayasa persyaratan merupakan tahap yang sangat kritis dari proses perangkat lunak karena kesalahan pada tahap ini akan menimbulkan kesalahan pada perancangan dan implementasi sistem.

Pada proses spesifikasi perangkat lunak akan dihasilkan dokumen persyaratan yang merupakan spesifikasi sistem. Persyaratan direpresentasikan pada dua tingkat perincian, yaitu persyaratan tingkat tinggi dan persyaratan tingkat rendah.

2.3.1.2 Perancangan dan Implementasi Perangkat Lunak

Perancangan perangkat lunak merupakan deskripsi struktur perangkat lunak yang akan diimplementasikan. Kegiatan-kegiatan pada proses perancangan di antaranya adalah perancangan arsitektural, spesifikasi abstrak, perancangan interface, perancangan komponen, perancangan struktur data, perancangan algoritma. Rancangan dikembangkan secara iteratif melalui versi demi versi yang berbeda. Proses perancangan melibatkan penambahan formalitas dan perincian ke dalam rancangan sementara, dan penelusuran balik untuk memperbaiki rancangan yang terdahulu.

Pada perancangan perangkat lunak dapat dilakukan pendekatan dengan metode terstruktur. Pendekatan metode terstruktur merupakan serangkaian notasi dan panduan perancangan perangkat lunak. Penggunaan metode terstruktur melibatkan produksi model sistem grafis dan menghasilkan dokumentasi perancangan dalam


(22)

jumlah besar. Metode terstruktur mendukung beberapa model sistem, satu diantaranya adalah model aliran data (data flow model). Pada model aliran data, sistem dimodelkan dengan menggunakan transformasi data yang terjadi pada saat pemrosesannya.

Tahap implementasi pengembangan perangkat lunak merupakan proses transformasi spesifikasi perangkat lunak menjadi perangkat lunak yang dapat dijalankan. Tahap ini mencakup perancangan dan pemrograman perangkat lunak. Pemrograman merupakan kegiatan yang subjektif dan tidak terdapat proses umum untuk diikuti. Pemrograman juga meliputi kegiatan pengujian kode program yang dikembangkan. Ketika ditemukan kesalahan (error), maka pemrogram harus mencari letak kesalahan dan memperbaiki kesalahan (debugging).

2.3.1.3 Validasi Perangkat Lunak

Validasi atau disebut juga dengan verifikasi dan validasi (V & V), ditujukan untuk menunjukkan bahwa perangkat lunak sesuai dengan spesifikasinya, validasi melibatkan proses pemeriksaan pada setiap tahap proses perangkat lunak dari definisi persyaratan sampai pengembangan program.

Proses validasi meliputi tahapan:

1. Pengujian unit, yaitu menguji komponen individual untuk menjamin operasi yang benar. Setiap komponen diuji secara independen, tanpa komponen sistem yang lain.

2. Pengujian modul, yaitu menguji modul tanpa modul sistem yang lain. Modul merupakan sekumpulan komponen yang berhubungan seperti kelas, tipe data, prosedur, dan fungsi yang berhubungan.

3. Pengujian subsistem, yaitu melibatkan pengujian sekumpulan modul yang telah dintegrasikan menjadi subsistem.

4. Pengujian sistem, yaitu menguji sistem yang terdiri atas subsistem-subsistem. Proses ini berkenaan dengan penemuan kesalahan yang diakibatkan dari interaksi


(23)

antar subsistem. Pengujian sistem berhubungan dengan validasi sistem, yaitu apakah sistem telah memenuhi persyaratan.

5. Pengujian penerimaan, yaitu menguji sistem dengan data riil.

2.3.1.4 Evolusi Perangkat Lunak

Fleksibilitas sistem perangkat lunak merupakan satu di antara alasan utama makin banyaknya perangkat lunak yang digunakan pada sistem besar dan kompleks. Pada perangkat lunak, perubahan dapat dibuat kapan saja pada saat pengembangan sistem ataupun setelah pengembangan sistem.

Secara historis, terdapat pembatas antara proses pengembangan perangkat lunak dan proses evolusi perangkat lunak (pemeliharaan perangkat lunak). Pengembangan perangkat lunak dianggap merupakan kegiatan kreatif di mana sistem perangkat lunak dikembangkan dari konsep awal menjadi sistem yang dapat berjalan. Pemeliharaan perangkat lunak merupakan proses perubahan sistem tersebut setelah digunakan.

2.3.2 Model Proses Perangkat Lunak: Model Proses Air Terjun

Model proses perangkat lunak merupakan representasi abstrak dari proses perangkat lunak. Model proses hanya memberikan informasi parsial mengenai proses perangkat lunak. Model proses perangkat lunak dapat digunakan untuk menjelaskan pendekatan-pendekatan dalam pengembangan perangkat lunak. Satu diantara model proses yang digunakan secara luas adalah model proses air terjun (waterfall).

Model proses air terjun diilustrasikan pada Gambar 2.3. Model proses air terjun mengambil kegiatan proses dasar seperti spesifikasi, pengembangan, validasi, dan evolusi. Dan merepresentasikannya sebagai fase-fase proses yang berbeda seperti spesifikasi persyaratan, perancangan perangkat lunak, implementasi, pengujian, dan pemeliharaan.


(24)

Gambar 2.3 Model Air Terjun

Seperti tampak pada Gambar 2.3, model proses air terjun dimulai dari fase Definisi Persyaratan, pada fase ini akan dihasilkan dokumen spesifikasi persyaratan. Rancangan perangkat keras dan perangkat lunak pada fase Perancangan Sistem dan Perangkat Lunak disesuaikan dengan dokumen spesifikasi persyaratan. Fase ini akan menghasilkan dokumen spesifikasi sistem dan perangkat lunak. Pada fase Implementasi dan Pengujian Unit, dokumen spesifikasi sistem dan perangkat lunak diimplementasikan ke dalam modul-modul yang terpisah, untuk kemudian diuji secara mandiri. Berikutnya, pada fase Integrasi dan Pengujian Sistem, modul-modul yang dihasilkan pada fase sebelumnya, diintegrasikan dan diuji sebagai suatu sistem perangkat lunak yang utuh. Kemudian pada fase Operasi dan Pemeliharaan Sistem, sistem dan perangkat lunak dioperasikan dan dipelihara, apabila ditemukan cacat (bug) pada perangkat lunak atau terjadi perubahan kebutuhan sistem, maka model proses air terjun dapat kembali ke fase-fase sebelumnya.

Keuntungan model proses air terjun dibandingkan dengan model proses lainnya yaitu, manajemen model proses air terjun sederhana, pemisahan tahapan perancangan sehingga dapat dihasilkan sistem yang lebih berbobot. Walaupun demikian, model proses air terjun memiliki kelemahan yaitu, fase berikutnya tidak boleh dimulai sebelum fase sebelumnya selesai.

Definisi Persyaratan

Perancangan Sistem dan Perangkat Lunak

Implementasi dan Pengujian Unit

Integrasi dan Pengujian Sistem

Operasi dan Pemeliharaan


(25)

2.4 Analisis Leksikal, Besaran Leksik, dan Code Highlighting

Analisis leksikal merupakan tahapan dalam teknik kompilasi untuk mengidentifikasi semua besaran yang membangun suatu bahasa yang terdapat pada suatu masukan. Rutin program yang melakukan tahap analisis leksikal disebut dengan scanner. Scanner menerima masukan berupa untaian karakter, kemudian memilah masukan menjadi besaran leksik (lexeme) sebelum ditransformasikan menjadi token. Scanner bekerja berdasarkan mesin finite state automata yang ada pada ekspresi regular.

Tugas scanner diantaranya:

1. Membaca kode sumber dengan merunut karakter demi karakter. 2. Memisahkan lexeme.

3. Mengenali jenis besaran leksik dan mentransformasi lexeme menjadi token. 4. Mengirimkan token untuk digunakan tahapan analisis berikutnya.

5. Membuang karakter whitespace dan komentar dalam program. 6. Menangani kesalahan.

7. Menangani tabel simbol.

Besaran leksik merupakan besaran pembangun suatu bahasa, meliputi: 1. Identifier

Dapat berupa keyword atau name. Keyword adalah kata kunci yang telah didefinisikan dan dicadangkan untuk digunakan secara ekslusif oleh suatu bahasa. Sedangkan, name adalah besaran leksik yang didefinisikan oleh pemakai sesuai dengan ekspresi regular yang diterima oleh bahasa tersebut.

2. Nilai konstanta

Merupakan konstanta yang terdapat pada suatu bahasa, sesuai ekspresi regular bahasa tersebut. Dapat berupa konstanta bilangan bulat, bilangan pecahan, boolean, karakter, untaian karakter, dan sebagainya.

3. Operator dan delimiter

Operator yang diterima bahasa tersebut, misalnya operator aritmatik, operator relasional, dan sebagainya.

Delimiter merupakan pemisah besaran leksik dan mempunyai arti khusus didefinisikan di dalam ekspresi regular bahasa tersebut.


(26)

Code highlighting merupakan suatu proses pada teks editor untuk memunculkan (highlight) tiap lexeme sesuai dengan jenis besaran leksiknya. Tugas yang dilakukan pada Code highlighting:

1. Membaca masukan dengan merunut karakter demi karakter. 2. Memisahkan lexeme.

3. Mengenali jenis besaran leksik, karakter whitespace, dan komentar. 4. Mengubah font style dari lexeme sesuai dengan jenisnya.

2.5 Algoritma Kriptografi Klasik: Caesar Cipher

Sebelum komputer ada, kriptografi dilakukan dengan menggunakan pensil dan kertas. Algoritma kriptografi (cipher) yang digunakan saat itu, dinamakan juga algoritma kriptografi klasik dan berbasis karakter, yaitu enkripsi dan dekripsi dilakukan pada setiap karakter informasi. Semua algoritma klasik termasuk ke dalam sistem kriptografi simetri dan digunakan jauh sebelum sistem kriptografi kunci publik ditemukan.

Pada dasarnya, algoritma kriptografi klasik dapat dikelompokkan ke dalam dua macam cipher:

1. Cipher substitusi (substitution cipher) 2. Cipher transposisi (transposition cipher)

Di dalam cipher substitusi, setiap unit plainteks disubstitusikan dengan satu unit cipherteks. Satu “unit” bisa berarti satu huruf, pasangan huruf, atau kelompok lebih dari dua huruf. Algoritma substitusi tertua yang diketahui adalah Caesar cipher yang digunakan oleh kaisar Romawi, Julius Caesar, untuk menyandikan pesan yang ia kirim kepada para gubernurnya.

Pada Caesar cipher, tiap huruf disubstitusi dengan huruf ke-k berikutnya dari susunan alfabet yang sama. Dalam hal ini, kunci k adalah jumlah pergeseran huruf. Pada Tabel 2.1 diperlihatkan susunan alfabet setelah digeser sejauh 3 huruf (k=3).


(27)

Tabel 2.1 Tabel Substitusi dengan Pergeseran Sejauh 3 Huruf Plainteks A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Cipherteks D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

Berdasarkan Tabel 2.1, proses enkripsi dan dekripsi dapat dilakukan dengan menggantikan tiap huruf plainteks dengan huruf ciperteks, dan sebaliknya.

Contoh:

Plainteks PROGRAM HELLO

Cipherteks SURJUDP KHOOR

2.6 Fortran

Fortran merupakan bahasa yang mendominasi pemrograman pada awal bahasa pemrograman tingkat tinggi diperkenalkan. Fortran telah dipergunakan secara kontinu selama lebih dari setengah abad dalam perhitungan intensif seperti prakiraan cuaca numerik (numerical weather prediction), analisis elemen berhingga (finite element analysis), fluida dinamis komputasional (computational fluid dynamics), fisika komputasional (computational physics), dan kimia komputasional (computational chemistry). Fortran merupakan satu diantara bahasa pemrograman yang terkenal, yang digunakan untuk melakukan komputasi dengan unjuk kerja yang tinggi dan program-program untuk mengukur dan meranking superkomputer tercepat di dunia ditulis dengan bahasa Fortran.

2.6.1 Sejarah Fortran

Pada akhir tahun 1953, John W. Backus mengajukan proposal kepada atasannya untuk mengembangkan sebuah alternatif yang lebih efisien dibandingkan dengan bahasa rakitan untuk memrogram mainframe IBM 704. Spesifikasi kasar untuk IBM Mathematical Formula Translating System diselesaikan pada pertengahan tahun 1954. Manual untuk FORTRAN diterbitkan pada Oktober 1956, dan compiler FORTRAN


(28)

yang pertama mulai digunakan pada April 1957. Compiler ini merupakan compiler untuk menjanjikan, hal ini dikarenakan pengguna hanya menggunakan bahasa pemrograman tingkat tinggi jika terdapat compiler yang mampu membangkitkan kode dengan unjuk kerja yang setara dengan kode bahasa rakitan yang ditulis secara manual.

Perkembangan berikutnya, FORTRAN diterima secara luas oleh para ilmuwan untuk menulis program yang intensif numerik. Akibatnya pengembang compiler semakin tergerak untuk menghasilkan compiler yang dapat menghasilkan kode yang lebih cepat dan efisien. Penambahan tipe data complex ke dalam bahasa, membuat FORTRAN secara khusus sesuai dengan pemanfaatan teknik.

Pada tahun 1960, popularitas FORTRAN semakin meluas. Sehingga, perusahaan komputer saingan juga berusaha menyediakan compiler FORTRAN untuk mesin mereka. Pada tahun 1963 terdapat lebih dari 40 compiler FORTRAN. Dikarenakan alasan ini, FORTRAN dianggap sebagai bahasa pemrograman pertama yang digunakan secara luas yang didukung banyak arsitektur komputer.

Perkembangan Fortran sejalan dengan awal evolusi teknologi compiler. Bahkan, banyak diantara perkembangan teori dan rancangan compiler merupakan akibat dari persaingan untuk menghasilkan kode program Fortran yang efisien. Berikutnya, tiap versi Fortran dievolusikan untuk menambah ekstensi bahasa dengan tetap mempertahankan kesesuaian dengan versi-versi sebelumnya. Versi suksesif Fortran diantaranya, menambahkan dukungan terhadap pemrosesan data berbasis karakter (FORTRAN 77), pemrograman larik, pemrograman berbasis modul dan objek (Fortran 90/95), pemrograman berorientasi objek, dan pemrograman generik (Fortran 2003).

2.6.2 Himpunan Karakter pada Fortran

Himpunan karakter pada Fortran terdiri dari terdiri atas 26 karakter huruf besar, 26 karakter huruf kecil (karakter alphabet), karakter angka 0 sampai 9, karakter khusus,


(29)

dan karakter alphabet tambahan. Tabel 2.2 dan Tabel 2.3 menampilkan himpunan karakter Fortran secara lengkap.

Tabel 2.2 Himpunan Karakter Alphabet dan Karakter Angka Huruf A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

a b c d e f g h i j k l m n o p q r s t u v w x y z

Angka 0 1 2 3 4 5 6 7 8 9

Tabel 2.3 Himpunan Karakter Khusus dan Karakter Alphabet Tambahan Nama Karakter Karakter

Blank

Equal =

Plus +

Minus -

Asterisk *

Slash /

Left parenthesis (

Right parenthesis )

Comma ,

Decimal point .

Currency symbol $

Apostrophe

Colon :

Exclamation point !

Quotation Mark

Underscore _

2.6.3 Tipe Data pada Fortran

Secara umum, terdapat tiga jenis entitas yang memiliki tipe data, yaitu: konstanta, variabel, dan fungsi. Tipe data yang dikenali Fortran, diantaranya:

1. INTEGER – bilangan bulat positif dan negatif dan nol.

2. REAL – bilangan pecahan positif dan negatif dan nol.

3. DOUBLE PRECISION – mirip dengan REAL, hanya saja DOUBLE PRECISION

menggunakan memory dua kali lebih banyak dibandingkan REAL, dengan presisi yang lebih baik.

4. COMPLEX – pasangan data REAL dan komponen imajiner.


(30)

6. LOGICAL – data Boolean, merepresentasikan true dan false. 7. CHARACTER – untaian karakter.

8. HOLLERITH – tipe data historikal untuk definisi karakter.

2.6.4 Nama Simbol pada Fortran

Nama simbol merupakan deretan karakter yang mengacu pada lokasi memory dan mempunyai arti khusus dalam program Fortran. Sebuah nama simbol dapat terdiri atas karakter alphabet, numerik, dan karakter garis bawah (_). Karakter pertama nama simbol harus merupakan karakter alphabet. Nama simbol pada Fortran dapat mengandung sejumlah karakter, tetapi hanya 32 karakter pertama (standar FORTRAN 77 hanya mengizinkan 6 karakter) yang menentukan dan membedakan antara nama simbol yang satu dan yang lainnya. Nama simbol yang digunakan secara eksternal (nama program, nama subrutin, nama fungsi, dan nama common block) dibatasi sampai 32 karakter penting.

Contoh nama simbol yang benar:

CASH C3PO R2D2 LONG_NAME

Contoh nama simbol yang salah:

X*4 (Mengandung karakter khusus)

3CASH (Tidak diawali dengan karakter alphabet)

2.6.5 Pernyataan pada Fortran

Semua pernyataan (statement) pada Fortran dimulai dengan sebuah kata kunci (keyword), kecuali pernyataan penugasan, pernyataan fungsi, dan pernyataan label. Kata kunci merupakan sederetan karakter yang mempunyai arti khusus dan digunakan untuk mengidentifikasi tipe pernyataan.


(31)

Tipe pernyataan pada Fortran: 1. Pernyataan label (statement labels)

Dengan pernyataan label, dimungkinkan untuk mengacu pada sebuah pernyataan Fortran. Sebuah pernyataan label terdiri atas 1 sampai 5 digit, ditempatkan pada kolom 1 sampai 5 pada baris inisial. Tiap pernyataan label pada program harus unik.

2. Pernyataan yang dapat dieksekusi (executable statements)

Pernyataan executable menspesifikasikan suatu aksi yang dapat dikenali dan merupakan bagian dari sekuens eksekusi dalam sebuah program. Pernyataan executable terdiri atas pernyataan penugasan (assignment statements), pernyataan kendali (control statements), pernyataan masukan/keluaran (I/O statements). 3. Pernyataan yang tidak dapat dieksekusi (non-executable statements)

Pernyataan yang non-executable merupakan pernyataan yang bukan merupakan bagian dari sekuens eksekusi. Beberapa fungsi yang dilakukan oleh pernyataan yang non-executable, diantaranya mendefinisikan pernyataan fungsi, menspesifikasikan entry points dari subprogram, memuat informasi penyuntingan dan pengaturan, menspesifikasikan unit-unit program, menspesifikasikan penyertaan pernyataan tambahan dari sumber lain, menspesifikasikan karakteristik, pengaturan penyimpanan, dan nilai awal dari data.

2.6.6 Struktur Baris pada Fortran

Pada Fortran dengan format fixed form, tiap baris program sumber mempunyai jenis masing-masing. Jenis baris pada Fortran diantaranya, baris komentar, baris inisial, dan baris sambungan.

Baris komentar adalah baris yang digunakan secara utuh untuk kegunaan dokumentasi dan baris komentar tidak mempengaruhi eksekusi program. Seperti tampak pada Gambar 2.4, baris komentar mempunyai karakteristik yaitu karakter pada kolom ke-1 adalah ‘C’ atau ‘*’. Tiap baris pada program Fortran dibatasi 72 karakter secara default, artinya karakter pada kolom ke 73 sampai akhir baris akan diabaikan. Jika panjang baris (termasuk karakter dari kolom 1 sampai 6) melebihi 72 karakter,


(32)

maka dapat diorganisasikan menjadi baris sambungan. Baris sambungan ditandai dengan adanya karakter selain spasi dan ‘0’ pada kolom ke-6. Baris sambungan menandakan bahwa baris tersebut adalah sambungan dari baris sebelumnya. Sedangkan, baris inisial adalah baris selain baris komentar dan baris sambungan. Tiap baris inisial pada Fortran dapat mengandung pernyataan label (statement label) pada kolom 1 sampai 5.

Gambar 2.4 Struktur Baris pada Fortran

2.6.7 Struktur Program pada Fortran

Program Fortran dapat mengandung satu atau lebih unit program. Unit program terdiri atas sekuens pernyataan dan baris komentar yang optional. Unit program mendefinisikan lingkup (scope) dari nama simbol dan pernyataan label.

Program Fortran dapat berupa: 1. Program utama

Program utama merupakan unit program yang pertama kali menerima kendali eksekusi. Program utama tidak dapat dipanggil dari subprogram atau dari dirinya sendiri.

2. Subprogram

Subprogram merupakan bagian independen dari kode yang dirancang untuk melakukan suatu tugas tertentu. Subprogram menerima kendali eksekusi ketika direferensikan/dipanggil oleh sebuah pernyataan dari program utama atau

C atau * pada kolom 1 menandakan

komentar pernyataan label terletak pada kolom 1-5

pernyataan terletak pada kolom 7-72 kolom 73 dan seterusnya diabaikan

Karakter selain 0 dan spasi pada kolom 6 menandakan sambungan dari baris sebelumnya


(33)

subprogram. Subprogram dapat berupa fungsi (function), subrutin (subroutine), blok data.

2.7 Interaksi Pengguna dengan Fortran

Gambaran umum interaksi antara pengguna dengan Fortran tanpa adanya suatu lingkungan pengembangan terpadu (integrated development environment) adalah: 1. Menjalankan aplikasi editor teks, misalnya Notepad.

2. Ide dan atau gagasan pengguna dituangkan menjadi kode sumber melalui aplikasi editor teks tersebut, seperti diperlihatkan pada Gambar 2.5.

Gambar 2.5 Mengolah Kode Sumber Melalui Notepad

3. Menyimpan kode sumber tersebut ke dalam suatu berkas kode sumber dengan ekstensi berkas kode sumber Fortran (*.for, *.f, *.f77. *.f90).

4. Menjalankan Command Prompt untuk memanggil wrapper, seperti diperlihatkan pada Gambar 2.6, atau untuk memanggil compiler, assembler, dan linker.


(34)

5. Menjalankan executable hasil kompilasi, seperti diperlihatkan pada Gambar 2.7.


(35)

BAB 3

ANALISIS DAN PERANCANGAN PERANGKAT LUNAK

3.1 Analisis Bahasa Fortran

Analisis bahasa Fortran mencakup kata tercadang, konstanta, dan opsi-opsi Fortran yang akan disertakan ke dalam perangkat lunak IDE yang akan dibangun.

3.1.1 Kata Tercadang pada Fortran

Kata tercadang (reserved word) atau disebut juga dengan kata kunci (keyword), merupakan kata yang mempunyai arti khusus dan digunakan secara eksklusif oleh suatu bahasa. Fortran memiliki 82 kata tercadang, kata tercadang tersebut digunakan secara khusus di dalam Fortran sebagai pernyataan atau bagian pernyataan yang executable maupun yang non-executable. Pada Tabel 3.1, ditampilkan daftar kata tercadang pada Fortran.


(36)

Tabel 3.1 Daftar Kata Tercadang Kata Tercadang

.AND. .EQ. .EQV. .FALSE.

.GE. .GT. .LE. .LT.

.NE. .NEQV. .NOT. .OR. .TRUE. .XOR. ACCEPT ASSIGN AUTOMATIC BACKSPACE BLOCK BYTE

CALL R CHARACTECLOSE COMMON COMPLEX CONTINUE DATA DECODE

DEFINE DELETE DIMENSION DO

DOUBLE ELSE ELSEIF ENCODE

END LE ENDFIENTRY EQUIVALENCE EXTERNAL FILE FIND FORMAT FUNCTION GO HOLLERITH IF IMPLICIT INCLUDE INQUIRE INTEGER INTRINSIC LOGICAL MAP NAMELIST

OPEN R PARAMETEPAUSE POINTER PRECISION PRINT PROGRAM READ

REAL RECORD RETURN REWIND REWRITE SAVE STATIC STOP

STRUCTURE SUBROUTINE TO TYPE

UNION UNLOCK VIRTUAL VOLATILE

WHILE WRITE

3.1.2 Konstanta pada Fortran

Konstanta merupakan nilai data yang tidak dapat diubah selama eksekusi program, konstanta pada Fortran dapat berupa konstanta bilangan bulat, konstanta bilangan pecahan, dan konstanta untai karakter.

Konstanta bilangan bulat pada Fortran, merupakan lexeme yang hanya mengandung karakter angka 0 sampai 9, tidak mengandung bagian pecahan. Konstanta bilangan bulat dapat dinyatakan dengan ekspresi reguler berikut.

{‘+’|’-‘|’’}{

‘0’|’1’|’2’|..|’9’} +

Konstanta bilangan bulat pada Fortran juga dapat berupa untai karakter dengan penanda basis diawal atau diakhir. Penanda basis pada Fortran ditunjukkan pada Tabel 3.2.


(37)

Tabel 3.2 Penanda Basis Karakter Penanda Basis Basis

‘B’, ’b’ 2 (biner)

‘O’, ’o’ 8 (oktal)

‘X’, ’Z’, ’x’, ’z’ 16 (heksadesimal)

Konstanta bilangan bulat berupa untai karakter dengan karakter penanda basis dapat dinyatakan dengan ekspresi reguler berikut.

{‘+’|’-‘|’’}{

{‘B’|’b’}{‘”’}{‘0’|’1’}+{‘”’}| {‘B’|’b’}{‘’’

}{‘0’|’1’} +{‘’’}|

{‘”’}{‘0’|’1’

} +}| {‘”’}{‘B’|’b’

{‘’’}{‘0’|’1’}+}| {‘’’}{‘B’|’b’

{‘O’|’o’}{‘”’}{‘0’|’1’|..|’7’}+{‘”’}| {‘O’|

’o’}{‘’’}{‘0’|’1’|..|’7’} +{‘’’}| {‘”’}

{‘0’|’1’|..|’7’} +{‘”’}{‘O’|’o’}| {‘’’}

{‘0’|’1’|..|’7’} +{‘’’}{‘O’|’o’}| {‘X’|

’Z’|’x’|’z’}{‘”’}{‘0’|..|’9’|’A’|..|’F’|’a’|..|’f’} +{‘”’} |

{‘X’|’Z’|’x’|

’z’}{‘’’}{‘0’|..|’9’|’A’|..|’F’|’a’|..|’f’} +{‘’’} |

{‘”’}{‘0’|..|

’9’|’A’|..|’F’|’a’|..|’f’} +’|’z’}{‘”’}{‘X’|’Z’|’x |

{‘’’}{‘0’|..|’9’|’A’|..|’F’|’a’|..|’f’}+’|’z’}} {‘’’}{‘X’|’Z’|’x

Contoh konstanta bilangan bulat yang valid:

+123 12345 ‘12AB’x B‘01010’

Konstanta pecahan merupakan konstanta yang mengandung titik desimal, bagian pecahan, dan atau eksponen. Konstanta pecahan dapat dinyatakan dengan ekpresi reguler berikut.

{‘+’|’-‘|’’}{


(38)

{‘0’|..|’9’}*

{‘.’}{‘0’|..|’9’} +’e’}{‘+’|’-‘|’’} {’D’|’E’|’d’| {‘0’|.. |’9’}+|

{‘0’|..|’9’}+’9’}*| {‘.’}{‘0’|..|

{‘0’|..|’9’}+’9’}*{’D’|’E’|’d’|’e’}{‘+’|’-‘|’’} {‘.’}{‘0’|..| {‘0’|.. |’9’}+}

Contoh konstanta bilangan pecahan yang valid:

123.45 -.123 123.E45

Konstanta untai karakter merupakan konstanta yang terdiri atas satu atau lebih karakter, yang dapat direpresentasikan oleh prosesor. Tiap karakter dalam konstanta untai karakter dinomori secara terurut dari 1. Konstanta untai karakter diawali dengan karakter ‘”’ atau ‘’’, dan diakhiri dengan karakter yang sama dengan karakter awal. Karakter yang mungkin dikandung pada konstanta untai karakter adalah semua karakter ASCII.

{‘”’}{#0..#25

5} +{‘”’}|

{‘’’}{#0..#25 5}+{‘’’}

Contoh konstanta untai karakter yang valid:

“abcdefghij klmnopq, r’stuvw. Xyz!” ‘1234’’!@#$’

3.1.3 Fortran G77

G77 merupakan paket compiler Fortran 77 yang dikembangkan oleh GNU. Versi G77 yang digunakan adalah 2.95. Paket G77 terdiri atas wrapper (g77.exe), compiler (f771.exe), assembler (as.exe), dan linker (ld.exe).

Wrapper dipanggil dengan menyertakan parameter yang terdiri atas opsi wrapper, opsi compiler, opsi assembler, opsi linker, dan direktori kode sumber program. Daftar beberapa opsi wrapper ditampilkan pada Tabel 3.3. Ketika wrapper


(39)

dipanggil dengan suatu parameter yang sesuai, maka wrapper akan memanggil compiler terlebih dahulu untuk mengkompilasi kode sumber Fortran menjadi kode sumber rakitan. Apabila compiler tidak mengembalikan pesan kesalahan, maka wrapper akan memanggil assembler untuk menerjemahkan kode program rakitan menjadi kode objek. Apabila assembler juga tidak mengembalikan pesan kesalahan, maka berikutnya linker akan dipanggil. Linker akan menggabungkan kode objek hasil penerjemahan assembler dengan kode objek yang tersimpan pada pustaka (library) Fortran, untuk menghasilkan executable program apabila tidak terdapat kesalahan pada proses penggabungan (linking).

Tabel 3.3 Daftar Opsi Wrapper

Parameter Fungsi

--help Menampilkan dokumentasi bantuan (help) untuk g77. -dumpspecs Menampilkan semua string spesifikasi built-in. -dumpversion Menampilkan versi compiler.

-dumpmachine Menampilkan prosesor tujuan dari compiler. -Wa,<options> Melewatkan <options> kepada assembler. -Wp,<options> Melewatkan <options> kepada preprocessor. -Wl,<options> Melewatkan <options> kepada linker. -Xlinker <arg> Melewatkan <arg> kepada linker.

-save-temps Mempertahankan berkas assembler dan berkas objek. -v Menampilkan program yang dipanggil oleh g77. -E Hanya melakukan praproses.

-S Hanya melakukan kompilasi.

-c Hanya melakukan kompilasi dan perakitan. -o <file> Menghasilkan keluaran pada <file>.

Proses penerjemahan kode sumber program Fortran menjadi executable program, juga dapat dilakukan secara manual tanpa menggunakan wrapper. Compiler mula-mula dipanggil dengan menyertakan parameter berupa opsi compiler dan direktori kode sumber program. Beberapa opsi compiler yang umum digunakan, ditampilkan pada Tabel 3.4. Apabila pemanggilan compiler berhasil (tidak mengembalikan pesan kesalahan), maka akan dihasilkan kode sumber rakitan. Selanjutnya, assembler dengan menyertakan parameter berupa opsi assembler dan direktori kode sumber rakitan. Beberapa opsi assembler yang umum digunakan, ditampilkan Tabel 3.5. Apabila pemanggilan assembler berhasil, maka akan dihasilkan kode objek dan proses dapat dilanjutkan dengan pemanggilan linker.


(40)

Parameter yang diberikan pada pemanggilan linker, terdiri atas opsi linker, direktori kode objek, dan daftar pustaka yang digunakan. Beberapa opsi linker yang umum digunakan, ditampilkan pada Tabel 3.6. Jika pemanggilan linker berhasil, maka akan dihasilkan executable yang siap untuk dijalankan.

Tabel 3.4 Daftar Opsi Compiler

Parameter Fungsi

-ffree-form Mengizinkan format program bebas.

-ff90 Menandakan program ditulis dengan dialek

Fortran 90.

-fdollar-ok Mengizinkan ‘$’ untuk digunakan sebagai nama

simbol.

-fno-backslash Memperlakukan ‘\’ sebagai karakter biasa. -fonetrip Menjalankan iteratif DO minimal sekali. -ffixed-line-len

gth-<n> Mengatur panjang maksimum baris menjadi <n>.

-fno-ugly Menolak semua struktur yang ‘buruk’.

-fugly-args Mengizinkan konstanta tidak bertipe dan

konstanta Hollerith dilewatkan sebagai argumen.

-fugly-assign Mengizinkan penugasan biasa terhadap variabel

yang ditugaskan dengan perintah ASSIGN.

-fugly-assumed Mengasumsikan dummy array menjadi array (1). -fugly-comma Menganggap koma pada akhir baris pemanggilan

prosedur sebagai penanda argumen null.

-fugly-complex Mengizinkan struktur kompleks yang buruk. -fugly-init Mengizinkan struktur inisialisasi yang buruk. -fugly-logint Mengizinkan INTEGER dan LOGICAL untuk

dipertukarkan.

-Os Mengoptimasi memory daripada kecepatan. -ffast-math Meningkatkan kecepatan pemrosesan FP. -fkeep-inline-fu

nctions Mempertahankan kode fungsi walupun telah

tersedia fungsi baris.

-finline-functio

ns Mengintegrasikan fungsi sederhana pada

pemanggil.

-ffunction-cse Mengizinkan alamat fungsi ditempatkan pada

register.

-fgcse Menjalankan Global Common Subexpression

Elimination.

-frerun-cse-afte

r-loop Menjalankan CSE setelah optimisasi perulangan

(loop).

-frerun-loop-opt Menjalankan loop optimiser dua kali.

-msoft-float Menghindari penggunaan perangkat keras FP.

-m80837 Menggunakan perangkat keras FP.

-finit-local-zer

o Menginisialisasi variabel dan array lokal dengan

nilai 0.


(41)

Tabel 3.4 Daftar Opsi Compiler (Lanjutan)

Parameter Fungsi

-fcheck-memory-u

sage Memeriksa setiap pengaksesan memory.

-fstack-check Memeriksa stack.

-fverbose-asm Menghasilkan informasi tambahan.

-fxyzzy Menampilkan informasi internal terkait yang

dengan debugging.

-fdebug-kludge Menghasilkan informasi tambahan untuk COMMON

dan EQUIVALENCE .

-fbounds-check Memeriksa batasan subskrip dan substring. -fexceptions Mengizinkan penanganan eksepsi (exception). -fasynchronous-e

xceptions Mendukung eksepsi yang asinkron.

-fnew-exceptions Menggunakan penanganan eksepsi model baru.

-w Mengabaikan peringatan (warning).

-W Memungkinkan peringatan tambahan.

-Winline Memperingati fungsi baris yang tidak valid. -Wuninitialized Memperingati variabel yang tidak diinisialisasi. -Wunused Memperingati variabel yang tidak digunakan.

Tabel 3.5 Daftar Opsi Assembler

Parameter Fungsi

-W Mengabaikan peringatan (warning).

-Z Menghasilkan kode objek walaupun terdapat kesalahan. -o <file> Mengatur nama kode objek keluaran.

--statistics Menampilkan ukuran statistik dari eksekusi. --version Menampilkan versi assembler.

Tabel 3.6 Daftar Opsi Linker

Parameter Fungsi

--noinhibit-e

xec Menghasilkan keluaran walaupun ditemukan kesalahan. -l <libname> Mencari pustaka dengan nama ><libname .

-L <dir> Menambah <dir> ke dalam direktori pencarian pustaka. -o <file> Mengatur nama executable keluaran.

--version Menampilkan informasi versi linker.

--stats Menampilkan statistik penggunaan memory. --verbose Menghasilkan informasi lebih selama linking. --support-old


(42)

3.2 Diagram Aliran Data (Data Flow Diagram) & Kamus Data

Diagram aliran data merupakan representasi grafis yang mengilustasikan aliran data antar proses. Sedangkan kamus data menspesifikasikan rincian tiap data yang mengalir tersebut.

3.2.1 Diagram Aliran Data Level 0

Perangkat lunak IDE (Integrated Development Environment) yang akan dibangun, melakukan interaksi bolak-balik dengan pengguna. Seperti diperlihatkan pada Gambar 3.1, aliran informasi dari pengguna berupa dtKodeSumber, dtReg, dtOpsiCompiler, dtOpsiEditor, dtOpsiEnv, dan dtNamaFile.

Gambar 3.1 Diagram Aliran Data Level 0

Interaksi yang terjadi secara umum adalah, pengguna menuangkan algoritmanya ke dalam perangkat lunak dalam bentuk kode sumber (dtKodeSumber). Pengguna mungkin bekerja dengan berkas kode sumber yang telah ada sebelumnya ataupun pengguna bekerja dengan berkas baru yang kemudian akan disimpan dengan suatu nama, yang dispesifikasikan pada dtNamaFile. Ketika mengeksekusi program yang dikerjakan, pengguna mungkin memiliki preferensi opsi kerja compiler, assembler, dan atau linker, yang direpresentasikan dtOpsiCompiler dan dtOpsiEnv. Pengguna juga dapat mengatur tampilan editor sesuai dengan preferensinya


(43)

(dtOpsiEditor). Untuk memanfaatkan fitur enkripsi dan dekripsi kode sumber, pengguna terlebih dahulu harus meregistrasikan data diri (dtReg).

Setelah menerima masukan informasi dari pengguna, perangkat lunak IDE akan menghasilkan informasi dtInfoDebug, dtKodeObj, dtKodeSumberOut, dtExecutable. Pengguna menerima informasi debugging (dtInfoDebug) seandainya terdapat kesalahan pada kode program pengguna. Apabila tidak ditemukan kesalahan, maka pengguna akan mendapatkan informasi berupa kode objek (dtKodeObj) dan program yang siap untuk dijalankan (dtExecutable). Pengguna juga akan menerima informasi kode sumber keluaran perangkat lunak (dtKodeSumberOut) ketika pengguna melakukan penyimpanan kode sumber.

3.2.2 Diagram Aliran Data Level 1

Pada Gambar 3.2 diperlihatkan aliran data dari dan ke pengguna melalui proses-proses utama dari perangkat lunak IDE. dtKodeSumber dan dtNamaFile yang berasal dari pengguna ditangani oleh proses P3 (Code Editor). Selain menerima informasi dari pengguna, proses P3 juga menghasilkan informasi ke pengguna, yaitu dtKodeSumberOut. dtReg ditangani oleh proses P1 (Registrasi). Proses P4 (Mengolah Opsi-Opsi P/L IDE) menangani dtOpsiCompiler, dtOpsiEditor, dtOpsiEnv. Proses P6 (Menampilkan Info Debugging) menghasilkan informasi debugging (dtInfoDebug) bagi pengguna. Proses P5 (Compiler Chain) menghasilkan dtKodeObj dan dtExecutable ke pengguna.


(44)

Gambar 3.2 Diagram Aliran Data Level 1

Selain memperlihatkan aliran data dari dan ke pengguna, Gambar 3.2 juga memperlihatkan aliran data antar proses P/L IDE. Data Registrasi (dtReg) dari pengguna ditransformasi oleh proses P1 untuk menghasilkan kunci (dtKunci), yang kemudian diberikan kepada proses Enkripsi/Dekripsi (P2) untuk mengenkripsi dtKodeSumber menjadi dtKodeSumber terenkripsi (dtKodeSumberEnkrip) dan juga untuk mendekripsi dtKodeSumberEnkrip menjadi dtKodeSumber. Proses P2 juga menerima dtOptEnv dari proses P4.

Pengguna dapat bekerja dengan berkas baru atau berkas yang telah ada sebelumnya. Ketika pengguna bekerja dengan berkas yang telah ada sebelumnya, maka proses P3 memeriksa berkas tersebut, apabila berkas tersebut merupakan berkas kode sumber terenkripsi, maka proses P3 akan memanggil proses P2 untuk melakukan dekripsi. Kemudian apabila pengguna akan menyimpan berkas kode sumber yang dikerjakannya menjadi berkas kode sumber terenkripsi, maka proses P3 akan memanggil proses P2 dengan dtKodeSumber sebagai masukan dan menerima


(45)

keluaran dari P2 berupa dtKodeSumberEnkrip. Selain itu, proses P3 juga menerima masukan dari P4 berupa data pengaturan editor dan environment, yaitu dtOpsiEditor dan dtOptEnv. Proses P3 menghasilkan FileKodeSumberOut (F1) yang merupakan berkas keluaran ke pengguna. Berkas keluaran tersebut berisi informasi keluaran (dtKodeSumberOut) dan dapat berupa informasi kode sumber biasa atau kode sumber terenkripsi. Ketika akan melakukan kompilasi kode sumber, proses P3 akan menghasilkan nama berkas yang akan dikompilasi (dtNamaFileTemp) kepada proses P5 (Compiler Chain).

Pada Gambar 3.2 juga tampak aliran data dari dan ke proses P4 (Mengolah Opsi-Opsi P/L IDE). Proses P4 menerima aliran data dari pengguna berupa data preferensi opsi-opsi editor, compiler, dan environment. Proses P4 menerjemahkan data preferensi opsi compiler (dtOpsiCompiler) dan environment (dtOpsiEnv) menjadi untai karakter parameter untuk dijalankan oleh compiler (dtOptCompiler) dan environment (dtOptEnv). Proses P4 juga kemudian mendistribusikan data opsi ke masing-masing proses yang memerlukan, yaitu dtOptEnv ke proses P2, dtOpsiEditor dan dtOptEnv ke proses P3, dtOptCompiler dan dtOptEnv ke proses P5, dan dtOptEnv ke proses P6.

Selain itu, pada Gambar 3.2, proses P5 ketika akan memanggil compiler, assembler, dan linker, proses P5 memerlukan masukan berupa dtNamaFileTemp, yaitu data nama file yang akan dikompilasi, dtOptCompiler, dan dtOptEnv. Proses P5 akan mengembalikan informasi hasil pemanggilan compiler, assembler, dan linker (dtDebug) ke proses P6 (Menampilkan Info Debug) dan juga dtKodeObj dan dtExcutable ke dalam berkas F2 (FileKodeObj) dan F3 (FileExecutable).

Proses P6 menerima masukan dtDebug dari P5 dan dtOptEnv dari P4. Kemudian proses P6 mengolah dtDebug menjadi informasi yang dapat dimengerti oleh pengguna (dtInfoDebug).


(46)

3.2.3 Diagram Aliran Data Level 2

Rincian proses P1 (Registrasi) diperlihatkan pada Gambar 3.3. dtReg yang diterima oleh proses P1 diolah oleh proses P1.1 (Mengolah Data Registrasi) untuk disimpan ke dalam berkas F4 (FileRegistrasi). dtKunci yang dihasilkan oleh proses P1 merupakan hasil pengolahan proses P1.2 (Membangkitkan Kunci dari Data Registrasi) dari data registrasi pengguna yang tersimpan di dalam berkas F4.

Gambar 3.3 Proses Registrasi

Rincian proses P2 (Enkripsi/Dekripsi) diperlihatkan pada Gambar 3.4. Proses P2.1 (Initializer) menerima masukan dtOptEnv untuk menginisialisasi proses P2, dan dtKunci untuk kemudian didistribusikan ke proses P2.2 (Enkriptor) dan proses P2.3 (Dekriptor). Ketika Proses P2 menerima masukan berupa dtKodeSumberEnkrip, maka proses P2.3 akan melakukan proses dekripsi untuk menghasilkan dtKodeSumber. Sedangkan, ketika proses P2 menerima masukan dtKodeSumber, maka proses P2.2 akan melakukan proses dekripsi untuk menghasilkan dtKodeSumberEnkrip.


(47)

Gambar 3.4 Proses Enkripsi / Dekripsi

Pada Gambar 3.5 diperlihatkan rincian proses Code Editor. Mula-mula, proses P3 diawali dengan proses inisialisasi oleh proses P3.1 (Initializer). Proses P3.1 mengolah dtOptEnv dan meneruskan dtOpsiEditor ke proses P3.2 (Editor). Proses P3.2 mengolah baris-baris kode sumber yang berasal dari pengguna (dtKodeSumber) dan atau dari berkas sebelumnya (dtKodeSumber). Ketika pengguna akan menyimpan pekerjaannya, maka proses P3.2 akan menghasilkan keluaran baris-baris kode sumber (dtKodeSumber) ke proses P3.4 (Menyimpan Kode Sumber). Ketika pengguna akan mengkompilasi pekerjaannya, maka proses P3.2 terlebih dahulu akan meneruskan baris kode program (dtKodeSumber) ke proses P3.5 (Menulis Kode Sumber Temp). Ketika pengguna memulai dengan berkas yang telah ada sebelumnya, maka proses P3.3 (Loader) akan membaca baris masukan dari berkas (dtNamaFile). Jika berkas merupakan berkas kode sumber terenkripsi, maka proses P3.3 akan membaca baris kode terenkripsi (dtKodeSumberEnkrip) dan mengirimkan ke proses P2 untuk didekripsi menjadi baris kode biasa (dtKodeSumber). Proses P3.3 akan memuatkan baris-baris kode yang tidak terenkripsi (dtKodeSumber) ke proses P3.2 dan juga nama berkas (dtNamaFile) untuk proses P3.4 (Menyimpan Kode Sumber). Ketika pengguna memilih untuk menyimpan pekerjaannya (dtKodeSumber) ke dalam baris kode terenkripsi (dtKodeSumberEnkrip), maka proses P3.4 akan mengirimkan dtKodeSumber ke proses P2 untuk dienkripsi. Proses P3.4 akan menghasilkan dtKodeSumberOut yang dapat merupakan baris kode sumber biasa atau baris kode sumber terenkripsi. Proses P3.5 menerima masukan baris kode (dtKodeSumber), ketika pengguna bermaksud untuk melakukan kompilasi. Proses P3.5 akan menulis


(48)

baris-baris kode sumber ke dalam berkas F5 (FileTemp) dan menerima path berkas sementara tersebut (dtNamaFileTemp). dtNamaFileTemp akan diteruskan ke proses P5.

Gambar 3.5 Proses Code Editor

Rincian proses P4 (Mengolah Opsi-Opsi P/L IDE) diperlihatkan pada Gambar 3.6. Informasi preferensi opsi environment pengguna (dtOpsiEnv) menjadi data masukan bagi proses P4.1 (Mengolah & Menerjemahkan Opsi Env) dan kemudian diteruskan ke proses P4.2 (Mengolah File Konfigurasi). Proses P4.1 menerima dtOpsiEnv dan menerjemahkannya menjadi dtOptEnv untuk kemudian didistribusikan ke proses-proses yang membutuhkan. Proses P4.3 (Mengolah & Menerjemahkan Opsi Compiler) menerima masukan informasi preferensi opsi compiler dari pengguna untuk diteruskan ke proses P4.2. Kemudian, Proses 4.3 juga menerima masukan dtOpsiCompiler dari P4.2 untuk diterjemahkan (dtOptCompiler) dan didistribusikan ke proses P5. Proses 4.4 menerima informasi preferensi opsi editor dari pengguna (dtOpsiEditor), meneruskannya ke proses 4.2. Berikutnya proses 4.4 menerima dtOpsiEditor dari proses 4.2 dan mendidtribusikannya tanpa menerjemahkan dtOpsiEditor ke proses P3. Proses 4.2 menerima masukan informasi preferensi compiler (dtOpsiCompiler), environment (dtOpsiEnv), dan editor (dtOpsiEditor) dan menyimpan masing-masing ke berkas F6 (FileKonfigurasiCompiler), F7 (FileKonfigurasiEnv), dan F8 (FileKonfigurasiEditor).


(49)

Selain itu, proses P4.2 juga membaca kembali (retrieve) informasi preferensi opsi dari pengguna yang tersimpan pada berkas-berkas konfigurasi dan mendistribusikan ke proses P4.1, P4.3, dan P4.4.

Gambar 3.6 Proses Mengolah Opsi-Opsi P/L IDE

Gambar 3.7 mengilustrasikan rincian proses Compiler Chain. Proses P5.1 (Initializer) menerima dtOptCompiler, dtOptEnv dan meneruskannya ke proses P5.2 (Memanggil Compiler, Assembler, & Linker). Proses P5.2 memanggil compiler, assembler, dan linker dengan parameter berupa nama berkas yang akan dikompilasi (dtNamaFileTemp) dan opsi-opsi compiler (dtOptCompiler), dan opsi-opsi environment (dtOptEnv). Apabila pada pemanggilan compiler, assembler, dan linker, terdapat kesalahan, maka proses P5.2 akan mengembalikan informasi debugging (dtDebug). Tetapi, apabila tidak terdapat kesalahan, maka proses P5.2 akan mengembalikan dtKodeObj, dan dtExecutable. Selain itu, proses P5.2 juga mengirimkan informasi dtNamaFileEXE kepada proses P5.3 (Memanggil Loader). Proses P5.3 menerima informasi nama berkas yang akan dijalankan (dtNamaFileEXE) dan kemudian menjalankan berkas tersebut.


(50)

P5.1

P5.2 Memanggil

&

P5.3 Memanggil

Loader dtNamaFileTemp

dtOptCompiler

dtOptEnv

dtOptCompiler

dtNamaFileEXE

dtKodeObj

dtDebug

dtExecutable

dtOptEnv

Gambar 3.7 Proses Compiler Chain

3.2.4 Diagram Aliran Data Level 3

Gambar 3.8 mengilustrasikan rincian proses Enkriptor. Masukan dtKodeSumber dibaca karakter demi karakter oleh proses P2.2.1 (Membaca Karakter demi Karakter) dan kemudian meneruskan informasi tersebut ke proses P2.2.3 (Substitusi Karakter). Proses P2.2.2 (Membaca Untaian Kunci) menerima masukan dtKunci, membaca untaian kunci satu demi satu, dan meneruskan informasi tersebut ke proses P2.2.2. Proses P2.2.2 menerima masukan karakter-karakter kode sumber (dtKodeSumber) dan mensubstitusikannya dengan tiap untai kunci (dtKunci) dan menghasilkan karakter-karakter terenkripsi (dtKodeSumberEnkrip).


(51)

Gambar 3.9 mengilustrasikan rincian proses Dekriptor. Karakter demi karakter dtKodeSumberEnkrip dibaca oleh proses P2.3.1 (Membaca Karakter demi Karakter) dan kemudian meneruskan informasi tersebut ke proses P2.3.3 (Substitusi Karakter). Proses P2.3.2 (Membaca Untaian Kunci) membaca untaian kunci satu demi satu, dan meneruskan informasi tersebut ke proses P2.3.2. Proses P2.3.2 menerima masukan karakter-karakter kode sumber (dtKodeSumberEnkrip) dan mensubstitusikannya dengan tiap untai kunci (dtKunci) dan menghasilkan karakter-karakter semula (dtKodeSumber).

Gambar 3.9 Proses Dekriptor

Rincian proses Editor diilustrasikan pada Gambar 3.10. Proses P3.2.1 (Mengolah dan Menampilkan Kode Sumber) menerima masukan dtKodeSumber dan kemudian meneruskan dtKodeSumber tersebut ke proses P3.2.2 (Scanning Kode Sumber) dan proses P3.2.4 (Melakukan Kompilasi/Eksekusi). Selain itu, proses P3.2.1 juga menerima masukan baris kode sumber terformat (dtHighlight) dari proses P3.2.5 (Highlight Kode Sumber) dan informasi preferensi opsi editor dari proses P3.2.3 (Pengaturan Komponen). Proses P3.2.2 melakukan scanning terhadap masukan kode sumber dari proses P3.2.1 dan kemudian meneruskan hasil scan kepada proses P3.2.5. P3.2.3 menerima informasi preferensi opsi editor, mengatur komponen sesuai dengan preferensi tersebut, dan kemudian meneruskannya ke proses P3.2.1 dan proses P3.2.5. Proses 3.2.4 dipanggil ketika pengguna akan mengkompilasi dan atau mengeksekusi kode sumber. Proses 3.2.4 menerima masukan dtKodeSumber, dan meneruskannya ke proses P3.5. Proses 3.2.5 menentukan jenis besaran leksik dari masukan hasil


(52)

scanning proses P3.2.2 dan menghasilkan keluaran dtHighlight sesuai dengan jenis besaran leksik tersebut.

Gambar 3.10 Proses Editor

3.2.5 Kamus Data

Tabel 3.7 mendaftarkan rincian data dan berkas yang digunakan pada diagram aliran data yang telah dipaparkan sebelumnya.

Tabel 3.7 Kamus Data Diagram Aliran Data

Nama Data Tipe Data Keterangan

dtKodeSumber TStrings Baris-baris kode sumber masukan.

dtReg record{firstname, lastname, company, noReg}

Informasi registrasi.

dtOpsiCompiler set of TOpsiComp Himpunan opsi compiler. dtOpsiEditor set of TOpsiEditor Himpunan opsi editor. dtOpsiEnv set of TOpsiEnv Himpunan opsi environment. dtNamaFile String Path lengkap berkas.


(53)

Tabel 3.7 Kamus Data Diagram Aliran Data (Lanjutan)

Nama Data Tipe Data Keterangan

dtInfoDebug TStrings Baris-baris informasi debugging.

dtKodeObj Binary Kode biner mesin.

dtKodeSumberOut TStrings Baris kode sumber keluaran. dtExecutable Binary Kode biner yang dapat

dijalankan.

TStrings array of String Baris-baris untai karakter.

firstname String Nama depan pengguna.

lastname String Nama keluarga pengguna.

company String Perusahaan pengguna.

noReg String Nomor registrasi pengguna.

TOpsiComp enum{ffreeform, ff90, fdollarok, fnobackslash, fonetrip, ffixedlinelength, fnougly, fuglyargs, fuglyassign, fuglyassumed, fuglycomma, fuglycomplex, fuglyinit, fuglylogint, Os, ffastmath, fkeepinlinefunctions, finlinefunctions, ffunctioncse, fgcse, freruncseafterloop, frerunloopopt, msoftfloat, m80837}

Opsi compiler yang tersedia.

TOpsiEditor record{tabsize, fontname, fontsize, ResWrdFont, IntConstFont,

FloatConstFont, CharConstFont, CommentFont}

Pengaturan tampilan editor.

TOpsiEnv enum{finitlocalzero, fsyntaxonly, fcheckmemoryusage, fstackcheck, fverboseasm, fxyzzy, fdebugkludge, fboundscheck, fexceptions, fasynchronousexceptions, fnewexceptions, w, WW, Winline, Wuninitialized, Wunused, W, Z,

noinhibitexec}

Opsi environment yang tersedia.

tabsize Integer Ukuran tabulasi dalam hitungan spasi.


(54)

Tabel 3.7 Kamus Data Diagram Aliran Data (Lanjutan)

Nama Data Tipe Data Keterangan

fontname String Nama font.

fontsize Integer Ukuran font.

ResWrdFont TFont Pengaturan font untuk kata tercadang.

IntConstFont TFont Pengaturan font untuk konstanta bilangan bulat.

FloatConstFont TFont Pengaturan font untuk konstanta bilangan pecahan.

CharConstFont TFont Pengaturan font untuk konstanta untai karakter.

CommentFont TFont Pengaturan font untuk komentar. TFont record{foreground, bold,

italic, underline}

Informasi pengaturan font.

foreground Integer Warna teks.

bold Boolean Status style cetak tebal.

italic Boolean Status style cetak miring. underline Boolean Status style garis bawah. dtKunci String Kunci enkripsi/dekripsi berkas

kode sumber.

dtKodeSumberEnkrip TStrings Baris kode sumber terenkripsi. dtOptComp array of String Untai-untai karakter padanan

TOpsiCompiler.

dtOptEnv array of String Untai-untai karakter padanan TOpsiEnv.

dtNamaFileTemp String Path lengkap berkas sementara.

dtDebug TStrings Informasi debugging yang

dikembalikan oleh compiler, assembler, dan linker. dtNamaFileEXE String Path lengkap executable. dtHighlight TStrings Baris kode ter-highlight

F1 File Berkas kode sumber keluaran.

F2 File Berkas kode objek.

F3 File Berkas executable.

F4 File Berkas registrasi.

F5 File Berkas kode sumber sementara.

F6 File Berkas konfigurasi compiler.

F7 File Berkas konfigurasi environment.


(55)

3.3 State Diagram

State diagram (diagram keadaan) merupakan suatu model matematis untuk merepresentasikan suatu ekspresi reguler yang diterima oleh suatu bahasa. Dari suatu masukan string, dapat diperiksa apakah string tersebut diterima oleh suatu ekspresi reguler atau tidak. Suatu masukan diterima apabila dengan merunut tiap karakter string dari awal sampai akhir, berakhir pada state akhir. Pada Gambar 3.11 diperlihatkan state diagram bilangan desimal. Contoh masukan string yang diterima oleh state diagram bilangan desimal, diantaranya 123 dan +4567.

Gambar 3.11 State Diagram Bilangan Desimal

Gambar 3.12 memodelkan ekspresi reguler bilangan bulat biner ke dalam state diagram. Contoh masukan yang diterima oleh state diagram bilangan biner, diantaranya “101011”B. Dengan merunut karakter demi karakter dari masukan tersebut, maka dapat dicapai state akhir, yaitu bin.

q2

q10 B, b

+, -, Ø q1 ‘’ q7 0, 1 ‘’ q13 q14 ‘’ q11 0, 1 ‘’

B, b q5

bin Ø Ø ‘ q6 ‘ 0, 1 ‘ q12 ‘ 0, 1 q3 0, 1 q8 0, 1 q4 0, 1

q9 0, 1


(56)

q2

q10 O, o

+, -, Ø q1 ‘’ q7 0..7 ‘’ q13 q14 ‘’ q11 0..7 ‘’

O, o q5 oct

Ø Ø ‘ q6 ‘ 0..7 ‘ q12 ‘ 0..7 q3 0..7 q8 0..7 q4 0..7 q9 0..7

Gambar 3.13 State Diagram Bilangan Oktal

Ekspresi reguler bilangan bulat oktal dimodelkan pada Gambar 3.13. Contoh masukan yang tidak diterima oleh state diagram bilangan oktal tersebut adalah “1234’O. Dengan merunut tiap karakter pada string masukan tersebut, state terakhir (oct) tidak dapat dicapai. Karakter masukan hanya dapat dirunut sampai karakter kelima (karakter ‘4’), dan state terakhir yang dapat dicapai adalah state q7.


(57)

Gambar 3.14 mengilustrasikan state diagram untuk ekspresi reguler bilangan bulat heksadesimal. Contoh masukan yang tidak diterima oleh state diagram tersebut adalah ‘123abc’XZ. Dengan merunut tiap karakter pada string masukan, state akhir dapat dicapai pada karakter kesembilan (karakter ‘X’). Tetapi, string masukan tersebut tidak dapat diterima karena terdapat karakter yang tidak dapat dirunut lagi.

Gambar 3.15 State Diagram Bilangan Pecahan

Gambar 3.15 mengilustrasikan state diagram untuk ekspresi reguler bilangan pecahan. Contoh string masukan yang dapat diterima state diagram tersebut adalah +12.34e56. Urutan state yang dilalui: {q1, q2, q3, q3, q5, q5, q5, q6, q7, q8, q8, float}. Karena, state terakhir yang dilalui adalah float dan tiap karakter dirunut sampai karakter terakhir, maka string masukan tersebut diterima.

Gambar 3.16 State Diagram Untaian Karakter

Gambar 3.16 mengilustrasikan state diagram untuk ekspresi reguler untaian karakter. Contoh masukan yang dapat diterima adalah “sedang belajar”.


(58)

3.4 Perancangan Antarmuka

Antarmuka untuk perangkat lunak IDE yang akan dibangun terdiri atas delapan buah form. Gambar 3.17 mengilustrasikan rancangan antarmuka untuk jendela utama. Pada rancangan antarmuka jendela utama terdapat menu bar (A), toolbar (B), tab page code editor (C), dan status bar (D).

Status bar

File Edit Search Execute Tools Window

untittled

A

B

C

D Gambar 3.17 Jendela Utama Perangkat Lunak IDE

Pada Gambar 3.18, menu File terdiri atas submenu New, Open, Recent, Save, Save As, Save All, Close, Close All, Exit. Submenu New digunakan untuk membuka tab code editor yang baru. Submenu Open digunakan untuk membuka berkas kode sumber yang telah ada sebelumnya. Submenu Recent digunakan untuk menampilkan daftar nama berkas kode sumber yang diolah sebelumnya. Submenu Save digunakan untuk memutakhirkan berkas kode sumber yang tersimpan. Submenu Save As digunakan untuk menyimpan berkas kode sumber dengan nama lain. Submenu Save All digunakan untuk menyimpan semua berkas kode sumber yang terbuka. Submenu Close digunakan untuk menutup berkas kode sumber yang sedang aktif. Submenu Close All digunakan untuk menutup semua berkas kode sumber yang terbuka. Submenu Exit digunakan untuk menutup perangkat lunak IDE.


(59)

Gambar 3.18 Menu File

Gambar 3.19 memperlihatkan submenu dari menu Edit. Menu Edit terdiri atas submenu Cut, Copy, Paste, dan Select All. Submenu Cut digunakan untuk memindahkan teks terseleksi ke memory. Submenu Copy digunakan untuk menggandakan teks terseleksi ke memory. Sedangkan submenu Paste digunakan untuk memindahkan teks pada memory ke posisi kursor.

Gambar 3.19 Menu Edit

Gambar 3.20 memperlihatkan submenu dari menu Search. Menu Search terdiri atas submenu Find, Replace, dan Search Again. Submenu Find digunakan untuk memanggil jendela Find. Submenu Replace digunakan untuk memanggil jendela Replace. Submenu Search Again digunakan untuk melanjutkan kembali pencarian sebelumnya.

Gambar 3.20 Menu Search

Gambar 3.21 memperlihatkan submenu dari menu Execute. Menu Execute terdiri atas submenu Compile, Run, dan Compile & Run. Submenu Compile akan


(1)

if (isCharConst(temp) and

(temp[1] = temp[Length(temp)]) and isOctConst(temp)) then

begin

lxm := lxm + getlexeme(str, pos, false); Self.SelLength := Length(lxm);

changeatt(IntConst); end

else

changeatt(default); end;

3 : begin

temp := getlexeme(str, pos, true); if (isCharConst(temp) and

(temp[1] = temp[Length(temp)]) and isHexConst(temp)) then

begin

lxm := lxm + getlexeme(str, pos, false); Self.SelLength := Length(lxm);

changeatt(IntConst); end else changeatt(default); end; end; end

else if (isCharConst(lxm)) then begin

if (UpCase(Self.Lines[Pos.Y][Pos.X + 1]) in ['B', 'O', 'X', 'Z']) then

begin

temp := getlexeme(str, pos, true); case BaseLeading(temp) of

1 : begin

if (isBinConst(lxm)) then begin

lxm := lxm + getlexeme(str, pos, false); Self.SelLength := Length(lxm);

changeatt(IntConst); end

else begin

Self.SelLength := Length(lxm); changeatt(CharConst);

end; end; 2 : begin

if (isOctConst(lxm)) then begin

lxm := lxm + getlexeme(str, pos, false); Self.SelLength := Length(lxm);

changeatt(IntConst); end

else begin

Self.SelLength := Length(lxm); changeatt(CharConst);

end; end; 3 : begin


(2)

94

if (isHexConst(lxm)) then begin

lxm := lxm + getlexeme(str, pos, false); Self.SelLength := Length(lxm);

changeatt(IntConst); end

else begin

Self.SelLength := Length(lxm); changeatt(CharConst);

end; end; else begin

Self.SelLength := Length(lxm); changeatt(CharConst); end; end; end else changeatt(CharConst); end else changeatt(default); Self.SelLength := 0; changeatt(default); end;

until lxm = ''; end;


(3)

(4)

96


(5)

(6)

98