KONSEP DAN IMPLEMENTASI PARSING DENGAN MENGGUNAKAN METODE BRUTE FORCE

  

KONSEP DAN IMPLEMENTASI PARSING DENGAN

MENGGUNAKAN METODE BRUTE FORCE

  SKRIPSI Diajukan untuk Memenuhi Salah Satu Syarat

  Memperoleh Gelar Sarjana Sains (S.Si) Program Studi Matematika

  

Oleh:

Vinsentia Asri Budiarti

NIM : 003114035

  

PROGRAM STUDI MATEMATIKA

JURUSAN MATEMATIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS SANATA DHARMA

HALAMAN PERSEMBAHAN

  

Kebanggaan terbesar adalah bukan tidak pernah gagal, tetapi bangkit

kembali setiap kali kita jatuh.

  

Kebanyakan dari kita tidak menyukai apa yang sudah kita miliki,

tetapi kita selalu menyesali apa yang belum kita capai.

  

Seorang pesimis melihat kesulitan dalam setiap kesempatan, seorang

optimis melihat kesempatan dalam setiap kesulitan.

  

Kupersembahkan Karyaku ini

Kepada:

Yesus Kristus Sang Juru Slamatku,

Kedua orangtuaku tercinta JB Tukidjo,

  

Kakaku tersayang mas Bowo,

Kekasihku dr Aloysius Sulistyanto, M.D.,

PERNYATAAN KEASLIAN KARYA

  Saya menyatakan dengan sesungguhnya bahwa skripsi yang saya tulis ini tidak memuat karya atau bagian karya orang lain, kecuali yang telah disebutkan dalam kutipan dan daftar pustaka, sebagaimana layaknya karya ilmiah.

  Yogyakarta, Juli 2006 Penulis

  Vinsentia Asri Budiarti

  

ABSTRAK

Parsing dengan metode Brute Force adalah parsing yang memilih aturan

  produksi mulai dari paling kiri, dan melakukan expand semua non terminal pada aturan produksi sampai yang tertinggal adalah simbol terminal. Kemungkinan pertama string masukan sukses di-parsing, bisa juga bila terjadi expansi yang salah untuk suatu simbol variabel maka akan dilakukan backtrack. Algoritma ini membangun pohon parsing yang top down, yaitu mencoba segala kemungkinan untuk setiap simbol non terminal.

  

ABSTRACT

  The Brute Force Parsing method is a method which choosing left most symbol on a production rule and expanding all of non terminal symbol on it until only a terminal symbol left. The first possibility is input string parsed successfully, otherwise it will perform backtracking when expansion have an error. This algorithm create a top-down parse tree which will trying all possibilities for each non terminal symbol.

