Tata Bahasa Bebas Konteks Penyederhanaan Tata Bahasa Bebas Konteks

BAB II LANDASAN TEORI

A. Tata Bahasa Bebas Konteks

Tata Bahasa Bebas Konteks Contexs Free Grammar CFG merupakan salah satu cara untuk mendefinisikan bahasa language. Dengan tata bahasa bebas konteks dapat diketahui untai-untai yang dihasilkan dalam bahasa. A.1 Definisi Tata Bahasa Bebas Konteks Tata bahasa bebas konteks didefinisikan sebagai G = , dengan : Ρ Σ Ν , , , S Ν = himpunan simbol nonterminal. Σ = himpunan terminal-terminal atau alphabeth. S ∈ Ν = simbol awal. Ρ = aturan produksi, dimana P Σ ∪ Ν × Ν ⊆ atau dapat dijelaskan sebagai N → Σ ∪ Ν . Nonterminal yang ada disebelah kiri produksi dapat digantikan oleh string yang ada di sebelah kanan tanda panah, dimana Ν w w ∈ Σ ∪ Ν . Tata bahasa bebas konteks G dalam mendefinisikan sebuah bahasa L atau dinotasikan dengan cara menetapkan sebuah himpunan produksi, dimana hanya string-string dari G L L yang dapat disusun oleh himpunan produksi tersebut. Setiap string yang dapat dibentuk dari keadaan awal melalui proses penggantian semua nonterminal oleh aturan-aturan produksi sampai tidak ada lagi nonterminal yang tersisa merupakan bagian S L . PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Contoh : N = S, A, B, C Σ = a, b, c Ρ = S Abb | BC | abbC → A a → B → ab C c → String yang dapat dibentuk dari CFG di atas adalah L = abb, abc, abbc Penurunan string berdasarkan CFG di atas : S Abb abb 1 → 2 → S BC abc 1 → 2 → S abbC abbc 1 → 2 →

B. Penyederhanaan Tata Bahasa Bebas Konteks

