Pointer Di Pascal DASAR TEORI

45 E.1. Deklarasi Variabel Pointer Bentuk umum: Var Nama Var : TipeData Contoh: Var P : integer; Pendeklarasian variabel pointer tidak jauh berbeda dengan pendeklarasian biasa, hanya perlu ditambahkan simbol topi sebelum tipe datanya. Simbol topi tersebut menandakan bahwa variabel tersebut menunjuk ke lokasi tertentu pada memori. Dapat digambarkan variable P seperti ditunjukkan pada diagram berikut: P Variabel pointer dapat pula dibuat yang tipe record. Pendeklarasiannya adalah seperti berikut: Bentuk Umum: Type NamaPointer= NamaRecord; NamaRecord = Record item1 : TipeData1; item2 : TipeData2; ….. itemN : TipeDataN; End; Var Namavar : NamaPointer; 46 Contoh: Type Str30 = String[30]; Point = Data; Data = record Nama : string[24]; Alm : string[30]; Pekerjaan: string[30]; End; Var P1,P2 : point; A,B,C : string[30]; Pada contoh diatas, P1 dan P2 masing-masing bertipe pointer, sedang A,B,C perubah statis bertipe string. Pada saat program dikompilasi, perubah P1 dan P2 akan menempati lokasi tertentu dalam pengingat. Kedua perubah ini masing-masing belum menunjuk ke suatu simpul. Pointer yang belum menunjuk ke suatu simpul nilainya dinyatakan dengan nil. Untuk mengalokasikan simpul dalam pengingat, statemen yang digunakan adalah statemen new, yang mempunyai bentuk umum: New perubah; Dengan perubah adalah nama perubah yang bertipe pointer. Sebagai contoh, dengan deklarasi perubah seperti diatas dan statemen: NewP1; NewP2; Maka sekarang dipunyai dua buah simpul yang ditunjuk oleh P1 dan P2. P1 P2 Program ini kemudian menyerahkan nilai ke dua item data tersebut dalam sembarang cara dengan menggunakan referensi P1 dan P2. Sebagai PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 47 contoh, pernyataan berikut akan menyerahkan nilai 2.0 ke item yang ditunjuk dengan P1 dan menambah 1 ke nilai tersebut, menyimpan hasilnya ke dalam item data yang ditunjuk dengan P2: P1 := 2.0; P2 := P1 + 1.0; Isi memori dapat digambarkan sebagai berikut: 2.0 P1 P2 3.0 Variabel pointer dapatr digunakan sebagai argumen ke prosedur new. Variable pointer dapat dapat digunakan dalam pernyataan penugasan, disediakan dua variable yang mempunyai tipe sama. Asumsikan P1 dan P2 menunjuk ke item data, seperti ditunjukkan dalam contoh sebelumnya. Pernyataan tersebut: P2 := P1; Akan menyebabkan P1 dan P2 menunjuk ke item data yang sama, seperti ditunjukkan: P1 P2 2.0 3.0 Maka isi dari P2 yang berupa alamat telah diganti dengan nilai yang berupa alamat yang dikandung dari P1. yang terjadi adalah item data yang sebelumnya ditunjuk dengan P2 masih ada, tetapi tidak ada cara untuk mengakses isi tersebut. Salah satu keistimewaan yang sangat berguna pada tipe data pointer adalah kemampuan untuk melekatkan pointer ke dalam record. Keistimewan ini akan sangat penting dalam menerapkan struktur data abstrak. Sebagai contoh, PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 48 andaikata akan membuat dua record dengan cara seperti itu bahwa satu record menunjuk ke record berikutnya, seperti ditunjukkan dalam diagram berikut ini: pertama Salah satu cara untuk membuat nilai awal inisialisasi elemen dengan menggunakan: NewPertama; Pertama.Nama:= ’Ina’; Pada saat ini keadaan bagian memori sebagai berikut: Pertama Ina ? Isi pada pertama.nama sudah didefinisikan, tetapi isi pada pertama.Berikut bagian pointer pada record belum didefinisikan pada tahap ini. Sekarang dapat membuat record lain untuk data berikut dengan menggunakan variable Temp: NewTemp; Temp.Nama:=’Ira’; Bagian memori sekarang menjadi Pertama Temp Ina ? Ira ? Sekarang adalah melengkapi record yang mengandung ‘Ina’ dan record yang mengandung ‘Ira’. Isi dari pertamaberikut memerlukan penunjuk ke data yang ditunjuk dengan Temp. Dapat dibuat hubungan tersebut dengan sangat sederhana sebagai berikut: Pertama.Berikut := temp; Susunan memori tersebut sekarang menjadi : Pertama Temp Ina Ira ? 49 Sekarang dapat melengkapi struktur tersebut dengan menempatkan nil ke dalam bagian pointer berikut pada lemen terakhir; Temp.berikut := nil; Bagian memori tersebut pada saat ini ditunjukkan struktur yang telah komplit: Pertama E.2. Proses Variabel Pointer Pada pembahasan diatas telah diterangkan bagaimana mendeklarasikan variabel pointer dan bagaimana menginisialisasikan variabel pointer menggunakan prosedur new. Cara lain untuk menginisialisasikan variabel pointer adalah dengan menggunakan konstanta pointer yaitu nil. Jika variabel pointer diserahi nilai nil, ini berarti bahwa tidak menunjuk dimanapun juga, artinya pointer tidak menunjuk ke item data. Jika P merupakan variabel pointer, pernyataan P := nil; Menyebabkan nilai P diset ke nil. Nilai nil untuk variabel pointer disimbolkan dalam memori dengan diagram sebagai berikut: P Hal yang penting untuk mengerti perbedaan antara variable pointer yang belum didefinisikan dan variabel pointer yang mempunyai nilai, isi dari variabel yang belum didefinisikan sama dengan dideklarasikan tapi tidak ada nilainya sebelum diserahi suatu nilai ke variabel tersebut tidak diketahui. Prosedur new membuat item data dan menetapkan nilai pada variabel pointer. Penyerahan nilai Ina Ira 50 nil ke variabel pointer juga menetapkan nilai variabel pointer tersebut, tetapi tidak demikian jika tanpa mengalokasikan hubungan ke item data. Sebelumnya dikatakan bahwa memungkinkan untuk menggunakan memori kembali dalam head yang tidak diperlukan, ini dilakukan dengan menggunakan prosedur Dispose, yang membebaskan penunjuk item data dengan parameternya dan mengeset parameter ke nil. Bentuk prosedur Dispose: Disposevariable_pointer; Sebagai contoh, andaikan PtrP1 dan PtrP2 menunjuk item data real, seperti ditunjukkan: P1 2.0 P2 3.0 3.0 Setelah eksekusi pada prosedur dispose untuk PtrP1, seperti” Dispose PtrP1; Nilai PtrP1 akan mnjadi nil, dan ruangan yang telah dialokasikan untuk variable tersebut akan dikembalikan ke kelompoknya pada ruangan yang dapat digunakan dan dialokasikan kembali jika diperlukan. Pada penunjuk ini diagram memorinya sebagai berikut: P1 3.0 P2 Andaikata ingin mempunyai PtrP1 menunjuk ke item data yang sama dengan PtrP2 dan membebaskan penunjuk data dengan PtrP1. Hal pertama harus menggunakan prosedur dispose, seperti ditunjukkan segmen program berikut: Dispose PtrP1; PtrP1 := PtrP2; 51 Setelah eksekusi prosedur dispose ini, memori akan kelihatan sebagai berikut: P1 3.0 P2 Kemudian, setelah eksekusi pada pernyataan penugasan tersebut memori akan tampak sebagai berikut: P1 P2 3.0 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