KATA PENGANTAR

  Allah mencipatakan manusia diberi akal dan pikiran. Dengan tidak meninggalkanNya kita mampu melewati segala rintangan dan kesulitan yang kita hadapi. Akan tetapi kita sering lupa bahwa kasih dan cintaNya senantiasa menyertai kita sepanjang hidup. Dan dengan campur tangan Allah semua dapat terselesaikan dengan mudah. Bunda Maria perawan suci yang telah mengajarkan kepada kita untuk tidak pernah berhenti memohon dalam kesulitan apapun yang kita hadapi, dengan perantaraanNya maka akan dikabulkanNya.

  Puji syukur penulis panjatkan kepadaMu Bapa di surga yang telah mengabulkan doa-doaku dengan perantaraan Bunda Maria, Ibu sejati dan Ratu surgawi. KepadaMu semua pengharapanku yang besar kucurahkan sehingga dapat menyelesaikan tugas dan tanggungjawabku selama ini dengan baik.

  Dalam menyusun skripsi ini penulis memperoleh banyak bantuan, petunjuk serta bimbingan yang sangat berharga dari berbagai pihak.. Oleh karena itu dengan ketulusan hati ijinkan penulis secara pribadi menyampaikan ucapan terima kasih sebesar-besarnya kepada:

  1. Bpk Ir. Ig. Aris Dwiatmoko, M.Sc. selaku Dekan FMIPA Universitas Sanata Dharma, terima kasih atas saran dan motivasi yang diberikan kepada penulis.

  2. Bpk Y.G. Hartono, S.Si., M.Sc. selaku Ketua Program Studi Matematika, terima kasih atas semangat yang diberikan kepada penulis hingga penulis dapat menyelesaikan skripsi ini.

  3. Ibu M.V. Any Herawati, S.Si., M.Si. selaku Dosen Pembimbing Akademik,

  4. Bpk Iwan Binanto, S.Si. selaku dosen pembimbing skripsi, terima kasih buanyak atas kesabaran, perhatian, motivasi dan kepercayaan yang diberikan kepada penulis hingga selesainya penulisan skripsi ini. Penulis tidak akan pernah melupakan semua bantuan, kesabaran, saran serta kebaikan bapak.

  5. Terima kepada semua dosen pengajar serta staff FMIPA atas kerjasamanya selama ini kepada penulis.

  6. Bapak dan ibu tercinta JB. Tukidjo, serta kakakku tersayang Mas Bowo, terima kasih atas kasih sayang, perhatian, semangat, kesabaran dan kebaikan yang diberikan kepada penulis.

  7. Tak lupa ucapan terima kasih kepada calon suamiku, dr. Aloysius Sulistyanto, M.D., Akp, terima kasih buanyak atas kesabaran, kesetian, cinta, kasih sayang, motivasi, pengertian, ketulusannya hingga saat ini. Sekali lagi terima kasih telah membangkitkan semangat hidupku.

  8. Sahabatku Tatik, terima kasih atas semangat yang diberikan, terima kasih juga atas pinjaman kamusnya.

  9. Teman-teman kampus angkatan 2000: Tatik, Ayu, Bunga, Pras, Felix, Willy, Tony, Niza, Eros, Tildy, Sinta, Megi, Eros, Tika, Elin, Sunarto, Deny, Wiwid ndut, Dewi, Susi, Wiwid, Andy, Lia, Nety, Heri, Jeng-jeng, polo, Mira, Ferry, Wahyu, Heru. Terima aksih atas persahabatnnya selama ini.

  10. Teman kostku Ana, terima kasih atas persahabatannya ini.

  11. Mas Koko, terima kasih atas bantuannya.

  12. Semua pihak yang secara langsung maupun tidak langsung yang turut membantu dalam penulisan skripsi ini, maaf tidak dapat disebutkan satu persatu.

  Penulis menyadari bahwa skripsi ini masih jauh dari kata sempurna, oleh karena itu segala kritik dan saran yang bersifat membangun dari semua pihak akan penulis terima dengan senang hati. Akhir kata penulis mohon maaf atas segala kekurangan dan penulis berharap smoga skripsi ini dapat bermanfaat bagi kita semua.

  Yogyakarta, Juli 2006 Penulis Vinsentia Asri Budiarti

  DAFTAR ISI

  HALAMAN JUDUL.............................................................................................. i HALAMAN PERSETUJUAN PEMBIMBING.................................................... ii HALAMAN PENGESAHAN............................................................................... iii HALAMAN PERSEMBAHAN............................................................................ iv PERNYATAAN KEASLIAN KARYA................................................................ v ABSTRAK............................................................................................................. vi ABSTRACT...........................................................................................................vii KATA PENGANTAR..........................................................................................viii DAFTAR ISI......................................................................................................... .xi

  BAB I PENDAHULUAN……..…………………………………………………1 A. Latar Belakang…………………………………………………………….1 B. Perumusan Masalah……………………………………………………….3 C. Pembatasan Masalah……………………………………………............... 3 D. Tujuan Penulisan………………………………………..…………………4 E. Manfaat Penulisan…………………………………………………………4 F. Metode Penulisan………………………………………………………….4 G. Sistematika Penulisan....…………………………………………..............4 BAB II DASAR TEORI…………………………………………………………...6 A. Finite State Automata……………………………………………………..6 A.1. Penerapan Finite State Automata…………………………………….6

  A.3. Non Deterministic Finite State Automata……………………..........12

  B. Bahasa – bahasa Reguler………………………………………………...15 B.1. Bahasa-bahasa Reguler dan Ekspresi-ekspresi Reguler……………15 B.2. Aturan Produksi Bahasa Reguler…………………………………...18

  C. Tata Bahasa Bebas Konteks……………………………………………..21 C.1. Bahasa – bahasa Bebas Konteks……………………………………21 C.2. Penyederhanaan Tata Bahasa Bebas Konteks……………………....24

  D. Parsing…………………………………………………………………...33 D.1. Parsing Dengan Brute Force………………………………………..38 D.2. Ambiguitas………………………………………………………….39

  E. Pointer Di Pascal…………………………………………………………43 E.1. Deklarasi Variabel Pointer………………………………………….45 E.2. Proses Variabel Pointer……………………………………………..49

  BAB III PERANCANGAN DAN DIAGRAM ALUR PROGRAM PARSING..52 A. Perancangan Struktur Data……………………………………………….52 B. Diagram Alur Program Parsing…………………………………………..53 BAB IV PENUTUP………………………………………………………………63 A. Kesimpulan……………………………………………………………….63 B. Saran……………………………………………………………………...63 DAFTAR PUSTAKA ……………………………………………………………64 LAMPIRAN……………………………………………………………………...65

BAB I KONSEP DAN IMPLEMENTASI PARSING DENGAN MENGGUNAKAN METODE BRUTE FORCE A. Latar Belakang Masalah Dalam bidang komputer dikenal sebuah bahasa yaitu bahasa otomata

  berhinggan (finite automata). Sebuah otomata berhingga menguraikan sebuah bahasa sebagai himpunan semua untai yang menggerakkan untai dari state awal ke salah satu state yang diterimanya (himpunan state akhir). Dalam skripsi ini digunakan tata bahasa reguler dan tata bahasa bebas konteks sebagai dasarnya.

  Bila pada tata bahasa reguler terdapat pembatasan pada ruas kanan atau hasil produksi maka pada tata bahasa bebas konteks tidak terdapat pambatasan hasil produksinya.

  Sebuah tata bahasa bebas konteks adalah suatu cara yang menunjukkan bagaimana menghasilkan untai-untai dalam sebuah bahasa. Tata bahasa bebas konteks telah banyak memberikan bantuan pada pemrograman dan perancangan

  

