• Tidak ada hasil yang ditemukan

Penerapan String Matching Mengguinakan Algoritma Boyer-Moore Pada Translator Bahasa Pascal Ke C

N/A
N/A
Protected

Academic year: 2017

Membagikan "Penerapan String Matching Mengguinakan Algoritma Boyer-Moore Pada Translator Bahasa Pascal Ke C"

Copied!
88
0
0

Teks penuh

(1)

Skripsi

Diajukan Sebagai Salah Satu Syarat Kelulusan Pada Program Studi Sistem Informasi Jenjang Strata-1 Fakultas Teknik dan Ilmu Komputer

ANDRI KURNAEDI 1.05.07.454

PROGRAM STUDI SISTEM INFORMASI

FAKULTAS TEKNIK DAN ILMU KOMPUTER

UNIVERSITAS KOMPUTER INDONESIA

B A N D U N G

(2)

i

bekerja dengan melakukan parsing kode sumber, lalu menerapkan aturan penerjemahan, dan menampilkan hasil terjemahan ke keluaran. Translator Pascal ke C dapat mengoptimalisasikan waktu yang butuhkan pengguna untuk melakukan alih bahasa Pascal ke C.

Fungsi pengenalan dan penerjemahan dapat dibuat dengan kakas. Untuk mendapatkan aturan penerjemahan yang dimaksud, perlu dilakukan perbandingan sintaksis dari C dan Pascal. Elemen grammar yang harus dieksplorasi adalah struktur program, deklarasi (variabel, tipe, konstanta, dll), ekspresi, statement, aturan penamaan obyek program, dll. Dengan menggunakan algoritma pencocokan string, algoritma Boyer-Moore menjadi pilihan penting dalam proses penerjemahan. Kemiripan antara Pascal dan C memungkinkan keduanya untuk saling diterjemahkan secara penuh.

Selain itu, diketahui pula bahwa Pascal dan C merupakan bahasa pengenalan bagi programmer pemula. Nilai awal sangat mempengaruhi akhir, apabila di awal sudah mengalami kesulitan, dikhawatirkan untuk kedepannya akan menimbulkan banyak isu-isu seputar penguasaan ilmu pemrograman terhadap programmer pemula. Dengan menggabungkan nilai kegunaan translator yang dikaitkan terhadap peningkatan penguasaan ilmu pemrograman dasar, maka diharapkan dapat tercipta suatu aplikasi translator dengan kelebihan-kelebihan dari sudut pandang akademis.

(3)

ii

Translator Pascal to C runs to do parsing source code, then it applies the rule of translating. In addition, it presents the result of the target translation. Translator Pascal to C is able to optimize the time needed for users to carry out translation of Pascal to C.

The intoducing and translating function can be created accurately. To gain the rule of translating needs to be compared the syntactic rule from C and Pascal. The grammmar elements that must be explored are the structure of programme, the customs declarations(variable, type, constancy, etc), an expression, a statement, the regulation of the object naming of programme, etc. Using algorithm with fitting string, Boyer-Moore algorithm becomes an important option in translating process. The similarities between Pascal and C enables both of them to be translated each other completely.

Moreover, Pascal and C are an introduction language for the beginner programmers. The first value can influence the end one very much. If in the beginning there have been the difficulties, they will cause many issues around the programming knowledge to the beginner ones next time. Compounding the value of translator that is connected to the mastery improvement of the base programming knowledge, Hopefully it can be created a translator application with the superiority of academic point of view.

(4)

iii

Assalamu’alaikum Wr. Wb.

Segala puji dan syukur penulis ucapkan kehadirat Allah swt. atas segala

rahmat, hidayah dan Karunia-Nya, dan tidak lupa juga sholawat serta salam

penulis limpahkan kepada Nabi Muhammad SAW, sehingga penulis dapat

menyelesaikan Laporan Skripsi yang berjudul “PENERAPAN STRING MATCHING MENGGUNAKAN ALGORITMA BOYER-MOORE PADA TRANSLATOR BAHASA PASCAL KE C”. Laporan ini diajukan untuk memenuhi salah satu syarat kelulusan Program Strata-1 pada Jurusan Manajemen

Informatika di Universitas Komputer Indonesia.

Penulis dengan segala kerendahan hati mengharapkan saran dan koreksi

yang membangun dari pembaca sehingga dalam penulisan selanjutnya dapat lebih

baik. Penulis banyak mendapatkan bantuan material maupun spiritual dari

berbagai pihak. Dalam kesempatan ini, penulis ingin menyampaikan rasa terima

kasih yang sebesar-besarnya dan setulus-tulusnya kepada :

1. Bapak Dr. Ir. Eddy Suryanto Soegoto, M.Sc., selaku Rektor Universitas

Komputer Indonesia.

2. Bapak Dr. Arry Akhmad Arman, selaku Dekan Fakultas Teknik Universitas

Komputer Indonesia.

3. Bapak Dadang Munandar SE, MSi selaku Ketua Jurusan Program Studi

Sistem Informasi Universitas Komputer Indonesia.

4. Ibu Wartika, S.Kom., M.T, selaku Dosen Wali MI-10 yang telah banyak

(5)

iv yang telah beliau berikan kepada penulis.

6. Para penguji yang telah memberikan masukan-masukan demi kelancaran

dalam proses kelulusan penulis.

7. Semua dosen, staff, dan karyawan Program Studi Sistem Informasi

Universitas Komputer Indonesia.

8. Kedua orang tua dan keluarga yang dengan tulus mendoakan, memberikan

dorongan moril dan materil, masukan, perhatian, dukungan sepenuhnya, dan

kasih sayang yang tidak ternilai.

9. Kepada sahabat terbaik, Helmi Nopiansyah, terima kasih atas semua bantuan

dan dukungannya. Maaf sudah sangat merepotkan. Penulis bangga telah

mengenalnya.

10. Kepada Acep BL dan Dodi Permana sebagai team kuesioner. Semoga suatu

hari nanti penulis dapat membalas semua kebaikan yang telah diberikan.

11. Kepada seluruh Mahasiswa IF angkatan 2008 dan 2010 serta Mahasiswa MI

angkatan 2007 yang telah meluangkan waktu untuk mengisi kuesioner

penelitian skripsi penulis.

12. Kepada Reza William, terima kasih atas kehadiran dan bantuannya disaat

penulis sangat membutuhkan uluran tenaga.

13. Kepada teman-teman kos, terima kasih atas pengertian dan dukungannya

(6)

v

ladang amal dan ibadah yang tidak hanya di dunia tetapi juga di akhirat.

Akhir kata, penulis berharap semoga laporan ini berguna dan bermanfaat

bagi penulis dan pembaca. Semoga segala bantuan yang telah diberikan kepada

penulis mendapat balasan dari Allah swt. Amin.

Wassalamu’alaikaum Wr. Wb.

Bandung, Agustus 2011

(7)

BAB I PENDAHULUAN

1.1. Latar Belakang

Seperti diketahui, proses alih kode perangkat lunak dari satu bahasa ke

bahasa lain seringkali menjadi kendala dikalangan programmer. Ada berbagai

alasan yang melatarbelakangi hal ini, contohnya ketidakcukupan penguasaan

terhadap bahasa target, waktu, referensi, dan lain-lain. Keperluan alih kode bahasa

pun dapat terjadi dengan alasan perubahan proses bisnis, integrasi, regulasi

perusahaan, adaptasi dengan teknologi baru, hardware, maupun hal lainnya.

Proses alih kode tidaklah mudah, terlebih jika kode sumber aplikasi yang

diterjemahkan kompleks dan memiliki ukuran yang besar. Proses alih kode akan

membutuhkan banyak waktu dan tenaga, serta rentan terhadap kesalahan. Maka

diperlukan suatu solusi untuk melakukan proses alih kode secara otomatis dengan

bantuan sebuah alat. Alat yang dimaksud adalah program yang dapat

menterjemahkan kode sumber ke bahasa lain yang dikehendaki. Alat tersebut di

kenal sebagai Translator. Translator adalah program yang menterjemahkan suatu

huruf dengan himpunan terkecil hingga terbesar dari bahasa asal ke bahasa target.

Saat ini, banyak kegiatan akademik di bidang ilmu kajian pemrograman

menggunakan Pascal sebagai pengenalan ilmu pemrograman. Pascal dipilih

karena keluwesan sintaks dan lebih banyak menggunakan bahasa manusia dalam

penggunaannya. Bahasa lain yang juga biasa digunakan adalah C. C lebih banyak

(8)

dibandingkan Pascal. C lebih mendorong penggunanya untuk berfikir lebih kreatif

dalam menyusun logika pemrograman, karena C memiliki kompleksitas dan

variasi sintaks yang lebih rumit dibandingkan Pascal.

Pascal dan C memiliki banyak kesamaan, diantaranya sama-sama

berparadigma prosedural, penerus seri bahasa ALGOL, waktu pertama kali

muncul yang hampir bersamaan, dan lain-lain. C bersifat robust, fleskibel, efisien,

