Sheila Nurul Huda, S.Kom, M.Cs Context Free Grammar Sheila Nurul Huda, S.Kom, M.Cs
Grammar Grammar: Notasi untuk mendefinisikan bahasa (baik yang natural maupun pemrograman) secara rekursif. Contoh:Palindromes Palindrome adalah string-string yang dibaca sama dari depan dan dari belakang, LPAL = {w ∈ {0, 1}* | wR = w}, Grammar:
Palindromes Secara implisit: ALL Semua palindrome dapat diperoleh dengan mengaplikasikan aturan-aturan di atas secara rekursif, ONLY Hanya palindrome yang dapat diperoleh dengan aturan-aturan tersebut.
Contoh Leq i iv vi ii v vii iii Ide: A membangkitkan string dimana jumlah 1 lebih banyak satu daripada jumlah 0. B sebaliknya. Pastikan S membangkitkan semua string di Leq (dengan induksi). Aplikasi:
Secara Formal Grammar G =(V, T, P, S) dimana: T : adalah himpunan simbol-simbol terminal (T =Σ), V : adalah himpunan simbol-simbol non-terminal (variabel) yang merepresentasikan himpunan- himpunan string yang didefinisikan secara rekursif, S: simbol start (S ∈ V ). S adalah variabel khusus yang membangkitkan keseluruhan bahasa yang diinginkan, P: himpunan aturan-aturan produksi yang berisi definisi-definisi pembangkitan yang rekursif.
Contoh Leq
Context Free Grammar Context-Free Grammar hanya diperbolehkan memiliki aturan-aturan produksi untuk substitusi berbentuk: Dimana Non-Context-FreeGrammar? Aturan bisa jadi berisi konteks dimana substitusi aturan produksi boleh digunakan. Contoh: Dengan demikian aturan tersebut tidak dapat digunakan dalam konteks yang lain.
Derivasi
Bahasa Bahasa dari suatu CFG G =(V, T, P, S) didefinisikan sebagai: Bahasa Context-Free (Context Free Language—CFL) adalah sembarang bahasa yang memiliki suatu CFG G.
Contoh: Ekspresi Aritmatika
Langkah Derivasi? Perhatikan Langkah derivasi yang mungkin? Kembangkan salah satu dari ketiga E, Gunakan salah satu dari keempat aturan produksi untuk E. Non-determinisme dalam memilih (1)Variabel dan (2) Aturan produksi. Observasi: Kebebasan memilih aturan produksi yang akan digunakan penting. Non-determinisme disini memberikan CFG kemampuan dan fleksibilitasnya. Namun kebebasan memilih variabel mana yang dikembangkan lebih dahulu hanya akan membingungkan dan memperrumit kita (contohnya di parser), sehingga kita menggunakan derivasi berarah (kanan/kiri)
Derivasi Berarah Derivasi left most: selalu substitusikan variabel paling kiri dengan menggunakan aturan produksi yang mungkin. Contoh: Derivasi right most: selalu substitusikan variabel paling kanan.
Pohon Derivasi Disebut juga sebagai Parse Tree Pohon di atas merepresentasikan derivasi:
Pohon Derivasi Secara umum untuk merepresentasikan A ⇒ α: Contoh: Akar dilabeli A, Daun dengan urutan dari kiri ke kanan menghasilkan α, Node internal dilabeli dengan variabel dan anak-anak dari variabel ini membentuk aturan produksi yang digunakan. Contoh: Adalah dibentuk oleh aturan produksi E → E + E. Pohon-A: adalah pohon yang berakar pada variabel A. Jika pohon berakar di S, kita menamainya dengan parse tree. Yield atau Frontier dari suatu pohon adalah barisan label-label daun (terminal string) dengan urutan dari kiri ke kanan.
Ambiguitas Bagaimana jika suatu w ∈ L(G) memiliki dua parse tree yang berbeda dan oleh karena itu memiliki dua derivasi left most yang berbeda? Contoh: x + y ∗ z. Derivasi Left most:
Ambiguitas Ini bukanlah hanya masalah sintaksis, karena memang kita memperoleh dua interpretasi semantik yang berbeda: Catatan: di compiler parse tree menentukan interpretasi dan oleh karena itu ambiguitas tidak boleh ada.