parsing . Tata bahasa bebas konteks menjadi dasar dalam pembentukan suatui

  proses parsing. Penyederhanaan tata bahasa bebas konteks bertujuan untuk melakukan pembatasan posisi munculnya terminal-terminal dan variabel-variabel sehingga tidak menghasilkan pohon penurunan yang memiliki kerumitan yang tidak perlu atau aturan produksi yang tidak berarti.

  Dengan diturunkannya sebuah untai dari tata bahasa bebas konteks, simbol awal diganti oleh suatu untai. Setiap nonterminal dalam untai ini, secara untai yang hanya terdiri dari simbol-simbol terminal. Selanjutnya tidak ada lagi penggantian karena tidak ada lagi nonterminal untuk digantikan. Kadang-kadang sangat berguna untuk menggambarkan penurunan itu, yaitu yang menunjukkan kontribusi dari masing-masing non terminal pada untai akhir dari terminal- terminal. Gambar seperti ini dinamakan pohon penurunan atau pohon penguraian (derivation tree atau pharse tree).

  Metode parsing ada dua, pertama Top Down dan yang kedua Bottom Up.

  

Top Down sendiri meliputi Backtrack: Brute Force dan No Backtrack: Recursive

  Descent Parser. Dalam skripsi ini penulis hanya membahas parsing dengan menggunakan metode Top Down Brute Force. Metode ini akan memilih aturan produksi mulai dari paling kiri dan melakukan expand semua non terminal pada aturan produksi sampai yang tertinggal adalah simbol terminal.

  Skripsi ini hanya membahas parsing dengan menggunakan metode Brute Force karena penulis merasa bahwa dasar teori untuk membahas parsing dengan metode Brute Force pernah penulis terima selama kuliah. Sedangkan parsing dengan metode Recursive Desent Parser dasar teori untuk membahasnya belum pernah penulis terima karena ini tentang compiler (dasar teorinya misal membahas analisis leksikal dan analisis semantik). Sehingga penulis memutuskan untuk menulis skripsi tentang parsing yang menggunakan metode Brute Force.

  Penulis juga membahas pointer di pascal. Karena pointer di pascal akan mendasari penulis dalam membuat program parsing-nya. Program parsing yang penulis buat menggunakan bahasa pemrograman turbo pascal. Pointer adalah menunjuk ke data dengan tipe khusus. Variabel pointer mengandung alamat dari data dalam memori

  B Perumusan Masalah .

  Pokok permasalahan yang akan dibahas dalam tulisan ini dapat dirumuskan sebagai berikut:

  1. Apa yang dimaksud dengan parsing dengan menggunakan metodeBrute Force itu?

  2. Bagaimana mengimplementasikan parsing dengan menggunakan metode Brute Force?

  Pembatasan Masalah C.

  Dalam pembahasan tentang parsing dalam konsep dan implementasinya penulis membatasi masalah hanya pada proses parsing dengan menggunakan metode Brute Force dengan aturan produksi tata bahasa sebagai berikut:

  S → Ba | Ab A → Sa | AAb | a B → Sb | BBa | b yang akan menurunkan untai-untai. Misal untai yang diturunkan: ‘bbaaaabb’, untai ‘ ab’, untai ‘ba’, untai ‘abba’ dan sebagainya.

  D. Tujuan Penulisan

  Tujuan yang ingin dicapai adalah ingin lebih memahami dan mendalami tentang konsep parsing dengan metode Brute Force yang di implementasikan dalam bahasa pemrograman Turbo Pascal.

  E. Manfaat Penulisan

  Manfaat yang diperoleh dari mempelajari topik ini adalah supaya semakin memahami dan mengerti tentang konsep parsing dengan metode Brute Force dan implementasinya dengan menggunakan bahasa pemrograman Turbo Pascal.

  F. Metode Penulisan

  Metode yang digunakan penulis adalah studi pustaka yaitu dengan membaca dan mempelajari buku-buku yang berkaitan dengan bahan yang telah dipilih.

  G . Sistematika Penulisan

  Pada bab I penulis pembahas tentang latar belakang masalah, rumusan masalah, pembatasan masalah, tujuan penulisan, manfaat penulisan, metode penulisan, sistematika penulisan.

  Pada bab II tentang dasar teori yang isinya membahas Finite State Automata meliputi penerapan finite state automata, deterministic finite state meliputi bahasa-bahasa regular dan ekspresi-ekspresi regular, aturan produksi bahasa regular, Tata bahasa bebas kontrks yang meliputi bahasa-bahasa bebas konteks, penyederhanaan tata bahasa bebas konteks, Parsing meliputi parsing dengan metode brute force, ambiguitas, Pointer meliputi deklarasi variable pointer, proses variable pointer.

  Pada Bab III membahas tentang perancangan dan diagram alur program parsing yang berisi tentang perancangan dengan menggunakan struktur data, diagram alur program parsing.

  Pada Bab IV penutup yang berisi kesimpulan dan saran.