ekspresif dan permisif. Pascal memiliki sintaks yang jelas dan mudah dimengerti,

sehingga banyak dipakai di lingkungan akademik. C banyak dipakai di

lingkungan industri dan sering digunakan sebagai antarmuka dengan software

sistem.

Untuk mendapatkan aturan penerjemahan dari Pascal ke C, penulis perlu

memadankan sintaksis Pascal dan C. Alih kode pada beberapa aspek bahasa

Pascal ke C tidak bisa dilakukan secara straight-forward (kata per kata), namun

memerlukan proses pencocokan sintaksis untuk menyesuaikan lingkungan Pascal

maupun C yang menghasilkan nilai kebenaran maksimal, sehingga

masing-masing lingkungan dapat terdefinisi dengan baik. Untuk itu, dibutuhkannya suatu

algoritma pencocokan sintaksis dengan efisiensi proses terhadap waktu. Dengan

menggunakan Algoritma Boyer Moore sebagai metode pencocokan kata,

diharapkan aplikasi ini dapat menghasilkan keluaran dengan kebenaran mutlak.

1.2. Identifikasi dan Rumusan Masalah 1.2.1. Identifikasi Masalah

(9)

ini, dapat diidentifikasikan beberapa masalah berdasarkan latar belakang di atas,

yaitu :

1. Dibutuhkannya banyak waktu dan tenaga dalam proses alih kode Pascal ke

C, serta rentan terhadap kesalahan.

2. Alih kode pada beberapa aspek bahasa Pascal ke C tidak bisa dilakukan

secara straight-forward.

3. Diperlukannya suatu solusi algoritma untuk melakukan proses alih kode

Pascal secara otomatis ke bahasa C.

1.2.2. Rumusan Masalah

Berdasarkan identifikasi masalah yang mengacu pada permasalahan di

atas, maka dirumuskanlah beberapa masalah sehubungan pembangunan

Translator, yaitu :

1. Bagaimana alur algoritma translator dapat mengalihkan Pascal ke C secara

otomatis.

2. Bagaimana metode penerjemahan kode yang digunakan dapat

mengalihkan Pascal ke C dengan benar.

3. Bagaimana translator dapat melakukan pencocokan lingkungan kode

Pascal ke C dengan waktu yang relatif singkat.

1.3. Maksud dan Tujuan Penelitian

Berdasarkan pemaparan di atas, berikut maksud dan tujuan

(10)

1.3.1. Maksud Penelitian

Alasan utama pembangunan translator ini adalah untuk menciptakan

sebuah aplikasi pendukung yang dapat mengalihkan suatu kode bahasa program

ke bahasa program yang lain, yaitu Pascal ke C. Sehingga dapat menjadi solusi

ketika dibutuhkannya perubahan kode secara besar dari kode Pascal ke C.

1.3.2. Tujuan Penelitian

Berikut merupakan tujuan dari pembangunan translator Pascal ke C :

1. Menemukan alur algoritma translator yang dapat mengalihkan Pascal ke C

secara otomatis.

2. Menemukan metode penerjemahan kode yang digunakan dapat

mengalihkan Pascal ke C dengan benar.

3. Mengembangkan metode pencocokan lingkungan Pascal ke C dengan

pertimbangan lama waktu proses.

1.4. Manfaat Penelitian

Berikut akan dijelaskan manfaat penelitian ini berdasarkan manfaat

akademis dan manfaat taktis.

1.4.1. Manfaat Akademis

Penelitian pembangunan translator memiliki manfaat besar terhadap

kegiatan akademik penulis yaitu sebagai pemenuhan syarat kelulusan Strata 1.

(11)

1.4.2. Manfaat Taktis

Dari sudut pandang pengguna, translator Pascal ke C memiliki manfaat

sebagai translator otomatis yaitu merubah Pascal ke C secara cepat dan akurat.

Selain itu, translator juga dapat digunakan sebagai pembanding penggunaan

sintaksis kode Pascal terhadap C, sehingga membantu pengguna untuk

menyimpulkan penggunaan suatu sintaksis Pascal pada C.

1.5. Batasan Masalah

Dalam penelitian ini, Translator hanya dapat menterjemahkan kode

sumber Pascal ke C, dengan spesifikasi kode sumber sebagai berikut :

1. Pernyataan

a. Sederhana

i. Pernyataan Assignment, ditandai dengan penggunaan operator

assignment (:=).

ii. Pemanggilan procedure input-keyboard dan output-monitor serta

pernyataan goto

b. Terstruktur

i. Pernyataan Conditional, pernyataan seleksi kondisi.

ii. Pernyataan Repetitive, pernyataan perulangan.

c. Pernyataan Compound, gabungan antara pernyataan sederhana dan

terstruktur. Ditandai dengan penggunaan “begin” dan “end”.

2. Tipe Data Sederhana

(12)

b. Real

c. Karakter dan string

d. Boolean

3. Ekspresi

a. Numerik / aritmatika

b. String

c. Boolean / logika

Dari spesifikasi di atas, kode sumber yang dimaksud adalah kode sumber

sub-program tanpa keikutsertaan bagian deklarasi dan lainnya, dengan begin –

end, if – else, while – do, repeat – until, for – do, goto, Input (read/readln ke scanf,

masukan dari keyboard), Output (write/writeln ke printf, keluaran ke layar)

sebagai pernyataan yang dapat dialihkan. Selain itu, tranlator hanya dapat

dijalankan pada Sistem Operasi Windows XP dan setelahnya.

1.6. Lokasi dan Waktu Penelitian

Berikut jadwal lokasi dan waktu penelitian pembangunan translator :

Tabel 1.1 Jadwal Penelitian

(13)

Tabel 1.1 Jadwal Penelitian (lanjut)

4 Pembuatan Perangkat Lunak

(14)

BAB II

LANDASAN TEORI

2.1. Konsep Dasar Algoritma 2.1.1. Sejarah Algoritma

Ditinjau dari asal-usul katanya, kata Algoritma mempunyai sejarah yang

unik. Orang hanya menemukan kata algorism yang berarti proses menghitung

dengan angka arab. Seseorang dikatakan algorist jika orang tersebut menghitung

menggunakan angka arab. Para ahli bahasa berusaha menemukan asal kata ini,

namun hasilnya kurang memuaskan.

Akhirnya para ahli sejarah matematika menemukan asal kata tersebut yang

berasal dari nama penulis buku arab yang terkenal yaitu Abu Ja’far Muhammad

Ibnu Musa Al-Khuwarizmi. Al-Khuwarizmi dibaca orang barat menjadi

Algorism. Al-Khuwarizmi menulis buku yang berjudul Kitab Al Jabar

WalMuqabala yang artinya “Buku pemugaran dan pengurangan” (The book of

restoration and reduction). Dari judul buku tersebut diperoleh akar kata “Aljabar

(Algebra).

Perubahan kata dari algorism menjadi algorithm muncul karena kata

algorism sering dikelirukan dengan arithmetic, sehingga akhiran –sm berubah

menjadi –thm. Karena perhitungan dengan angka Arab sudah menjadi hal yang

biasa, maka lambat laun kata algorithm berangsur-angsur dipakai sebagai metode

perhitungan (komputasi) secara umum, sehingga kehilangan makna kata aslinya.

(15)

2.1.2. Definisi Algoritma

Algoritma adalah urutan langkah-langkah logis penyelesaian masalah yang

disusun secara sistematis dan logis. Kata logis merupakan kata kunci dalam

algoritma. Langkah-langkah dalam algoritma harus logis dan harus dapat

ditentukan bernilai salah atau benar. Dalam beberapa konteks, algoritma adalah

spesifikasi urutan langkah untuk melakukan pekerjaan tertentu.

Pertimbangan dalam pemilihan algoritma adalah algoritma haruslah benar.

Artinya algoritma akan memberikan keluaran yang dikehendaki dari sejumlah

masukan yang diberikan. Tidak peduli serumit apapun algoritma, jika

memberikan keluaran yang salah, pastilah algoritma tersebut bukanlah algoritma

yang baik.

Pertimbangan lain yang harus diperhatikan adalah seberapa baik hasil

yang dicapai oleh algoritma tersebut. Hal ini penting terutama pada algoritma

untuk menyelesaikan masalah yang memerlukan aproksimasi hasil. Algoritma

yang baik harus mampu memberikan hasil yang sedekat mungkin dengan nilai

yang sebenarnya.

Selanjutnya adalah efisiensi algoritma. Efisiensi algoritma dapat ditinjau

dari 2 hal yaitu efisiensi waktu dan memori. Meskipun algoritma memberikan

keluaran yang benar, tetapi jika harus menunggu lama untuk mendapatkan

keluarannya, algoritma tersebut bukanlah algoritma yang baik, setiap orang

(16)

Dalam kenyataannya, setiap orang bisa membuat algoritma yang berbeda

untuk menyelesaikan suatu permasalahan, walaupun terjadi perbedaan dalam

menyusun algoritma, tentunya diharapkan keluaran yang sama.

2.2. Pengantar Pascal 2.2.1. Sejarah Pascal