BAB III PERANCANGAN DAN DIAGRAM ALUR PROGRAM PARSING

A. Perancangan Struktur Data

Program parsing yang akan penulis buat menggunakan senarai berantai linked list. Senarai berantai adalah kumpulan komponen yang disusun secara berurutan dengan bantuan pointer. Masing-masing komponen dinamakan dengan simpul node. Dengan demikian setiap simpul dalam suatu senarai berantai terbagi menjadi dua bagian. Bagian pertama disebut medan informasi, yang berisi informasi yang akan disimpan dan diolah. Bagian kedua disebut medan penghubung link field, yang berisi alamat simpul berikutnya. Penghubung dalam elemen terakhir selalu mempunyai nilai nil. Ini berguna sebab pada elemen tersebut tidak ada data yang melewati elemen ini, sehingga penghubung ini tidak menunjuk kemanapun. Gambar 3. 1 di bawah ini menunjukkan diagram skematis dari senarai berantai dengan 8 simpul. Setiap simpul digambar dalam dua bagian. Bagian kiri adalah medan informasi dan bagian kanan adalah medan penyambung, sehingga dalam diagram digambarkan sebagai anak panah. Medan penyambung sebenarnya adalah suatu pointer yang menunjuk ke simpul berikutnya, sehingga nilai dari medan adalah alamat suatu lokasi tertentu dalam pengingat. Dari gambar 3.1., pointer awal, yang bukan merupakan bagian dari senarai menunjuk ke simpul pertama dari senarai tersebut. Medan penyambung 52 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI pointer dari suatu simpul yang tidak menunjuk simpul lain disebut dengan pointer kosong, yang nilainya dinyatakan sebagai nil. Awal Medan penyambung dari simpul kedua Medan informasi dari simpul kedua Gambar 3. 1. Contoh senarai berantai dengan 8 simpul Nilai awal pada Temp adalah isi pada kepala. Pada saat nilai pada Temp tidak sama dengan nil, dapat menggunakan bagian data pada bagian ini menggunakan Temp.Data dan kemudian diproses ke elemen berikutnya dengan mengganti Temp dengan nilai pada Temp.berikut yaitu isi pada bagian penghubung pada elemen sekarang elemen yang ditunjuk oleh pointer Temp. Teknik untuk menyimpan daftar dari data adalah menggunakan array. b a a a a b b b

B. Diagram Alur Program Parsing

Suatu program adalah sederetan perintah yang mengatur apa-apa yang harus dikerjakan komputer, untuk mendapatkan suatu hasilkeluaran yang di harapkan. Sebelum suatu program dibuat, alangkah baiknya kalau dibuat logika urut-urutan perintah program dalam suatu diagram yang disebut diagram alur. Suatu program komputer pada umumnya berisi 3 hal, yaitu: 1. Pembacaanpemasukan data ke dalam komputer 2. Melakukan komputasiperhitungan terhadap data tersebut 3. Mengeluarkanmencetak hasil PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Diagram alur untuk program parsing yang penulis buat adalah sebagai berikut: Ket: Nleft = simpul ekspresi terkiri SP = string yang dibentuk dari pohon SU = string yang diuji Start 2 Masukkan string Inisialisasi aturan produksi dan ekspresi