Back to IF2224 Teori Bahasa Formal dan Otomata
Topic
Questions/Cues
Apa saja cara untuk membuktikan string?
Apa artinya representasi-representasi ini “ekuivalen”?
Bagaimana mengubah Parse Tree menjadi Derivasi?
Bagaimana membuktikan string dari Derivasi?
Bagaimana membuktikan string dari Inferensi?
Mengapa ekuivalensi ini fundamental?
Reference Points
slide-08.pdf(hlm. 8, 11-20)Empat Sisi dari Koin yang Sama
Sejauh ini, kita telah melihat empat cara berbeda untuk menunjukkan bahwa sebuah string
wadalah anggota dari bahasa yang didefinisikan oleh sebuah CFG:
Inferensi Rekursif: Membangun bukti dari terminal ke atas.
Derivasi: Menurunkan string dari Simbol Awal (
S ⇒* w).Derivasi Leftmost/Rightmost: Versi sistematis dari derivasi.
Parse Tree: Representasi visual dari derivasi.
Pertanyaan kuncinya adalah: apakah ini semua konsep yang terpisah? Jawabannya adalah tidak. Keempatnya ekuivalen secara fundamental. Artinya, jika Anda bisa membuktikan keanggotaan string dengan salah satu metode, Anda dijamin bisa membuktikannya dengan ketiga metode lainnya. Konsep utama dari bagian ini adalah bahwa empat cara untuk mendeskripsikan keanggotaan sebuah string
wdalam bahasa dari sebuah variabelAadalah ekuivalen (setara). Artinya, jika salah satu kondisi terpenuhi, maka semua kondisi lainnya juga pasti terpenuhi.Teorema Ekuivalensi
Keempat kondisi tersebut adalah:
String
wdapat dibuktikan berada dalam bahasa dariAmelalui Inferensi Rekursif.Ada sebuah Parse Tree dengan akar
Adan yieldw.Terdapat sebuah Leftmost Derivation
A ⇒*lm w.Terdapat sebuah Rightmost Derivation
A ⇒*rm w.Pembuktian ekuivalensi ini dilakukan dengan menunjukkan bahwa kita bisa mengubah satu bentuk representasi ke bentuk lainnya secara sistematis.
Dari Inferensi ke Parse Tree (Theorem 5.12)
Jika kita bisa membuktikan
wada dalam bahasa dariAmelalui inferensi, maka pasti ada Parse Tree dengan akarAdan yieldw.Pembuktian ini menggunakan induksi pada jumlah langkah inferensi:
Basis (1 langkah): Jika inferensi hanya butuh satu langkah, itu berarti kita menggunakan aturan produksi
A → w. Kita bisa langsung membuat Parse Tree sederhana: akarAdengan satu anakw.Induksi (n+1 langkah): Anggap langkah terakhir inferensi menggunakan aturan
A → X1X2...Xk, di mana stringwdipecah menjadiw1w2...wk. Setiapwiadalah hasil inferensi dariXiyang membutuhkannlangkah atau kurang. Berdasarkan hipotesis induksi, setiap(Xi, wi)ini sudah memiliki Parse Tree-nya sendiri. Kita tinggal menggabungkannya: buat akar baruA, dan jadikan akar-akar dari Parse Tree(Xi, wi)sebagai anak-anaknya. Hasilnya adalah Parse Tree yang valid untuk(A, w).Dari Parse Tree ke Leftmost Derivation (Theorem 5.14)
Jika ada Parse Tree dengan akar
Adan yieldw, maka pasti ada Leftmost DerivationA ⇒*lm w.Pembuktian ini menggunakan induksi pada tinggi (height) dari Parse Tree:
Basis (Tinggi 1): Pohon ini pasti terdiri dari akar
Adan anakw, yang berarti ada aturanA → w. Ini adalah derivasi satu langkah:A ⇒ w, yang secara trivial adalah leftmost.Induksi (Tinggi n+1): Sebuah pohon dengan tinggi
n+1memiliki akarAdan anak-anakX1, X2, ..., Xk. SetiapXiadalah akar dari sub-pohon yang tingginyanatau kurang. Berdasarkan hipotesis induksi, untuk setiap sub-pohon(Xi, wi), sudah ada leftmost derivationXi ⇒*lm wi. Kita bisa membangun derivasi total dengan cara:
Mulai dengan
A ⇒ X1X2...Xk.Secara berurutan dari kiri ke kanan (untuk
idari 1 sampaik), gantiXidenganwimenggunakan leftmost derivation yang sudah ada dari hipotesis induksi. Karena kita selalu memproses variabel paling kiri (X1, laluX2, dst.), keseluruhan proses ini menghasilkan sebuah Leftmost Derivation yang valid dariAkew.Dari Derivasi ke Inferensi (Theorem 5.18)
Jika ada derivasi
A ⇒* wdi manawadalah string terminal, maka kita dapat membuktikanwada di dalam bahasa dariAmelalui inferensi.Pembuktian ini menggunakan induksi pada panjang derivasi:
Basis (1 langkah): Derivasi
A ⇒ wberarti ada aturanA → w. Ini adalah langkah inferensi dasar yang membuktikanwada dalam bahasa dariA.Induksi (n+1 langkah): Tulis derivasi sebagai
A ⇒ X1X2...Xk ⇒* w. Stringwdapat dipecah menjadiw1w2...wkdi mana setiapwiadalah hasil derivasi dariXidalamnlangkah atau kurang. Berdasarkan hipotesis induksi, kita bisa menginferensikan bahwa setiapwiada dalam bahasa dariXi. Karena kita memiliki aturanA → X1X2...Xkdan kita sudah membuktikan keanggotaanw1..wk, kita bisa melakukan satu langkah inferensi terakhir untuk membuktikanwada dalam bahasa dariA.Sifat “Context-Free”
Ekuivalensi ini juga menyoroti mengapa grammar ini disebut “bebas konteks”. Ketika kita melakukan derivasi pada sebuah variabel (misal
BdalamαBβ), aturan yang diterapkan padaBtidak bergantung sama sekali pada simbol-simbol di sekitarnya (αdanβ). Sub-pohon untukBdapat dibangun secara independen dan kemudian “ditempelkan” ke pohon yang lebih besar, sama seperti sub-derivasi yang bisa disubstitusikan ke dalam derivasi yang lebih panjang.
Keempat metode untuk memvalidasi sebuah string dalam CFG—yaitu Inferensi Rekursif, Derivasi (termasuk Leftmost dan Rightmost), dan Parse Tree—adalah representasi yang ekuivalen secara matematis, artinya keberadaan salah satu bentuk representasi secara otomatis menjamin keberadaan bentuk lainnya. Ekuivalensi ini terbukti melalui kemampuan untuk mengonversi satu bentuk ke bentuk lainnya (misalnya, Parse Tree dapat diubah menjadi Derivasi Leftmost), yang menegaskan bahwa mereka semua adalah “sudut pandang” yang berbeda untuk melihat struktur sintaksis fundamental yang sama dari sebuah string.
Additional Information
Implikasi Praktis: Cara Kerja Parser
Teorema ekuivalensi ini bukan hanya teori abstrak; ini adalah dasar dari cara kerja parser. Tugas sebuah parser adalah, diberikan sebuah string input (misalnya, kode sumber), untuk menentukan apakah string tersebut valid sesuai grammar. Secara efektif, parser mencoba untuk membangun salah satu dari representasi ini.
Parser Top-Down (seperti Recursive Descent): Secara implisit mencoba membangun derivasi terkiri.
Parser Bottom-Up (seperti LR): Secara implisit mencoba membangun derivasi terkanan secara terbalik.
Jika parser berhasil membangun derivasi (dan secara ekuivalen, sebuah Parse Tree), maka string tersebut diterima sebagai sintaksis yang valid. Jika gagal, maka terjadi syntax error.
Konteks-Free
Sifat “konteks-bebas” dari grammar inilah yang memungkinkan ekuivalensi ini. Aturan
A → αdapat diterapkan pada variabelAdi mana pun ia muncul, tanpa peduli apa yang ada di sekelilingnya (konteksnya). Hal ini memungkinkan kita untuk secara independen membangun sub-pohon (sub-tree) atau melakukan sub-derivasi untuk setiap variabel dalam sebuah aturan produksi dan kemudian menggabungkannya, yang merupakan inti dari semua bukti induktif di atas.