Pascal merupakan pengembangan dari bahasa Algol 60, bahasa

pemrograman untuk sains komputasi. Tahun 1960, beberapa ahli komputer

bekerja untuk mengembangkan bahasa Algol, salah satunya adalah Dr. Niklaus

Wirth dari Swiss Federal Institute of Technology (ETH-Zurich), yang merupakan

anggota grup yang membuat Algol.

Tahun 1971, diterbitkan suatu spesifikasi untuk highly-structured

language (bahasa tinggi yang terstruktur) yang menyerupai Algol yaitu Pascal.

Pascal bersifat data oriented, yaitu programmer diberi keleluasaan untuk

mendefinisikan data sendiri. Pascal juga merupakan teaching language (banyak

dipakai untuk pengajaran tentang konsep pemrograman). Kelebihan yang lain

adalah penulisan kode Pascal yang luwes.

2.2.2. Ciri – Ciri Pascal

Susunan dari kode-kode dalam teks Pascal harus ditulis secara terurut,

pernyataan-pernyataan yang ditulis lebih awal akan dieksekusi lebih dahulu. Oleh

(17)

maka variable itu harus terdefinisi dahulu sebelumnya. Hal ini terutama

menyangkut pada pemanggilan sub-program oleh sub-program yang lain.

Blok dengan batas-batas yang jelas.Pascal memberikan pembatas yang

jelas pada tiap-tiap blok, seperti pada blok program utama, sub-program, struktur

kontrol (pengulangan/ pemilihan), dll. Pemakaian kata kunci “begin” untuk

mengawali operasi pada blok dan “end” untuk menutupnya memudahkan

programmer menyusun programnya dengan mudah.

2.3. Pengantar C 2.3.1. Sejarah C

Berasal dari bahasa BCPL (Basic Combined Programming Language)

oleh Martin Richard, Cambridge tahun 1967, Ken Thompson membuat bahasa B

untuk dipakai pada komputer DEC PDP-7 dibawah sistem operasi UNIX pada

Bell laboratory, Murray Hill, New Jersey tahun 1970.

Bahasa B merupakan suatu bahasa pemrograman yang tidak memiliki

jenis suatu data seperti halnya PL/M. Berdasarkan gambaran bahasa B, Dennis

Ritchie menulis bahasa C. Nama C diambil berdasarkan urutan sesudah B dari

bahasa BCPL. Tujuan bahasa C pada mulanya untuk membentuk suatu sistem

operasi yang akan digunakan pada mesin komputer DEC PDP-11 yang baru.

Pada tahun 1975, sistem operasi UNIX versi 6 dan bahasa C mulai

diberikan kepada Universitas maupun Akademi. Dan pada tahun 1979, sistem

operasi UNIX versi 7 dikeluarkan dengan bahasa C. Sistem operasi ini (versi 7)

(18)

Pada 1978 Dennis Ritchie dan Brian Kernighan kemudian

mempublikasikan buku The C Programming Language yang semakin memperluas

pemakaiannya dan dijadikan standar oleh ANSI (American National Standard

Institute) pada tahun 1989. C kemudian dikembangkan lagi oleh Bjarne Stroustrup

menjadi C++ (1986). C dan/atau C++ banyak digunakan sebagai bahasa

pemrograman untuk membuat sistem operasi.

2.3.2. Ciri-ciri C

Program C pada hakekatnya tersusun atas sejumlah blok fungsi. Sebuah

program minimal mengandung sebuah fungsi. Fungsi pertama yang harus ada

dalam program C dan sudah ditentukan namanya adalah main(). Setiap fungsi

terdiri atas satu atau beberapa pernyataan, yang secara keseluruhan dimaksudkan

untuk melaksanakan tugas khusus. Bagian pernyataan fungsi (sering disebut tubuh

fungsi) diawali dengan tanda kurung kurawal buka ({) dan diakhiri dengan tanda

kurung kurawal tutup (}). Di antara kurung kurawal itu dapat dituliskan

statemen-statemen program C.

Namun pada kenyataannya, suatu fungsi bisa saja tidak mengandung

pernyataan sama sekali. Walaupun fungsi tidak memiliki pernyataan, kurung

kurawal haruslah tetap ada. Sebab kurung kurawal mengisyaratkan awal dan akhir

definisi fungsi. Bahasa C dikatakan sebagai bahasa pemrograman terstruktur

karena strukturnya menggunakan fungsi-fungsi sebagai program-program

bagiannya (subroutine). Fungsi-fungsi yang ada selain fungsi utama (main())

(19)

utama atau diletakkan di file pustaka (library). Jika fungsi-fungsi diletakkan di file

pustaka dan akan dipakai di suatu program, maka nama file judulnya (header file)

harus dilibatkan dalam program yang menggunakannya dengan preprocessor

directive berupa #include.

2.4. Konsep Dasar String Matching 2.4.1. String Matching

String matching adalah pencarian sebuah pattern pada sebuah teks. Prinsip

kerja algoritma string matching adalah sebagai berikut:

1. Memindai teks dengan bantuan sebuah window yang ukurannya sama

dengan panjang pattern.

2. Menempatkan window pada awal teks.

3. Membandingkan karakter pada window dengan karakter dari pattern.

Setelah pencocokan (baik hasilnya cocok atau tidak cocok), dilakukan shft

ke kanan pada window. Prosedur ini dilakukan berulang-ulang sampai

window berada pada akhir teks. Mekanisme ini disebut mekanisme

sliding-window.

Algoritma string matching mempunyai tiga komponen utama, yaitu:

1. Pattern, yaitu deretan karakter yang akan dicocokkan dengan teks,

dinyatakan dengan x[0..m-1], panjang pattern dinyatakan dengan m.

2. Teks, yaitu tempat pencocokan pattern dilakukan, dinyatakan dengan

(20)

3. Alfabet, yang berisi semua simbol yang digunakan oleh bahasa pada teks

dan pattern, dinyatakan dengan ∑ dengan ukuran dinyatakan dengan

ASIZE.

2.4.2. Algoritma Boyer-Moore

Algoritma Boyer-Moore termasuk algoritma string matching yang paling

efisien dibandingkan algoritma-algoritma string matching lainnya. Karena

sifatnya yang efisien, banyak dikembangkan algoritma string matching dengan

bertumpu pada konsep algoritma Boyer-Moore, beberapa di antaranya adalah

algoritma Turbo BM dan algoritma Quick Search.

Algoritma Boyer-Moore menggunakan metode pencocokan string dari

kanan ke kiri yaitu memindai karakter pattern dari kanan ke kiri dimulai dari

karakter paling kanan. Algoritma Boyer-Moore menggunakan dua fungsi shift

yaitu good-suffix shift dan bad-character shift untuk mengambil langkah

berikutnya setelah terjadi ketidakcocokan antara karakter pattern dan karakter teks

yang dicocokkan.

2.5. Konsep Dasar Stack

Stack adalah suatu bentuk khusus dari linear list (suatu struktur data yang

merupakan himpunan terurut yang dapat berkurang atau bertambah setiap saat) di

mana operasi penyisipan dan penghapusan atas elemen-elemennya hanya dapat

dilakukan pada satu sisi saja yang disebut sebagai “TOP”. Ada empat operasi

(21)

1. Create, operator ini berfungsi untuk membuat sebuah stack kosong.

2. IsEmpty, operator ini berfungsi untuk menentukan apakah suatu stack

adalah stack kosong.

3. Push, operator ini berfungsi untuk menambahkan satu elemen ke dalam

stack.

4. Pop, operator ini berfungsi untuk mengeluarkan satu elemen dari dalam

stack.

Dalam penggunaannya, untuk menempatkan stack biasanya digunakan

sebuah array. Tetapi perlu diingat di sini bahwa stack dan array adalah dua hal

yang berbeda. Selain itu penggunaan stack dengan array dirasakan kurang tepat.

Penggunaan stack pada pembangunan Translator ini menggunakan record sebagai

implementasi stack.

2.6. Konsep Dasar Pohon Biner

Tree/pohon merupakan struktur data yang tidak linear/non linear yang

digunakan terutama untuk merepresentasikan hubungan data yang bersifat

hierarkis antara elemen-elemennya. Kumpulan elemen yang salah satu elemennya

disebut dengan root (akar) dan sisa elemen yang lain disebut sebagai simpul

(node/vertex) yang terpecah menjadi sejumlah himpunan yang tidak saling

berhubungan satu sama lain, yang disebut subtree/cabang.

Sebuah pohon biner T dapat didefinisikan sebagai sekumpulan terbatas

(22)

a. T dikatakan kosong (disebut null tree/pohon null atau empty tree/pohon

kosong)

b. T terdiri dari sebuah node khusus yang dipanggil R, disebut root dari T

dan node-node T lainnya membentuk sebuah pasangan terurut dari binary

tree T1 dan T2 yang tidak berhubungan yang kemudian dipanggil subtree

kiri dan subtree kanan.

Jika T1 tidak kosong maka rootnya disebut successor kiri dari R dan jika