BAB II DASAR TEORI A. Finite State Automata A.1 Penerapan Finite State Automata Finite State Automata / otomata berhingga state, selanjutnya disingkat

  dengan FSA, bukanlah mesin fisik tetapi suatu model matematika dari suatu sistem yang menerima input dan output diskrit. Finite State Automata merupakan mesin otomata dari bahasa reguler. Suatu finite state automata memiliki state yang banyaknya berhingga, dan dapat berpindah-pindah dari suatu state ke state yang lain. Perubahan state ini dinyatakan oleh fungsi transisi. Jenis otomata ini tidak memiliki tempat penyimpanan, sehingga kemampuan mengingatnya terbatas. Teori mengenai finite state automata adalah suatu tool yang berguna untuk merancang sistem.

  Contoh, pada pemeriksa pariti ganjil pengirim akan menambahkan bit paritas sehingga jumlah bit 1 adalah ganjil. Misal terdapat data: 0110 maka pengirim akan menambahkan bit 1, sehingga penerima akan memperoleh

  01101 bila data: 0111 maka pengirim akan menambahkan bit 0, sehingga penerima akan memperoleh bila suatu saat penerima memperoleh jumlah bit 1 yang genap, misal 10010 maka penerima akan memutuskan bahwa telah terjadi kesalahan dalam pengiriman.

  Bisa dibuat sebuah otomata yang akan memeriksa apakah suatu barisan input memiliki bit 1 dalam jumlah ganjil atau genap. Mesin ini akan mempunyai dua state, sebut saja sebagai state EVEN (genap) dan state ODD (ganjil).

  1 EVEN

  ODD

  1

gambar 1.1 mesin otomata untuk pemeriksa pariti ganjil

  Pada finite state automata, arti dari bentuk-bentuk seperti yang ada pada gambar diatas adalah:

  • Lingkaran menyatakan state/kedudukan
  • Label pada lingkaran adalah nama state tersebut
  • Bususr menyatakan transisi yaitu perpindahan kefudukan/state
  • Label pada bususr adalah simbol input
  • Lingkaran didahului sebuah bususr tanpa label menyatakan state awal
  • Lingkaran ganda menyatakan state akhir/final

  Gambar seperti diatas biasa disebut sebagai graph transisi atau diagram keadaan (state). Pada gambar diatas state awalnya adalah EVEN. Karena mesin ini merupakan pemeriksa pariti ganjil, maka himpunan state akhir yang menyatakan input diterima adalah ODD. Simbol input yang ada {0,1}. Jika mesin

  1101 urutan state yang terjadi EVEN

  1 ODD 1 EVEN 0 EVEN 1 ODD Berakhir dengan state ODD sehingga “1101” diterima oleh mesin

  Bila mesin mendapatkan input: 101 urutan state yang terjadi EVEN

  1 ODD 0 ODD 1 EVEN Berakhir dengan state EVEN maka “101” ditolak oleh mesin.

  Meskipun pada contoh diatas state akhirnya hanya satu, pada umumnya bisa terdapat sejumlah state akhir. Istilah state akhir tidak berarti komputasi (disini berupa perpindahan/transisi) berhenti (halt) begitu state akhir tercapai. State akhir hanya menyatakan kedudukan-kedudukan tertentu sebagai kedudukan-kedudukan yang diterima.

  Secara formal finite state automata dinyatakan oleh 5 tupel atau M=(Q, Σ,δ,S,F), dimana: Q = himpunan state/kedudukan Σ = himpunan simbol input/masukan/abjad δ = fungsi transisi S = state awal/kesusukan awal, S ∈Q F = himpunan state akhir F adalah jumlah state akhir, jadi jumlah state akhir pada suatu finite state

  Maka contoh diatas bisa dinyatakan sebagai berikut: Q = {ODD,EVEN} Σ = {0,1} S = EVEN F = {ODD}

  Finite state automata berdasarkan pada pendefinisian kemampuan

  berubah state-statenya bisa dikelompokkan ke dalam deterministik maupun non deterministik,.

  A.2 Deterministic Finite State Automata

  Pada otomata berhingga deterministik/ Deterministic Finite Automata, selanjutnya disebut dengan DFA, dari suatu state ada tepat satu state berikutnya untuk setiap simbol masukan yang diterima. Sebagai contoh, misal ada otomata seperti pada gambar berikut ini: a a b b b q q q

  1

  

2

  a