Pembentukan tata bahasa bebas konteks terkadang belum dalam bentuk yang sederhana, sehingga ketidaksederhanaan ini akan membuat tata bahasa bebas konteks menjadi rumit dengan aturan-aturan produksi yang tidak berarti. Oleh karena itu perlu dilakukan penyederhanaan tata bahasa bebas konteks dengan menempatkan pembatasan-penbatasan, sehingga pohon penurunan yang dihasilkan tidak rumit dan mudah ditelusuri. Langkah-langkah penyederhanaan tata bahasa bebas konteks : 1. Penghilangan produksi yang tidak bisa diturunkan hingga simbol terminal. 2. Penghilangan produksi yang tidak bisa dicapai dari . S 3. Menghilangkan produksi - ε 4. Menghilangkan produksi tunggal Dalam skripsi ini, karena input yang berupa tata bahasa bebas konteks dianggap sudah sederhana jadi tidak dilakukan penyedehanaan melainkan hanya melakukan pengecekan. Pengecekan tersebut adalah penghilangan produksi yang tidak bisa diturunkan sampai mencapai simbol terminal dan produksi yang tidak bias dicapai dari . Sedangkan pengecekan untuk penyedehanaan menghilangkan produksi tunggal dan produksi S ε dilakukan secara manual yaitu langsung saat user menginput diharapkan tidak memasukkan tata bahasa konteks yang mengandung produksi tunggal maupun produksi ε . B.1 Penghilangan Produksi Yang Tidak Bisa Diturunkan Hingga Terminal Produksi yang tidak bisa diturunkan atau yang tidak bisa mencapai terminal dikatakan tidak sederhana, karena bila diturunkan tidak akan pernah selesai atau tidak akan pernah menghasilkan terminal-terminal seluruhnya. Contoh : N = S, A, B , C, D Σ = a, b, c, d, e Ρ = S Aab | bbC | aaD → A Abe | aaB | e → B → Ac | bcC C → cd Terlihat bahwa nonterminal D tidak mempunyai produksi atau tidak dapat menurunkan simbol terminal. Oleh karena itu nonterminal D dan setiap produksi yang mengandung nonterminal D dikatakan tidak berguna. Jika diketahui CFG = G Ρ Σ Ν , , , S maka hasil penyederhanaanya adalah = , dimana G′ Ρ′ ′ Σ′ Ν′ , , , S Ν′ dan Ρ′ dibentuk dengan langkah-langkah sebagai berikut. Algoritma : 1. Inisialisasi Ν′ dengan semua nonterminal A → w merupakan sebuah produksi dalam G dengan w ∈ Σ . 2. Inilisiasasi dengan semua produksi Ρ′ A → w dimana A ∈ Ν′ dan w ∈ Σ . 3. - Tambahkan ke dalam Ν′ semua nonterminal A dimana A → w , w ∈ Σ ∪ Ν′ adalah sebuah produksi dalam Ρ . - Tambahkan produksi tersebut ke Ρ′ . - Ulangi langkah-langkah ini sampai tidak ada lagi nonterminal yang yang ditambah ke dalam Ν′ . Contoh penyederhanaan dengan menghilangkan nonterminal yang tidak bisa mencapai terminal : Ρ = S Aab | bbC | aaD → A Abe | aaB | e → B → Ac | bcC C → cd Ν′ Ρ′ Inisialisasi {A, C} A e ; C → cd → Nonterminal yang bisa {A, C, B} S Aab ; A Abe → → diturunkan ke {A, C} B Ac ; S bbC B bcC → → → Nonterminal yang bisa {A, C, B} A aaB → diturunkan ke {A, C, B} Ρ′ : S Aab | bbC → A Abe | aaB | e → B → Ac | bcC C → cd B.2 Penghilangan Produksi Yang Tidak Bisa Dicapai Dari S N = S, A, B , C, D Σ = a, b, c, d, e Ρ = S aabAac | BB | BBB | Ddee → A → aaa | cdA B → BDc | c C → cde D e → Nonterminal C di atas dikatakan redundan berlebih karena non terminal tersebut tidak akan pernah dicapai dari S atau dari produksi manapun. Misalkan G = ′ Ρ′ ′ Σ′ Ν′ , , , S merupakan hasil penyederhanaan dari G = yang dibentuk dengan langkah-langkah sebagai berikut. Ρ Σ Ν , , , S Algoritma : 1. - Inisialisasi Ν′ dengan memuat simbol awal . S - Inisialisasi Ρ dan ′ Σ′ sebagai himpunanan kosong. 2. Untuk setiap A ∈ Ν′ , jika A → w merupakan produksi dalam , maka : Ρ - Masukkan A → w ke dalam Ρ′ . - Masukkan semua non terminal yang ada di dalam ke dalam w Ν′ . - Masukkan semua terminal yang ada di dalam ke dalam . w Σ′ Ulangi langkah ini sampai tidak ada lagi produksi yang dapat ditambahkan ke dalam . Ρ′ Berikut adalah contoh penyederhanaan dengan menghilangkan nonterminal yang tidak bisa mencapai terminal : Ρ = S aabAac | BB | BBB | Ddee → A → aaa | cdA B → BDc | c C → cde D e → Ν′ Ρ′ Σ′ Inisialisasi {S} φ φ Produksi dari S {S, A, B, D} S aabAac | BB | Dde {a, b, c, d, e} → Produksi dari {S, A, B, D} A aaa | cdA {a, c, e} → {A, B, D} B BDc | c → D e → Ρ′ : S aabAac | BB | Ddee → A → aaa | cdA B → BDc | c D → e C. Bentuk Normal Chomsky Bentuk Normal Chomsky Chomsky Normal Form CNF merupakan salah satu bentuk akhir dari penyederhanaan tata bahasa bebas konteks dimana bentuk untai-untainya lebih terstruktur. C.1 Definisi Bentuk Normal Chomsky A tata bahasa bebas konteks = G Ρ Σ Ν , , , S dikatakan dalam bentuk normal Chomsky, jika dan hanya jika setiap aturan dalam Ρ berbentuk sebagai berikut : 1. , untuk setiap a A → A ∈ Ν dan Σ ∈ a 2. , untuk setiap BC A → A , B ,C ∈ Ν Dengan kata lain tata bahasa bebas konteks berbentuk normal Chomsky jika setiap produksinya terdiri dari tepat sebuah terminal tunggal maupun dua non terminal. PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI C.2 Pembentukan Bentuk Normal Chomsky Dengan adanya sebuah tata bahasa bebas konteks dalam bentuk normal Chomsky, maka dapat diketahui dengan tepat bagaimana langkah-langkah dalam melakukan penurunan sebuah string . Jika sebuah tata bahasa bebas konteks dan G G L ∉ ε , maka G dapat ditransformasikan menjadi sebuah tata bahasa bebas konteks dalam bentuk normal Chomsky. Cara mentransformasikan grammar ke dalam bentuk normal Chomsky : 1. Hilangkan semua produksi yang tidak diperlukan, produksi ε , dan produksi tunggal dalam G . Setelah dilakukan penyederhanaan tata bahasa konteks, maka akan meghasilkan semua produksi berbentuk A → w dengan 1 ≥ w - Jika 1 = w berarti Σ ∈ w , karena tidak ada produksi tunggal. Jadi sudah memenuhi bentuk normal Chomsky. - Jika 1 w berarti w = , maka bisa memuat terminal dan non terminal keduanya. n X X X .... 2 1 w Cara mengkonversikan menjadi untai-untai yang hanya memuat nonterminal-nonterminal : w Misalkan diketahui sebuah produksi yang berbentuk A → w , untuk = . Jika ada w n X X X .... 2 1 Σ ∈ i X , kita ganti dengan i X Ν ∈ i C dan tambahkan i i X C → PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Hasil step 1 : semua produksi berbentuk A → w dengan sebuah terminal atau string yang semuanya terdiri dari non terminal. w 2. Transformasikan ke dalam CNF dengan memecah string pada ruas kanan produksi yang panjangnya lebih dari dua non terminal. G Jika sebuah produksi , n B B B A ..... 2 1 → Ν ∈ i B dengan maka diubah dengan mengambil 2 non terminal pertama dan menggantikannya dengan 2 non terminal baru sampai mencapai tepat 2 non terminal. 2 ≥ n n n B Z A 3 − → 1 4 3 2 1 − − − → → n n n B Z Z B B Z M i Z merupakan non terminal-non terminal baru. Dalam tata bahasa yang dihasilkan setelah mengalami transformasi, ruas kanan dari masing-masing produksi terdiri dari baik sebuah terminal tunggal maupun yang lainnya berupa sebuah untai dari dua non terminal. Akibatnya, suatu tata bahasa bebas konteks yang tidak memuat ε dapat diturunkan oleh sebuah tata bahasa bebas konteks dalam bentuk normal Chomsky. Berikut ini merupakan contoh tata bahasa konteks yang sudah mengalami penyederhanaan dan akan ditransformasikan ke dalam bentuk normal Chomsky: N = S, A, B , C Σ = a, b, c, d, e Ρ = S Bb | AA | de → A aBb → B bC | bbbb → PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI C c → Aturan-aturan produksi yang sudah dalam bentuk normal Chomsky : S AA → C c → Transformasi pertama ‘ ⇒ ’ bisa dibaca ‘berubah menjadi’ : o Ubah produksi A → w dengan 1 ≥ w o Ganti semua terminal dalam menjadi nonterminal baru. w S Bb S → B → ⇒ Ζ S de S → → ⇒ 1 Ζ 2 Ζ A aBb A → → ⇒ 3 Ζ B Ζ B bC B → → ⇒ Ζ C B bbbb B → → ⇒ Ζ Ζ Ζ Ζ Terbentuk aturan produksi dan simbol variable baru : Ζ → b 1 Ζ → d 2 Ζ → e 3 Ζ → a Produksi menjadi : S B | AA | → Ζ 1 Ζ 2 Ζ A → 3 Ζ B Ζ B → Ζ C | Ζ Ζ Ζ Ζ PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI C c → Ζ → b 1 Ζ → d 2 Ζ → e 3 Ζ → a Transformasi kedua : o Ubah produksi A → w dengan 2 ≥ w A → 3 Ζ B A → Ζ ⇒ 4 Ζ Ζ B → Ζ Ζ Ζ Ζ B → ⇒ 5 Ζ Ζ Ζ B → 5 Ζ Ζ Ζ B ⇒ → 6 Ζ Ζ Terbentuk aturan produksi dan symbol variable baru : B 4 Ζ → 3 Ζ 5 Ζ → Ζ Ζ 6 Ζ → 5 Ζ Ζ Produksi dalam CNF : S B | AA | → Ζ 1 Ζ 2 Ζ A → 4 Ζ Ζ B → Ζ C | 6 Ζ Ζ C c → Ζ → b 1 Ζ → d 2 Ζ → e 3 Ζ → a 4 Ζ → B 3 Ζ 5 Ζ → Ζ Ζ 6 Ζ → 5 Ζ Ζ Jika L sebuah tata bahasa bebas konteks yang memuat ε , maka bisa didapatkan sebuah tata bahasa bebas konteks dalam bentuk normal Chomsky untuk } { ε − L dan kemudian menambahkan produksi ε → S kepadanya. Tata bahasa yang dihasilkan adalah dalam bentuk normal Chomsky kecuali untuk produksi ε tunggal. D. Pemrograman Java D.1 Java