T2 tidak kosong, maka rootnya disebut successor dari R.

Jenis-jenis binary tree :

1. Complete Binary Tree

Suatu binary tree T akan disebut complete/lengkap jika semua levelnya

memiliki child 2 buah kecuali untuk level paling akhir. Tetapi pada akhir

level setiap leaf/daun muncul terurut dari sebelah kiri.

2. Extended Binary Tree : 2-Tree

Sebuah binary tree dikatakan 2-tree atau extended binary tree jika tiap

simpul N memiliki 0 atau 2 anak. Simpul dengan 2 anak disebut dengan

simpul internal (internal node), dan simpul dengan 0 anak disebut dengan

external node. Kadang-kadang dalam diagram node-node tersebut

dibedakan dengan menggunakan tanda lingkaran untuk internal node dan

(23)

2.7. Konsep Dasar Flowchart

Flowchart adalah representasi grafis peta atau dari suatu proses.

Langkah-langkah dalam suatu proses yang ditampilkan dengan bentuk simbolik, dan aliran

proses ini ditunjukkan dengan panah menghubungkan simbol. Pemrograman

komputer flowchart dipopulerkan pada 1960-an yang digunakan untuk

memetakan logika program. Dalam pekerjaan peningkatan kualitas, flowchart

sangat berguna untuk menampilkan bagaimana proses saat ini berfungsi atau bisa

idealnya fungsi.

Flowchart dapat membantu melihat apakah langkah-langkah proses telah

logis, mengungkap masalah atau miskomunikasi, menentukan batas-batas proses,

dan mengembangkan dasar umum pengetahuan tentang proses. Flowcharting

proses seringkali membawa kepada redudansi cahaya, penundaan, buntu, dan jalur

tidak langsung yang dinyatakan akan tetap diperhatikan atau diabaikan. Tapi

(24)

BAB III

METODOLOGI PENELITIAN

3.1. Analisis Masalah

Pada analisis masalah ini, penulis akan menjabarkan mengenai aturan

terjemahan yang diberlakukan pada suatu Teks yang dikenali sebagai Pascal.

Idealnya, suatu teks akan dikenali sebagai pernyataan Pascal jika teks

tersebut telah sukses melalui proses compile pada Turbo Pascal 7.0. Pernyataan

Pascal tidak bisa secara langsung diterjemahkan ke bentuk C. Proses

penerjemahan pun harus memiliki kualifikasi yang baik dari sudut lama waktu

proses yang dibutuhkan. Maka harus diterapkannya beberapa fungsi pengenalan,

diantaranya:

1. Penyesuaian algoritma Boyer-Moore pada setiap kasus pencocokan.

2. Proses pencocokan string terhadap teks, dimaksudkan agar setiap kata

dapat dikenali oleh translator dan dapat diterjemahkan.

3. Aturan terjemahan, dimaksudkan sebagai aturan yang diterapkan jika

ditemukannya sebuah bentuk pernyataan di dalam teks.

4. Mengenali jenis ekspresi yang dioperasikan dan menemukan bentuk hasil

operasi dari Pascal ke C.

5. Proses handling untuk setiap bentuk penyataan yang tidak memiliki

aturan penerjemahan.

(25)

3.2. Analisis Translator

Berikut pemaparan kebutuhan primer/utama translator sebagai alat alih

bahasa Pascal ke C.

3.2.1. Algoritma Boyer-Moore

Algoritma Boyer-Moore adalah salah satu algoritma pencarian string,

dipublikasikan oleh Robert S. Boyer, dan J. Strother Moore pada tahun 1977.

Algoritma ini dianggap sebagai algoritma yang paling efisien pada aplikasi

umum.

Tidak seperti algoritma pencarian string yang ditemukan sebelumnya,

algoritma Boyer-Moore mulai mencocokkan karakter dari sebelah kanan pattern.

Ide dibalik algoritma ini adalah bahwa dengan memulai pencocokkan karakter

dari kanan, dan bukan dari kiri, maka akan lebih banyak informasi yang didapat.

3.2.1.1. Cara Kerja Algoritma Boyer-Moore

Dimisalkan ada sebuah usaha pencocokan yang terjadi pada teks[i..i + n −

1], dan anggap ketidakcocokan pertama terjadi di antara teks[i + j] dan pattern[j],

dengan 0 < j < n. Berarti, teks[i + j + 1..i + n − 1] = pattern[j + 1..n − 1] dan a =

teks[i + j] tidak sama dengan b = pattern[j].

Jika u adalah akhiran dari pattern sebelum b dan v adalah sebuah awalan

dari pattern, maka penggeseran-penggeseran yang mungkin adalah :

1. Penggeseran good-suffix yang terdiri dari mensejajarkan potongan teks[i +

j + 1..i + n − 1] = pattern[j + 1..n − 1] dengan kemunculannya paling

kanan di pattern yang didahului oleh karakter yang berbeda dengan

(26)

mensejajarkan akhiran v dari teks[i + j + 1..i + n − 1] dengan awalan dari

pattern yang sama.

2. Penggeseran bad-character yang terdiri dari mensejajarkan teks[i + j]

dengan kemunculan paling kanan karakter tersebut di pattern. Bila

karakter tersebut tidak ada di pattern, maka pattern akan disejajarkan

dengan teks[i + n + 1].

Secara sistematis, langkah-langkah yang dilakukan algoritma

Boyer-Moore pada saat mencocokkan string adalah :

1. Algoritma Boyer-Moore mulai mencocokkan pattern pada awal teks.

2. Dari kanan ke kiri, algoritma ini akan mencocokkan karakter per karakter

pattern dengan karakter di teks yang bersesuaian, sampai salah satu

kondisi berikut dipenuhi :

a. Karakter di pattern dan di teks yang dibandingkan tidak cocok

(mismatch).

b. Semua karakter di pattern cocok. Kemudian algoritma akan

memberitahukan penemuan di posisi ini.

3. Algoritma kemudian menggeser pattern dengan memaksimalkan nilai

penggeseran good-suffix dan penggeseran bad-character, lalu mengulangi

(27)

3.2.1.2. Pseudocode Algoritma Boyer-Moore

Berikut representasi dari algorima Boyer-Mooyer dengan menggunakan

pseudocode :

(28)
(29)

Gambar 3.3 Pseudocodealgoritma Boyer-Moore preBmBc Tabel untuk penggeseran bad-character dan good-suffix dapat dihitung

dengan kompleksitas waktu dan ruang sebesar O(n + σ) dengan σ adalah besar

(30)

Gambar 3.4 Pseudocode algoritma Boyer-Moore Search

Pada fase pencarian, algoritma Boyer-Moore membutuhkan waktu sebesar

O(mn), pada kasus terburuk, algoritma ini akan melakukan 3n pencocokkan

karakter, namun pada performa terbaiknya algoritma ini hanya akan melakukan

O(m/n) pencocokkan.

3.2.2. Analisis Aturan Penerjemahan

Aturan penerjemahan adalah hasil hubungan sintaksis pernyataan Pascal

terhadap C. Aturan penerjemahan digunakan untuk mengenali dan memecah

(31)

C. Aturan ini diperoleh dari hasil analisis kedua sintaksis. Berikut penjabaran dari

kedua sintaksis.

3.2.2.1. Analisis Sintaksis Pernyataan Pascal

Analisis dikaji berdasarkan sintaksis Pascal yang telah ditetapkan.

Sedangkan pengaplikasian pernyataan, dikaji berdasarkan aturan di Turbo Pascal

7.0. Pengkajian pertama yaitu Pascal tidak case sensitif.

3.2.2.1.1. Pernyataan / Statement

Pernyataan Adalah instruksi atau gabungan instruksi, yang menyebabkan

komputer melakukan aksi. Ragam pernyataan dalam Pascal terdiri atas :

1. Pernyataan sederhana, setiap jenis pernyataan ini harus diakhiri oleh “;”.

a. Menandai sebuah item data ke sebuah variabel (assignment statement).

Analisis bentukan pernyataan, contoh :

X := Y * 4.135 ;

Variabel Operator Ekspresi Tutup

Variabel diasumsikan sebagai sebuah pengenal / identifier khusus.

Pernyataan ini dikenali jika ditemukannya operator “:=” setelah pengenal

dan hanya jika pengenal telah terdaftar sebagai variabel. Setelah itu,

operator harus diikuti oleh sebuah ekspresi. Nilai keharusan adalah

mutlak, artinya jika tidak diikuti oleh sebuah ekspresi, maka penyataan ini

dinyatakan salah. Selain itu, ekspresi harus memiliki hasil operasi dengan

tipe data yang sama terhadap variabel.

(32)

Analisis bentukan pernyataan, contoh :

Write (Y * 4.135, „andrik‟) ;

Pengenal Ekspresi Tutup

Pengenal write tidak harus selalu diikuti oleh sebuah ekspresi.

Ekspresi yang dimiliki write harus diapit oleh “(“ dan “)” serta ekpresi

tidak diperkenankan berupa karakter kosong. Jumlah ekspresi tidak