gambar 2.1 mesin DFA

  Konfigurasi Deterministic Finite State Automata di atas secara formal dinyatakan sebagai berikut: Q = {q ,q ,q }

  1

  2

  Σ = {a,b} S = q F = {q

  2 } Fungsi transisi yang ada sebagai berikut: δ(q ,a) = q δ(q ,b) = q

  1

  ,a) = q δ(q

  1

  1

  δ(q

  1 ,b) = q

  2

  δ(q ,a) = q

  2

  1

  δ(q

  2 ,b) = q

2 Biasanya fungsi-fungsi transisi ini disajikan dalam sebuah tabel transisi.

  Tabel transisi tersebut menunjukkan state-state berikutnya untuk kombinasi state- state dan input. Tabel transisi dari fungsi transisi diatas sebagai berikut: a b

  δ q q q

  1

  q

  1 q 1 q

  2

  q

  2 q 1 q

  2 Tabel

  1.1 Pada tabel transisi Deterministic Finite Automata diatas, nampak bahwa sebuah state berikutnya yang unik untuk setiap pasangan state-input. Jadi untuk sebuah state dan input yang berlaku, bisa ditentukan tepat satu state berikutnya. Pada Deterministic Finite Automata, δ merupakan sebuah fungsi yang harus terdefinisi untuk semua pasangan state-input yang ada dalam Q X Σ. Sehingga apapun state saat itu atau inputnya, selalu terdapat satu dan hanya satu state berikutnya. State berikutnya itu ditentukan oleh informasi yang ada di dalam pasangan state-input.

  Suatu string x dinyatakan diterima bila δ(S,x) berada pada state akhir. Biasanya secara formal dikatakan bila M adalah sebuah finite state automata, M=(Q, Σ, δ, S, F), menerima bahasa yang disebut L(M), yang merupakan himpunan {x ⏐δ(S,x) didalam F}.

  Misal pada contoh gambar 2.1 diberi input string ‘abb’ pada mesin tersebut. Maka : δ(q ,abb)= δ(q ,bb)= δ(q ,b)= q

  1

  2

  karena q

  2 termasuk state akhir, maka ‘abb’ berada dalam L(M)

  misal pada ontoh gambar 2.1 di beri input string ‘baba’ pada mesin tersebut, maka: ,baba)= ,aba) = ,ba)= ,a) = q

  δ(q δ(q

  1 δ(q

1 δ(q

  1

  1

  karena q

1 tidak termasuk state akhir, maka ‘baba’ tidak berada dalam L(M).

  Contoh lain, misal terdapat gambar mesin DFA sebagai berikut: a,b a q q

  1

  b tabel transisi dari gambar 2.2 adalah : a b

  δ q q q

  1

  1

  q q q

  1

  1 Tabel

  1.2 Jadi dari suatu gambar/ diagram transisi dapat dibuat tabel transisinya. Sebaliknya dapat pula digambar diagram transisi suatu Deterministic Finite Automata bila diketahuai tabel transisinya.

  Contoh terdapat tabel transisi: a b δ q q q

  1

  q

  1 q q

  Tabel 1.3 Dengan S = q

  F = {q }

1 Maka diagram transisinya dapat dilihat pada gambar 2.3 berikut ini:

  a b q

  1

  q a,b gambar 2.3

  A.3 Non Deterministic Finite State Automata

  Pada Non-deterministic Finite Automata (NFA) dari suatu state bisa terdapat 0,1, atau lebih busur keluar (transisi) berlabel simbol input yang sama.

  

Non-deterministic Finite Automata didefinisikan pula dengan lima tupel M = (Q,

Σ, δ, S, F), dengan arti yang serupa pada Deterministic Finite Automata.

  Perbedaannya terletak pada fungsi transisinya, dimana untuk setiap pasangan state-input, bisa memiliki nol atau lebih pilihan untuk state berikutnya.

  Contoh: a,b a,b q q

  1

  a

gambar 2.4 mesin otomata NFA

  Dari gambar 2.4, dari state q terdapat dua busur keluar yang berlabel input ‘a’. Dari state q bila mendapat input ‘a’ bisa berpindah ke state q atau q

  1 ,

  yang secara formal dinyatakan: δ(q ,a)= {q ,q }

  1

  maka otomata ini disebut non-deterministik (tidak pasti arahnya). Tabel transisinya sebagai berikut: a b

  δ q {q ,q } {q }

  1

  

1

  q {q } {q }

  1

  1

  

1

Tabel

  2.1 Perlu diperhatikan bahwa cara penulisan state hasil transisi pada tabel transisi untuk Non-deterministic Finite State Automata digunakan kurung kurawal ‘{‘ dan ‘}’, karena hasil transisinya merupakan suatu himpunan state.

  Suatu string diterima oleh Non-Deterministic Finite Automata bila terdapat suatu urutan sehubungan dengan input string tersebut dari state awal

  

Deterministic Finite Automata pada gambar 2.4. Tentukan apakah string ‘ab’

  termasuk dalam L(M)? Untuk Non-Deterministic Finite Automata harus mencoba semua kemungkinan yang ada sampai terdapat satu yang mencapai state akhir.

  Dalam contoh diatas, urutan transisi yang mencapai state akhir: ,ab) = ,b) = q

  δ(q δ(q

  1

1 Jadi untuk membuktikan suatu string diterima oleh Non-Deterministic

  

Finite Automata tersebut dibuktikan dulu suatu urutan transisi yang menuju state

akhir .

  Contoh lain, misal terdapat gambar 3.2 mesin NFA: b a q q1 a gambar 3.2

  Terlihat tidak ada busur keluar dari state q

  1 untuk simbol input ‘b’ atau

  secara formal dinyatakan: δ(q

  1 ,b) = φ tabel transisinya sebagai berikut:

Tabel 2.2 a b

  δ q {q

  

1 } {q }

  q {q }

  1 φ

B. Tata Bahasa Reguler B.1. Bahasa-Bahasa Reguler dan Ekspresi-Ekspresi Reguler

  Sebuah bahasa dinyatakan regular jika terdapat finite state automata yang dapat menerima bahasa-bahasa. Finite state automata sendiri merupakan model matematika dari suatu sistem yang menerima input dan output diskrit dan juga merupakan mesin otomata dari bahasa reguler. Bahasa-bahasa yang diterima oleh suatu finite state automata bisa dinyatakan secara sederhana dengan ekspresi regular (Regular Ekspression). Ekspresi regular selanjutnya disebut sebagai ER, yang memberikan cara untuk mendefinisikan bahasa-bahasa. Ekspresi regular memberikan suatu pola untuk untai dari suatu bahasa. Semua untai yang cocok dengan sebuah pola tertentu, dan hanya untai-untai itu, yang menyusun bahasa regular tertentu. Demikian pula sebuah otomata berhingga mendefinisikan sebuah bahasa sebagai himpunan semua untai yang menggerakkan untai dari kedudukan awal ke salah satu dari kedudukan-kedudukan yang diterima

  Untuk sebuah abjad ∑ tertentu, bahasa-bahasa regular atas ∑ menarik dari segi teoritis karena membentuk koleksi terkecil dari bahasa-bahasa atas

  ∑ yang tertutup di bawah operasi-operasi perangkaian, penutup bintang dan gabungan bahasa dan memuat bahasa kosong Ø dan bahasa-bahasa singleton { a } untuk a Є ∑.

  Definisi 2.2.1 (Kelly, Dean. h 36)

  Misalkan ∑ merupakan sebuah abjad. Koleksi dari bahasa-bahasa regular atas

  ∑ didefinisikan sebagai berikut: a. Ø adalah sebuah bahasa regular.

  b. { ε } adalah sebuah bahasa regular.

  c. Untuk setiap a ∉ ∑, { a } adalah sebuah bahasa regular.

  d. Jika A dan B adalah bahasa-bahasa regular maka A ∪ B, A . B, dan A* adalah bahasa-bahasa regular.

  e. Tidak ada bahasa-bahasa lain atas ∑ yang regular. Artinya koleksi dari bahasa-bahasa regular atas

  ∑ terdiri dari bahasa kosong, semua bahasa singleton, termasuk { ε }, dan semua bahasa yang dibentuk oleh operasi-operasi bahasa perangkaian, gabungan, dan penutup bintang.

  Contoh: Misalkan

  ∑ = {a, b} maka yang berikut ini benar: Ø dan { ε } adalah bahasa-bahasa regular. { a } dan { b } adalah bahasa-bahasa regular. { a, b} adalah regular, yang merupakan gabungan dari { a } dan { b }. { ab } adalah reguler. { a, ab, b } adalah regular. { a | i

  i ≥ 0 } adalah regular.

  { (ab)

  i

  | i ≥ 0 }adalah regular.

  • ’, ‘+’, ‘ ∪’, ‘.’

  Notasi dari ekspresi regular yaitu sebagai berikut: ‘*’, ‘

  • yaitu karakter asterisk, berarti bisa tidak muncul, bisa juga muncul berhingga kali (0-n)
  • atau ∪ berarti union
  • . (titik) berarti konkatenasi, biasanya titik bisa dihilangkan, misal: ab bermakna sama seperti a.b
    • pertama, . berikutnya dan ∪ yang terakhir.
      • d

  ( pada posisi superscript / di atas) berarti minimal muncul satu kali (1-n)

  Telah disepakati bahwa urutan untuk operator-operator *, ∪ dan . adalah

  Contoh ekspresi regular ( selanjutnya disingkat sebagai ER): ER: ab*cc

  Contoh string yang dibangkitkan: abcc, abbcc, abbbcc, abbbbcc, acc ( b bisa tidak muncul atau muncul sejumlah berhingga kali )

  ER: 010* Contoh string yang dibangkitkan: 01, 010, 0100, 01000 ( jumlah 0 di ujung bisa tidak muncul, bisa muncul berhingga kali )

  ER: a

  Contoh string yang dibangkitkan: ad, aad, aaad ( a minimal muncul sekali )

  ER: a * ∪ b * Contoh string yang dibangkitkan: a, b, aa, bb, aaa, bbb, aaaaa, bbbb

  ER: ( a ∪ b ) Contoh string yang dibangkitkan: a, b

  ER: ( a ∪ b )* Contoh string yang dibangkitkan: a, b, ab, ba, abb, bba, aaaa, bbbb ( untai yang memuat a atau b)

  ER: 01 * 0 Contoh string yang dibangkitkan: 0, 01, 011, 0111, 01111 ( string yang berawalan dengan 0, dan selanjutnya boleh diikuti deretan1)

  B.2. Aturan Produksi Bahasa Reguler

  Sebuah otomata berhingga mendefinisikan sebuah bahasa sebagai himpunan semua untai yang menggerakkan dari state awal ke salah satu state yang diterima ( himpunan state akhir). Sebagai contoh, pandang otomata berhingga yang diterima oleh transisi dalam gambar dibawah ini. a

  Q

  

2

  ε b a Q

  4 Q Q

  1

  b Q

  4

  qq ε

  Q

  

3

  ε b Otomata berhingga diatas menerima bahasa regular a(a*

  ∪ b*)b. Bilamana sebuah lintasan diambil dari kedudukan awal ke yang lain, “keluaran” simbol itu

  2 aa b dengan menggerakkan dari kedudukan Q ke Q 1 ke Q 2 ke Q 2 ke Q 2 ke Q 4.

  Untai yang dipakai dalam bahasa regular a(a* b*)b terdiri dari sebuah

  

a yang diikuti oleh suatu “bagian akhir”. Misal E dianggap bagian akhir, secara

  simbolis observasi ini menyajikan SaE. Anak panah (→) bisa dibaca seperti

  “dapat ” atau “terdiri dari”. Bagian akhir dari sebuah untai demikian terdiri dari satu dari dua susunan para a dan para b. Jadi bisa ditulis E

  → A dan E → B untuk

  menunjukkan kemungkinan ganda untuk E. Dua susunan dari para a dan para b bisa dinyatakan sebagai A

  → aA bersama dengan A → b untuk menunjukkan

  sebuah untai dari para a diikuti oleh sebuah b atau sebagai B

  → bB bersama

  dengan B → b, yang menunjukkan sebuah untai para b diikuti oleh b yang lain. Ekspresi-ekspresi tersebut dapat diringkas sebagai berikut:

  S → aE E → A E → B A → b A → aA B → b B → bB

  Ekspresi-ekspresi tersebut dapat dipandang sebagai aturan-aturan

  

pengganti sewaktu membangkitkan untai-untai. Simbol di sebelah kiri anak panah

bisa diganti oleh untai di sebelah kanan.

  Sebagai contoh, untai aab bisa dihasilkan melalui permulaan S, mengganti S dengan aE, mengganti E dengan aA, dan akhirnya A dengan b.

  Diperkenalkan simbol | yang di baca “atau”. Dengan menggunakan simbol ini, dua aturan E

  → A dan E → B dapat dikombinasikan sebagai E → A | B, membangkitkan untai-untai tadi kemungkinan bisa ditulis kembali sebagai berikut:

1. S → aE 2.

   E → A | B 3. A → aA | b 4. B → bB | b

3 Untai a b bisa dibangkitkan dari S dengan pertama kali menerapkan

  aturan 1 untuk mandapatkan aE, kemudian aturan 2 untuk mendapatkan aA, dan kemudian aturan 3 untuk mendapatkan aaA dan aaaA; akhirnya bagian kedua dari aturan 3 dapat diterapkan untuk mendapatkan aaab. Uraian dari proses pembangkitan ini dapat ditulis seperti berikut:

  S => aE => aA => aaA => aaaA => aaab

  Untuk anak panah ganda =>Dibaca sebagai “menurunkan”, “menghasilkan”, atau “membangkitkan”.

  Definisi (Kelly, Dean. h 81)

  Sebuah tata bahasa regular G didefinisikan dengan 4-tupel G = ( ∑, N,

  S, P), dimana: = sebuah abjad N = sebuah koleksi simbol nonterminal S = suatu nonterminal tertentu yang dinamakan simbol awal (start simbol) P = sebuah koleksi aturan-aturan pengganti, dinamakan produksi- produksi, yang berbentuk A → w, untuk A Є N dan w adalah suatu

  1. w memuat paling banyak satu nonterminal 2. jika w memuat sebuah nonterminal, maka ia muncul sebagai simbol terkanan dari w.

  )*(b ∪ ε).

  terminal-terminal ) S adalah sebuah nonterminal spesifik yang dinamakan simbol permulaan

   adalah sebuah abjad ( juga dikenal sebagai sebuah himpunan dari

  Untuk: N adalah sebuah koleksi berhingga dari nonterminal-nonterminal

  G = ( N, ∑, S, P )

  Sebuah tata bahasa bebas konteks atau Context-Free Grammer (CFG) adalah sebuah 4-tupel,

  Definisi 3.3.1 ( Kelly, Dean. Otomata Dan Bahasa-Bahasa Formal. h.86)

  2

  Bahasa yang dihasilkan oleh tata bahasa regular G dinotasikan L (G). Contoh:

  . yaitu L (G) = b (a

  2n

  b dan ba

  L (G) memuat semua untai yang berbentuk ba 2n

   = { a, b } N = { S, A } P : S → bA A → aaA| b | ε

  Sebuah tata bahasa regular G = ( ∑, N, S, P), untuk

C. Tata Bahasa Bebas Konteks C.1. Bahasa-Bahasa Bebas Konteks

  Bahasa yang dihasilkan oleh CFG G dinotasikan L ( G ) dan dinamakan

  

bahasa bebas konteks ( Context-Free Language ) disingkat CFL. Karena suatu

  tata bahasa regular adalah sebuah CFG, didapatkan juga bahwa suatu tata bahasa regular adalah sebuah CFL.

  Seperti sebuah tata bahasa regular, sebuah CFG adalah sebuah cara yang menunjukkan bagaimana menghasilkan untai-untai dalam sebuah bahasa. Di CFG juga menggunakan notasi => untuk menunjukkan aksi dari generasi itu sebagai lawan pada

  →, yang merupakan bagian dari sebuah aturan produksi. Ketika

  menurunkan sebuah untai, nonterminal-nonterminal itu masih mewakili bagian- bagian tak terturunkan dari untai itu. Dalam hal tata bahasa-tata bahasa regular, bagian tak terturunkan itu selalu terjadi pada salah satu ujung. Dalam CFG yang tidak merupakan tata bahasa-tata bahasa regular bisa terdapat lebih banyak dari satu bagian tak terturunkan dan bisa terjadi dimana saja dalam untai itu. Ketika penurunan itu telah lengkap, semua bagian tak terturunkan telah diganti oleh untai-untai ( mungkin kosong ) dari simbol-simbol terminal.

  Misal CFG yang ditentukan oleh: S

   aSb | ε

  Terdapat bahasa-bahasa bebas konteks yang bukan bahasa-bahasa regular. Artinya koleksi bahasa-bahasa bebas konteks sepatutnya memuat koleksi bahasa-bahasa regular.

  Dalam generalisasi ke tata bahasa-tata bahasa bebas konteks, semua pembatasan pada ruas kanan dari aturan-aturan produksi dihapus, dengan Satu-satunya tempat yang tersisa untuk generalisasi pada ruas kiri dari aturan- aturan produksi itu. Tata bahasa frasa-tersruktur ( phrase-structured grammer ) adalah salah satu tata bahasa yang ruas kiri aturan-aturan produksinya itu bisa dibentuk dari suatu untai tak kosong atas N

  , yang memuat suatu nonterminal.

  Jadi untuk sebuah tata bahasa frasa-terstruktur, koleksi dari aturan-aturan produksi

  P memenuhi: P

  ⊆ ( N )* N ( N )* × ( N )* Tata bahasa-tata bahasa frasa tersruktur juga dikenal sebagai tata bahasa- tata bahasa tipe 0 atau tak dibatasi.

  Istilah bebas konteks, apabila diterapkan pada tata bahasa-tata bahasa mengingatkan akan adanya tata bahasa-tata bahasa yang terhadapnya konteks

  

bersifat sensitif. Tata bahasa-tata bahasa konteks sensitif ( context-sensitive

grammer ) adalah tata bahasa-tata bahasa frasa terstruktur yang disini dibatasi

  oleh produksi-produksi α

  → β sedemikian sehingga | α | → | β |. Terdapat sebuah bentuk normal untuk tata bahasa-tata bahasa ini yang setiap produksinya berbentuk A dengan

  α

  1 α

  2 1 βα 2 β

  → α ≠ ε. Produksi-produksi demikian mengizinkan penggantian nonterminal A dengan untai β hanya bila A terjadi dalam “konteks” dari α dan α

  1 2.

  Tata bahasa-tata bahasa konteks sensitif tidak dapat menurunkan bahasa yang sama banyak dengan tata bahasa-tata bahasa frasa terstruktur, tetapi tata bahasa-tata bahasa konteks sensitif mengizinkan terjadinya penurunan-penurunan didalam cara yang dapat diduga. Walaupun demikian, perhatikan bahwa karena dalam sebuah tata bahasa konteks sensitif yang benar. Bahasa-bahasa pemrograman sering kali dirancang agar konteks sensitif sebagai sebuah cara untuk menyederhanakan proses kompilasi. Contoh : Untuk tata bahasa bebas konteks yang ditentukan oleh

  S → AA

  A → AAA | a | bA | Ab

  2

  2 Tata bahasa bebas konteks diatas dapat menurunkan untai b aba ba sebagai

  berikut: S => AA => AAAA => bAAAA => bbAAAA => bbaAAA => bbabAAA => bbabaAA => bbabaAbA => bbabaabA =>

  2

  

2

bbabaaba => b aba ba.

  C.2. Penyederhanaan Tata Bahasa Bebas Konteks

  Penyederhanaan tata bahasa bebas konteks bertujuan untuk melakukan pembatasan sehingga tidak menghasilkan pohon penurunan yang memiliki kerumitan yang tidak perlu atau aturan produksi yang tidak berarti.

  Misalkan terdapat tata bahasa bebas konteks ( dengan simbol awal S ): S

  → A A

  → B B

  → C C

  → D D

  → a | A Tata bahasa bebas konteks tersebut memiliki kelemahan terlalu panjang jalannya Suatu tata bahasa bebas konteks dapat disederhanakan dengan tiga cara sebagai berikut:

  1. Penghilangan produksi useless ( tidak berguna )

  2. Penghilangan produksi unit

3. Penghilangan produksi ε.

  Selanjutnya akan dibahas satu persatu cara penyederhanaan tata bahasa bebas konteks tersebut.

  1. Penghilangan Produksi Useless Produksi useless adalah:

  • Produksi yang memuat simbol variabel yang tidak memiliki penurunan yang akan menghasilkan terminal-terminal seluruhnya ( maksudnya menuju terminal ), produksi ini tidak berguna karena bila diturunkan tidak akan pernah selesai ( masih ada simbol variabel yang tersisa ).
  • Produksi yang tidak akan pernah dicapai dengan penurunan apapun dari simbol awal, sehingga produksi itu redundan (berlebihan).

  Contoh :

  1. Terdapat tata bahasa bebas konteks: S

  → aAb | cEB A

  → dBE | eeC B

  → ff C

  → ae Dari tata bahasa bebas konteks diatas dapat diterangkan bahwa: 1). Aturan produksi S

  → cEB, A → dBE, E tidak memiliki penurunan 2). Aturan produksi B

  → ff , D → h, redundan maka dari tata bahasa bebas konteks diatas, produksi yang useless: S

  → cEB A

  → dBE B

  → ff D

  → h Jadi tata bahasa bebas konteks setelah disederhanakan menjadi: S

  → aAb A

  → eeC C

  → ae

  2. Terdapat tata bahasa bebas konteks: S

  → aBD B

  → cD | Ab D

  → ef A

  → Ed F

  → dc Dari tata bahasa bebas konteks diatas dapat diterangkan sebagai berikut: 1). Aturan produksi A

  → Ed, E tidak memiliki penurunan 2). Aturan produksi F

  → dc, redundan maka dari tata bahasa bebas konteks tersebut yang useless yaitu: B

  → Ab A

  → Ed F

  → dc Jadi aturan produksi untuk tata bahasa bebas konteks tersebut setelah disederhanakan menjadi: S

  → aBD B

  → cD D