dibatasi, hanya saja masing-masing ekspresi harus dipisahkan oleh “,”.

Nilai keharusan adalah mutlak. Aturan ini diterapkan pula pada

penggunaan pengenal WRITELN.

Read (Y, Z) ;

Pengenal Variabel Tutup

Aturan penggunaan pengenal read dapat menggunakan aturan

penggunaan pengenal write, hanya saja penggunaan ekspresi pada read

tidak diizinkan. Pernyataan ini hanya mengenal variabel. Variabel bernilai

benar hanya jika variabel tersebut telah terdaftar. Aturan ini diterapkan

pula pada pernyataan READLN.

Readkey ;

(33)

Readkey dikenali sebagai pernyataan benar jika setelah pengenal

diikuti “;”. Selain itu readkey dinyatakan salah. Karakter newline, tab, dan

space diabaikan.

Gotoxy (y, z) ;

Pengenal Ekspresi Tutup

Penggunaan pengenal gotoxy dapat diterapkan penggunaan

pengenal write. Hanya saja, gotoxy harus diikuti sebuah ekspresi dan

ekspresi harus selalu diapit oleh “(“ dan “)”. Sedangkan ekspresi harus

berjumlah 2 dan hasil operasi ekspresi harus bertipe bilangan bulat.

Keharusan ini bersifat mutlak.

2. Terstruktur:

a. Pernyataan perulangan (Repetitive statement)

Analisis bentukan pernyataan, contoh:

While Y > 100 Do Readkey;

Pengenal Ekspresi Pengenal Pernyataan

Pengenal while harus selalu diikuti oleh ekspresi yang jika

dioperasikan akan menghasilkan tipe boolean, dan harus selalu diikuti oleh

pengenal do. Tidak ada aturan khusus mengenai penggunaan pernyataan

pada while. Aturan penggunaan pernyataan mengikuti kesesuaian jenis

(34)

Repeat Readkey; Until Y > 100;

Pengenal Pernyataan Pengenal Ekspresi

Pengenal repeat harus selalu diikuti oleh pengenal until setelah

pernyataan. Sedangkan penggunaan pernyataan tidak menjadi sebuah

keharusan. Aturan khusus pada pengenal until adalah, satu pernyataan

sebelum until dapat menggunakan “;” sebagai penutup maupun tidak.

For Y:=1+Y To Y +

100

Do Readkey;

Pengenal P_Assignment Pengenal Ekspresi Pengenal Pernyataan

Pernyataan di atas harus selalu terdiri dari 3 buah pengenal seperti

yang terlihat pada contoh. Pengenal to dapat diganti dengan menggunakan

downto. Hal terpenting dalam operasi ekspresi pada P_Assignment adalah

hasil operasi ekspresi harus bertipe bilangan bulat. Penggunaan pernyataan

setelah pengenal do merupakan suatu ketidakharusan.

b. Pernyataan kondisi (Conditional statement)

Analisis bentukan pernyataan, contoh :

If Y > 100 Then Readkey Else Read;

Pengenal Ekspresi Pengenal Pernyataan Pengenal Pernyataan

Pada penggunaan pernyataan di atas, aturan pertama yaitu

pengenal then hanya dianggap benar jika sebelum pengenal tersebut

ditemukan pengenal if, dan else hanya dianggap benar jika di sebelum

(35)

dianggap benar jika setelahnya ditemukan pernyataan then. Kondisi

khusus untuk else, pernyataan sebelum else harus tidak diikuti oleh “;”,

keharusan bersifat mutlak. Sedangkan aturan untuk penggunaan

pernyataan, mengikuti aturan pernyataan yang berkesesuaian. Untuk

ekspresi, hasil operasi ekspresi harus bertipe boolean, keharusan bernilai

mutlak.

c. Pernyataan campuran (Compound statement), jenis pernyataan ini dapat

terbentuk dari berbagai jenis pernyataan. Perbedaan yang mencolok dari

jenis pernyataan ini adalah pada penggunaan blok pernyataan. Pernyataan

campuran selalu diapit oleh pernyataan BEGIN dan END.

Analisis bentukan pernyataan, contoh :

Begin ← Awalan

Bentuk awalan pada pernyataan ini harus selalu dituliskan sebagai

begin dengan tanpa penyatuan terhadap karakter lain selain newline, tab,

dan space, baik di awal maupun di akhir. Selain itu, pernyataan ini harus

menggunakan end sebagai penutup blok. End harus selalu diikuti oleh “;”.

Sedangkan penggunaan begin dan end dapat disetarakan dengan

penggunaan pernyataan readkey. Terdapat suatu aturan khusus di

pernyataan ini, yaitu satu pernyataan sebelum end diizinkan untuk tidak

(36)

3.2.2.1.2. Tipe Data

Jenis – jenis tipe data sederhana yang dikenal dalam bahasa Pascal antara

lain yaitu :

1. Integer. Tipe data ini terdiri atas integer positif, integer negatif dan nol yang

merupakan nilai bilangan bulat. Pada Turbo Pascal 7.0 jenis tipe data ini di

bagi atas beberapa bagian, yaitu :

Tabel 3.1 Tipe data integer Pascal

Tipe Ukuran Memori (Dalam Byte) Jangkauan Nilai

Byte 1 0..255

Shortint 1 -128..127

Integer 2 -32768..32767

Word 2 0..65535

Longint 4 -2147483648..2147483647

Operator Integer terdiri atas : + , - , * , / , DIV dan MOD.

2. Real. Penulisan untuk jenis data ini selalu menggunakan titik desimal. Nilai

konstanta numerik real berkisar dari 1E-38 sampai dengan 1E+38. E

menunjukkan nilai 10 pangkat. Contoh :

123.45 | 12E5 | 12E+5 | -12.34  penulisan benar.

12345.  salah, titik desimal tidak boleh di belakang

.1234  salah, titik desimal tidak boleh di muka

Pada Turbo Pascal, jenis data ini dibedakan atas :

Tabel 3.2 Tipe data real Pascal

Tipe Ukuran Memori (Dalam Byte) Jangkauan Nilai

Single 4 1.5x10E-45..3.4x10E38

Double 8 5.0x10E-324..1.7x10E308

Extended 10 1.9x10E-4951..1.1x10E4932

(37)

Operator untuk tipe data ini terdiri atas : + , - , * dan /

3. Karakter dan string. Tipe data karakter adalah karakter tunggal atau sebuah

karakter yang ditulis diantara tanda petik tunggal, seperti misalnya

„A‟,‟a‟,‟!‟,‟5‟ dsb. Dasarnya adalah ASCII Character Set. Sedangkan tipe data

string merupakan urut-urutan dari karakter yang terletak di antara tanda petik

tunggal. Nilai data string akan menempati memori sebesar banyaknya

karakter stringnya ditambah dengan 1 byte. Bila panjang dari suatu string di

dalam deklarasi variabel tidak disebutkan, maka dianggap panjangnya adalah

255 karakter.

4. Boolean. Jenis data ini mempunyai nilai TRUE atau FALSE. Operator untuk

tipe data ini adalah :

a.Logical Operator, yaitu : NOT, AND dan OR

b.Relational Operator, yaitu : >, <, >=, <=, <> dan =

3.2.2.1.3. Ekspresi

Sebuah ekspresi dapat dikenali dengan penggunaan tanda “(“ dan “)”

maupun tidak. Penggunaan variabel di dalam sebuah pernyataan, dapat

dikategorikan sebagai ekspresi.

1. Numerik / aritmatika dan string. Ekspresi aritmatika adalah semua jenis

ekspresi yang jika dioperasikan akan menghasilkan nilai dengan tipe data

numerik (integer / real). Begitupun sebaliknya dengan ekspresi string.

2. Boolean / logika. Jenis ekspresi yang jika dioperasikan akan menghasilkan

(38)

Tabel 3.3 Tipe data hasil operasi ekspresi Pascal

Operator Tipe Data

Operand 1 Operand 2 Hasil Operasi

not - Boolean Boolean shr, shl, <<, >> String Integer Integer

-, + - Real Real

3.2.2.2. Analisis Sintaksis Pernyataan C

Di dalam penggunaannya, terdapat beberapa perbedaan yang cukup

mendasar mengenai bentukan sebuah pernyataan, ekspresi, maupun tipe data C

terhadapa Pascal. Pengkajian penggunaan pernyataan C dilandasi dengan sintaksis

C yang ditelah dipatenkan, sedangkan penulisan pernyataan dikaji melalui Turbo

C 3.0. Pengkajian pertama yaitu C case sensitif. Pada penerapannya, sintataksis

pernyataan C hanya digunakan sebagai aturan penggabungan hasil translasi. Oleh

karena itu pengkajian dibatasi terhadap pernyataan yang memiliki hubungan

terhadap sintaksis pernyataan Pascal yang digunakan sebagai kode sumber.

(39)

1. Tipe data integer dan boolean. Pada C, tidak terdapat tipe boolean. C

menggunakan bilangan 0 sebagai false dan selain 0 sebagai true.

2. String kontrol (%SC). Diartikan sebagai penentu format dari sebuah tipe

data hasil operasi ekspresi yang digunakan untuk membaca ataupun

menampilkan sebuah ekspresi.

Tabel 3.4 Daftar string kontrol C String

Kontrol Keterangan

%c Sebuah karakter

%s Sebuah string

%u Data bilangan tak bertanda (unsigned) dalam bentuk desimal %d, %i Bilangan integer bertanda (signed) dalam bentuk desimal %o Bilangan bulat tak bertanda dalam bentuk oktal

%x, %X Bilangan bulat tak bertanda dalam bentuk heksadesimal

%f Bilangan real

%e, %E Bilangan real dalam notasi eksponensial

%g, %G Bilangan real dengan kesesuaian terhadap format %f atau %E l Merupakan awalan yang digunakan untuk %d, %u, %x, %X,

%o untuk menyatakan long int. Jika diterapkan bersama %e %E, %f, %F, %g atau %G akan memiliki nilai double.

L Merupakan awalan yang digunakan untuk %f, %e, %E, %g dan %G untuk menyatakan long double

h Merupakan awalan yang digunakan untuk %d, %i, %o, %u, %x, atau %X untuk menyatakan short int

3.2.2.3. Analisis Hubungan Sintaksis Pascal dan C

Pada tahapan analisis ini, hubungan antara Pascal dan C akan dikaji

berdasarkan hubungan bentukan per pernyataan, ekspresi, maupun tipe data yang

apabila dieksekusi memiliki nilai operasi yang sama. Dengan batasan pengkajian

bahwa nilai kebenaran masukan kode sumber pernyataan hanya dinilai

berdasarkan sintaksis pernyataan Pascal, sedangkan sintaksis pernyataan C hanya

(40)

3.2.2.3.1. Hubungan Pernyataan Assignment

Pascal variable := ekspresi ;

C variable = ekspresi ;

Dari kedua bentukan ditemukan hubungan bahwa pernyataan assignment

dibedakan oleh bentuk operator.

Dari kedua bentukan ditemukan hubungan bahwa pernyataan output write

pada Pascal memiliki nilai eksekusi yang sama terhadap printf pada C, hanya saja

perbedaan muncul pada penyusunan ekspresi Pascal terhadap C. C

memungkinkan sebuah string tidak dikategorikan sebagai bagian dari ekspresi.

Sedangkan bagian %SC, mewakili setiap ekspresi yang ada secara terurut. Contoh

lain untuk pernyataan ini yaitu :

Pascal writeln(ekspresi, „andrik‟);

C printf(“%sc andrik\n”, ekspresi);

Pada contoh di atas terlihat bahwa pengenal Pascal mengalami perubahan,

tetapi tidak pada C. Perubahan C hanya terjadi pada bagian %SC, dimana di akhir

penggunaan %SC terjadi penambahan “\n” yang mewakili fungsi “ln” pada

(41)

3.2.2.3.3. Hubungan Pernyataan Input

Pascal read(var1, var2);

C scanf(“%sc1 %sc2”, &var1, &var2);

Dari contoh di atas terlihat bahwa read-scanf mempunyai karakteristik

yang hampir sama dengan write-printf. Terlihat pula bahwa read-scanf hanya

menerima variabel sebagai ekspresi dan penambahan operator alamat “&” sebagai

awalan pada bagian variabel. Sedangkan penerapan readln pada C, disimpulkan

sama.

Pascal readkey;

C getch();

Readkey mempunyai persamaan fungsi terhadap getch, sedangkan getch

harus diikuti oleh ekspresi kosong yaitu “()”. Dapat diartikan bahwa readkey

selalu di akhiri oleh “;” sedangkan getch di akhiri oleh “();”.

3.2.2.3.4. Hubungan Pernyataan Gotoxy

aturan Pascal dapat diterapkan langsung ke C tanpa perubahan sedikitpun kecuali

(42)

3.2.2.3.5. Hubungan Pernyataan Perulangan

Pascal while ekspresi_logika do penyataan;

C while (ekspresi_logika) pernyataan;

Pada contoh di atas, terlihat bahwa ekspresi while C harus selalu diapit

oleh “(“ dan “)” dan ekspresi harus menghasilkan tipe integer. Selain itu, while C

hanya mengenal satu pengenal yaitu while, sedangkan while-do Pascal harus

terdapat dua pengenal yaitu while dan do.

Pascal repeat pernyataan until ekspresi_logika;

C do pernyataan while(not (ekspresi_logika));

Pada contoh telihat bahwa ekspresi do-while pada C menggunakan

operator not, operator not difungsikan sebagai penyesesuaian sintaksis Pascal dan

C. Diketahui bahwa repeat-until pada Pascal akan terus melakukan perulangan

jika bernilai false, dan sebaliknya pada do-while C.

Pascal for p_assignment to ekspresi do pernyataan;

C for (p_assignment; var >= ekspresi; var++)

pernyataan;

Pascal for p_assignment downto ekspresi do

pernyataan;

C for (p_assignment; var <= ekspresi; var--)

pernyataan;

Dari dua contoh di atas, disimpulkan bahwa pengenal to/downto pada for

pascal mempunyai nilai yang sama terhadap increment/decrement variabel yang

(43)

3.2.2.3.6. Hubungan Pernyataan Kondisi (Conditional)

Pascal if e_logika then pernyataan;

C if (e_logika) pernyataan;

Pascal if e_logika then pernyataan else pernyataan;

C if (e_logika) pernyataan; else pernyataan;

Dari kedua contoh di atas, terlihat dua perbedaan sintaksis yaitu pada

penggunaan “;” di sebelum pengenal else dan penggunaan ekspresi logika.

3.2.2.3.7. Hubungan Pernyataan Campuran

Pascal begin pernyataan; end;

C { pernyataan; }

Dari contoh di atas terlihat bahwa begin-end memiliki nilai kesamaan

terhadap {-}. Sedangkan aturan pernyataan, mengikuti aturan hubungan

pernyataan yang berkesesuaian.

3.2.2.3.8. Hubungan Tipe Data

Berikut merupakan tipe data C yang mempunyai nilai tipe yang sama atau

mendekati terhadap tipe data Pascal.

Tabel 3.5 Persamaan Tipe Data Pascal ke C

(44)

Tabel 3.5 Persamaan Tipe Data Pascal ke C (lanjut)

Pada dasarnya, sebuah ekspresi tersusun oleh operand dan operator.

Berikut representasi hubungan ekspresi Pascal ke C melalui keterkaitan operan

dan operator.

Tabel 3.6 Persamaan Operator Pascal ke C

Hirarki Operator Hirarki Operator

Pascal C Pascal C

operator pada Pascal dan C. Ketika operator dioperasikan terhadap operand. Hasil

operasi dapat menghasilkan tipe data yang sama maupun berbeda terhadap

(45)

3.3. Analisis Perangkat Lunak dan Perangkat Keras

Perangkat yang dibutuhkan dalam pembuatan Translator ini terdiri dari 2

bentuk perngkat, yaitu perangkat keras dan perangkat lunak.

1. Perangkat keras yang dibutuhkan yaitu:

1 Unit komputer lengkap (netbook), prosessor Intel Atom CPU N280, RAM 2

Gb, VGA 256 Mb, tersedia Mouse

2. Perangkat lunak yang dibutuhkan sebagai sistem operasi yang ada pada

komputer dan sebagai media pengembangan Translator antara lain:

a.Sistem Operasi Windows 7

b.Program Visual Basic 6.0

(46)

BAB IV PERANCANGAN

4.1. Implementasi Stack dengan Single Linked List Sebagai Collection Control Pada Translator

Pengggunaan stack dengan single link list dimaksudkan sebagai

manajemen memori pada runtime Translator. Single link list difungsikan sebagai

media penyimpanan data sementara hasil proses algoritma Boyer-Moore. Dimana

stack memiliki nilai batas penyimpanan yang dinamis. Sehingga dapat

memaksimalkan alokasi memori terhadap kebutuhan Translator yang sedang

berjalan. Di Visual Basic 6.0, stack dengan single link list dapat

diimplementasikan sebagai collection control. Operasi-operasi yang diterapkan

pada collection antara lain :

1. Deklarasi yaitu proses pendaftaran collection control pada alokasi memori.

2. Push, yaitu operasi menambahkan elemen pada urutan terakhir, di awal

ataupun di akhir tumpukan dengan class module sebagai implementasi

record pada elemen.

3. Pop, yaitu operasi mengambil sebuah elemen data pada urutan terujung

dan menghapus elemen tersebut dari collection.

4. IsEmpty, yaitu proses pemeriksaan apakah collection dalam keadaan

kosong.

5. Create, yaitu proses pembuatan collection kosong, dengan pemberian nilai

(47)

6. Drop, yaitu operasi penghapusan collection dari alokasi memori, dengan

pemberian nilai nothing.

Berikut representasi metode pemanfaatan collection untuk mendukung

kinerja Translator dengan diasumsikan BmBc sebagai class module, Pos dan Char

sebagai elemen class module.

Collection

Gambar 4.1 Operasi standar pada collection Visual Basic 6.0.

(48)

4.2. Implementasi Binary Tree Sebagai Class Modules Control Pada Translator

Sama halnya dengan implementasi stack, binary tree difungsikan sebagai

solusi pemecahan hirarki operator pada sebuah ekspresi.

A

Gambar 4.3 Representasi binary tree

Pada implementasinya, binary tree hanya digunakan sebagai tempat

penyimpanan sementara dari potongan-potongan teks yang dikenali sebagai

sebuah ekpresi. Berikut algoritma penerapan binary tree pada translator:

1. Lakukan pencarian posisi dengan menggunakan prosedur BM untuk 2 kata

kunci pada teks. Kata kunci-1 merupakan kata kunci dengan arti buka

(tanda yang menyebutkan sebuah awalan) dan Kata kunci-2 merupakan

kata kunci dengan arti tutup (tanda yang menyebutkan sebuah akhiran).

Contoh, kata kunci-1 : “(“ dan kata kunci-2 : “)”

2. Jika jumlah posisi kedua kata kunci yang ditemukan tidak sama (tidak

sepasang) maka berikan pesan kesalahan.

3. Jika jumlah posisi kedua karakter sama, maka bandingkan antara posisi

paling pertama dari kata kunci-1 terhadap posisi paling pertama dari kata

(49)

4. Jika kata kunci-1 memiliki nilai perbandingan terbesar, maka proses ulang

(rekursif) teks dengan menambahkan kata kunci awalan dan akhiran pada

kedua ujung teks.

5. Tambahkan setiap nilai posisi yang ditemukan ke dalam binary tree.

Binary tree pada posisi ini merupakan binary tree yang tersusun dengan 1

subtree kanan, 0 subtree kiri. Difungsikan untuk memudahkan dalam

pengurutan node.

6. Urutkan setiap posisi yang berkesesuaian (pasangan) antara posisi kata

kunci-1 dan 2 dengan menggunakan metode pengurutan Order.

Pre-Order dimaksudkan agar pengolahan operasi terjadi dari posisi buka-tutup

terluar (hirarki terkecil). Langkah Pre-Order dilakukan dengan

mengunjungi root Bineary Tree, mengunjungi subtree kiri, lalu subtree

kanan secara rekursif.

7. Pada setiap proses pengunjungan, dilakukan perubahan bentuk pada binary

tree hingga menjadi sebuah binary tree transversal dengan Pre-Order

sebagai tolok ukur struktur tree.

8. Setelah posisi-posisi kata kunci-1 dan 2 telah tersusun sebagaimana

semestinya, terjemahkan bagian teks yang berada pada posisi yang

berkesesuaian terhadap masing-masing posisi pada binary tree. Proses

pengunjungan subtree dilakukan dengan metode Post-Order secara

rekursif, dengan tujuan agar teks dapat terpecah dari bagian paling dalam

(50)

4.3. Implementasi Algoritma Boyer-Moore pada Translator

Fungsi utama pada Translator terhadap teks yang dibentuk menjadi

pernyataan atau serangkaian pernyataan Pascal adalah pencocokan suatu pattern

tertentu yang diasumsikan sebagai pemisah rangkaian pembentuk pernyataan

Pascal. Pencocokan ini dilakukan untuk memenggal teks berdasarkan posisi

pattern terhadap teks, sehingga teks dapat dikenali sebagai pernyataan Pascal dan

diterjemahkan ke pernyataan C.

Kaidah pertama dari algoritma Boyer-Moore ini adalah masing-masing

karakter dari pattern pencocokan harus mempunyai kode ASCII yang sama

terhadap target karakter yang ada pada teks serta karakter-karakter antara pattern

dan target harus terurut sama persis.

Kaidah yang kedua adalah hasil penerjemahan teks berdasarkan

pencocokan pattern akan bernilai benar secara utuh jika teks telah sukses melalui

proses compile pada compiler Turbo Pascal 7.0. Walaupun demikian, Translator

menerapkan fungsi-fungsi yang dapat memastikan kebenaran sintaksis pernyataan

berdasarkan perolehan posisi pattern terhadap teks dan mengabaikan beberapa

kesalahan sederhana pada sintaksis sehingga dapat diterjemahkan ke bentuk C.

Dengan kata lain, suatu teks memungkinkan diterjemahkan secara utuh, sebagian,

atau tidak sama sekali. Untuk itu, dibutuhkan suatu basis pengetahuan dalam

pencocokan posisi dan pemenggelan pattern terhadap teks.

4.3.1. Pengembangan Cara Kerja Umum Algoritma Boyer-Moore

Secara Umum, langkah-langkah dari teknik penerapan Boyer-Moore pada

(51)

1. Menjalankan prosedur preBmBc dan preBmGs untuk mendapatkan nilai

perbandingan pergeseran.

a. Menjalankan prosedur preBmBc. Fungsi dari prosedur ini adalah untuk

menentukan berapa besar pergeseran yang dibutuhkan untuk mencapai

karakter tertentu pada pattern dari karakter pattern terakhir/terkanan.

Hasil dari prosedur preBmBc disimpan pada stack bmBc.

b. Menjalankan prosedur preBmGs. Sebelum menjalankan isi prosedur ini,

prosedur suffix dijalankan terlebih dulu pada pattern. Fungsi dari

prosedur suffix adalah memenggal sejumlah karakter yang dimulai dari

karakter terakhir/terkanan dengan sejumlah karakter yang dimulai dari

setiap karakter yang lebih kiri. Hasil dari prosedur suffix disimpan pada

stack suff. Dengan demikian suff[i] mencatat panjang dari suffix yang

cocok dengan segmen dari pattern yang di akhiri karakter ke-i.

c. Dengan prosedur preBmGs, dapat diketahui berapa banyak langkah pada

pattern dari sebuah segmen ke segmen lain yang sama, dimana letaknya

lebih kiri dengan karakter di sebelah kiri segmen yang berbeda. Prosedur

preBmGs menggunakan stack suff untuk mengetahui semua pasangan

segmen yang sama.

2. Menjalankan prosedur BM, proses pencocokan pattern dengan menggunakan

hasil dari prosedur preBmBc dan preBmGs yaitu stack bmBc dan bmGs

(52)

4.3.1.1. Prosedur preBmBc

Prosedur preBmBc memiliki tiga nilai penting, diantaranya :

1. Pattern, sebagai subjek pencocokan terhadap teks.

2. Karakter, sebagai karakter-karakter yang terdapat pada pattern.

3. Occurence Heuristic (OH), sebagai nilai pergeseran yang diperoleh ketika

menemukan ketidakcocokan karakter.

4. Pergeseran, sebagai nilai yang dicapai ketika melakukan pergeseran dari

kanan ke kiri pattern.

Langkah-langkah pelaksanaan prosedur :

1. Create atau berikan nilai kosong ke stack iBmBc.

2. Lakukan perhitungan terhadap panjang pattern. Jika panjang tidak lebih dari

satu, maka hentikan proses dengan menambahkan langsung nilai OH dan

karakter ke dalam stack iBmBc. Jika tidak, maka lanjutkan ke proses

selanjutnya.

3. Cacahan karakter pattern mulai dari karakter ke-2 paling kanan.

4. Bandingkan setiap karakter yang dicacah terhadap stack iBmBc, jika karakter

yang dicacah tidak ditemukan di dalam stack, maka tambahkan karakter

tersebut ke dalam stack dimana OH sama dengan jumlah pergeseran karakter

yang telah dilakukan.

5. Lakukan langkah-4 kembali, dengan melakukan perpindahan 1 karakter ke

kiri hingga mencapai karakter paling kiri secara terus menerus.

6. Jika telah mencapai karakter paling kiri, cacah karakter paling kanan lalu

(53)

Berikut representasi prosedur preBmBc dengan menggunakan flowchart :

Gambar 4.4 Flowchart pengembangan prosedur preBmBc Contoh kasus,

Pattern : MANAMAN

(54)

Stack BmBc

Gambar 4.5 Penyelesaian contoh kasus Prosedur preBmBc

Pada gambar di atas, terlihat bahwa karakter yang ditunjuk akan

ditambahkan ke dalam stack BmBc jika tidak ditemukan pada stack BmBc dengan

nilai OH yang berkesesuaian dengan nilai pergeseran.

4.3.1.2. Prosedur preBmGs

Prosedur preBmGs memiliki enam nilai penting, diantaranya:

1. Pattern, sebagai subjek pencocokan terhadap teks.

2. Match Heuristic (MH), sebagai nilai pergeseran yang diperoleh ketika

(55)

3. Compare, sebagai akhiran atau sejumlah karakter sebelah kanan dari sebuah

karakter pattern yang diperoleh dari pergeseran kanan ke kiri.

4. Prefix, sebagai awalan atau karakter pattern yang diperoleh dari pergeseran

dari kiri ke kanan.

5. Suffix, sebagai akhiran sebelah kanan prefix.

6. Pergeseran, sebagai nilai yang dicapai ketika melakukan pergeseran dari

compare.

Langkah-langkah pelaksanaan prosedur :

1. Create atau berikan nilai kosong ke stack iBmGs dan Compare.

2. Lakukan aksi yang sama dengan preBmBc jika panjang pattern tidak lebih

dari satu.

3. Cacah compare terhadap pattern. Lalu simpan hasil pencacah dengan

menambahkan ke dalam stack compare.

4. Cacah prefix dan suffix terhadap pattern. Lalu simpan hasil pencacahan prefix

ke dalam stack BmGs, dan bandingkan suffix terhadap compare dengan

melihat kecocokan antara masing-masing prefix.

5. Jika panjang kedua suffix tidak sama besar, cacah salah satu suffix yang

memiliki panjang terbesar kearah kanan sepanjang suffix dengan panjang

terkecil. Jika ditemukan kecocokan antar suffix, bandingkan prefix kedua

suffix. Jika prefix yang diperbandingkan adalah sama, maka kecocokan tidak

dapat diterima.

6. Untuk compare, prefix didapat ketika terjadi pencacahan pada compare, prefix

(56)

terhadap compare sebelum terjadinya pencacahan. Jika tidak terjadi

pemotongan, maka prefix-compare bernilai null.

7. Untuk indeks prefix paling kanan, nilai MH harus selalu bernilai 1.

Sedangkan nilai MH pada prefix lainnya, diberikan ketika ditemukan

ketidakcocokan antara prefix-suffix terhadap prefix-compare dan

ditemukannya kecocokan di antara kedua suffix sebesar nilai pergeseran

terbentuknya compare.

8. Ulangi langkah 5 hingga compare yang terakhir.

(57)

Berikut representasi prosedur preBmGs dengan menggunakan flowchart :

Gambar 4.6 Flowchart pengembangan prosedur preBmGs

(58)

Pattern : MANAMAN

Penyelesaian :

Tabel 4.1 Daftar pencacahan prefix dan suffix dari pattern Suffix (kanan-kiri) Prefix Suffix (kiri-kanan)

Null M ANAMAN

M A NAMAN

MA N AMAN

MAN A MAN

MANA M AN

MANAM A N

MANAMA N Null

Dari tabel di atas, diasumsikan bahwa telah terjadi pemotongan pada

kedua sisi suffix terhadap prefix pada pattern. Terlihat bahwa masing-masing

suffix dipersatukan oleh prefix hingga menjadi satu kesatuan pattern utuh.

Sedangkan null diartikan kosong, yakni semua kondisi pencocokan akan bernilai

(59)

Gambar 4.7 Penyelesaian contoh kasus Prosedur preBmGs

Pada gambar di atas terlihat bahwa pergeseran pada compare memiliki

peran utama dalam penentuan nilai MH. Berbeda dengan nilai OH, nilai MH

selalu diberikan pada karakter-karakter yang ada pada pattern. Penyusunan stack

BmGs pun berdasarkan urutan indeks posisi karakter pada pattern.

4.3.1.3. Prosedur BM

Prosedur BM memiliki empat nilai penting, diantaranya :

(60)

2. Teks, sebagai objek pencocokan.

3. Stack BmBc, sebagai pembanding ketika ditemukan ketidak cocokan.

4. Stack BmGs, sebagai pembanding ketika ditemukan kecocokan.

Langkah-langkah pelaksanaan prosedur :

1. Pencocokan dimulai dari indeks teks terkecil atau dari karakter paling kiri.

2. Pencocokan per karakter dimulai dari karakter paling kanan pattern.

3. Setiap kali ditemukan ketidakcocokan karakter, maka ambil nilai OH pada

stack BmBc dengan karakter yang berkesesuaian terhadap teks, lalu nilai OH

dikurangi dengan jumlah kecocokan yang telah terjadi. Ambil nilai MH pada

stack BmGs dengan indeks karakter yang ditemukan ketidakcocokan, lalu

bandingkan dengan nilai OH yang telah dioperasikan. Dengan nilai terbesar,

geser pattern kearah kiri teks dan ulangi pencocokan.

4. Jika nilai kecocokan sama dengan panjang pattern maka pattern telah

ditemukan pada teks, geser pattern sepanjang jumlah karakter pattern ke arah

kiri teks untuk melanjutkan pencocokan selanjutnya.

Contoh kasus,

Pattern : MANAMAN

Teks : NAMANANAMMANAMAN

(61)

Gambar 4.8 Penyelesaian contoh kasus Prosedur BM

Pada gambar di atas terlihat bahwa pergeseran pada pattern selalu

mengikuti keputusan dari hasil perbandingan OH dan MH. Pada umumnya,

pencocokan standar akan mencocokan karakter per karakter, ketika ditemukan

ketidakcocokan maka pattern akan digeser satu langkah ke arah selanjutnya.

Namun tidak demikian pada algoritma Boyer-Moore. Inilah yang menjadi alasan

utama penulis menerapkan algoritma ini sebagai pusat pemecahan pernyataan

Pascal sebagai awal proses penerjemahan dan ketika dibutuhkannya sebuah proses

pencocokan string.

Berikut detail pengembangan prosedur BM sebagai pencapaian proses

pencocokan dan validasi string masukan agar menjadi lebih efisien terhadap

(62)

Gambar 4.9 Flowchart pengembangan algoritma Boyer-moore

Terlihat pada gambar bahwa terdapat penambahan proses pada algoritma

Boyer-Moore, yaitu cek kualifikasi pattern dan database, serta terdapat proses

kualifikasi pencocokan. Berikut detail pengembangan proses algoritma

(63)
(64)

Proses pengambilan nilai BmBc dan BmGs pada database dimaksudkan

agar proses perhitungan nilai keputusan pergeseran oleh prosedur BmBc dan

BmGs dapat menjadi lebih optimal, karena nilai keputusan telah tersimpan untuk

beberapa pattern dengan nilai ketetapan. Namun proses filter pada database

(recordset) membutuhkan estimasi waktu tertentu. Maka jika dibandingkan proses

pencocokan nilai keputusan oleh prosedur preBmBc dan preBmGs untuk pattern

yang lebih pendek, proses cek database akan menjadi lebih lama. Untuk itu,

keputusan pengecekan database ditentukan dari parameter prosedur BM pada saat

pemanggilan.

Terdapat pula parameter plusPos yang berfungsi sebagai nilai tambah

untuk setiap posisi yang ditemukan. plusPos digunakan pada saat pencocokan

string yang membutuhkan posisi akhir, tengah, maupun posisi tertentu dari sebuah

karakter yang terdapat pada pattern terhadap teks.

Terdapat pula kriteria jumlah pencocokan, kriteria ini difungsikan sebagai

parameter jumlah pencocokan yang dibutuhkan. Sebagai contoh, jika terdapat 10

kecocokan, maka pencocokan akan dihentikan ketika mencapai kecocokan ke-5,

dimana 5 adalah kriteria jumlah pencocokan. Sehingga menjadikan algoritma

Boyer-Moore berjalan lebih optimal dan sesuai kebutuhan Translator.

4.3.2. Basis Pengetahuan Algoritma Translator

Basis pengetahuan algoritma Translator Pascal ke C dibangun oleh 2 dasar

sintaksis seperti yang telah dijelaskan sebelumnya. Berikut representasi sintaksis

Gambar

Gambar 3.4 Pseudocode algoritma Boyer-Moore Search
Tabel 3.2 Tipe data real Pascal
Tabel 3.3 Tipe data hasil operasi ekspresi Pascal
Tabel 3.4 Daftar string kontrol C
+7

Referensi

Dokumen terkait

Berdasarkan uraian di atas, dapat disimpulkan bahwa Dewan Perwakilan Daerah tidak diberikan kewenangan yang sama dengan Dewan Perwakilan Rakyat dalam Undang-Undang Dasar Negara

Perbandingan Lima Garis Referensi dari Posisi Horizontal. Bibir Atas dan Bibir Bawah (

Untuk staff akademik dan SIAA di Fakultas Teknik, teknik industri masih kurang 1 tenaga kerja, sedangkan yang lainnya sudah sesuai antara perhitunngan WISN

This research have purpose to examine empirically the effect on Net Profit Margin and Liquidity (Current Ratio) to Stock Price on Sub Sector Pharmaceutical Company

Halaman kriptografi sandi morse Untuk dapat melakukan proses pada halaman enkripsi ini perlu beberapa tahap yang harus dilakukan dan terdapat beberapa pilihan yang

Tujuan sistem pentanahan adalah untuk membatasi tegangan pada bagian-bagian peralatan yang tidak dialiri arus antara bagian- bagian tersebut dengan tanah, hingga tercapai

Sedangkan r hitung dalam hasil penelitian ini sebesar 0,508, maka hipotesis alternatif (Ha) yang menyatakan bahwa terdapat hubungan positif yang sangat signifikan antara

Berdasarkan pada anggapan-anggapan seperti yang telah di kemukakan diatas, dapat dilakukan pengujian regangan, tegangan, dan gaya-gaya yang timbul pada penampang balok yang