350 likes | 544 Views
Session 10 Context-free grammar. Theory of Language and Automata (KOM208 ) Credits: 3(3-0). TIK, Subtopik dan Waktu Penyajian. Tinjauan Instruksional Khusus : Mahasiswa akan dapat menjelaskan tata bahasa dan bahasa bebas konteks . Subtopik : Definisi dari tata bahasa bebas konteks
E N D
Session 10Context-free grammar Theory of Language and Automata (KOM208) Credits: 3(3-0)
TIK, Subtopik dan Waktu Penyajian • Tinjauan Instruksional Khusus: • Mahasiswa akan dapat menjelaskan tata bahasa dan bahasa bebas konteks. • Subtopik: • Definisi dari tata bahasa bebas konteks • Penurunan menggunakan tata bahasa • Bahasa dari sebuah tata bahasa • Waktu penyajian: 1 x 150 menit
Pendahuluan (1) • Grammar merupakan alat untuk menjelaskan dan menganalisis bahasa. • Aplikasinya: • CFG memiliki peranan penting dalam teknologi kompilator sejak tahun 1960-an. • CFG juga telah digunakan untuk menjelaskan format dokumen, menggunakan document-type definition (DTD) yang digunakan dalam komunitas XML (extensible markup language) untuk pertukaran informasi pada web.
Pendahuluan (2) • Contoh, misal = {0,1}. Bahasa Lpal dari polindrom-polindrom pada didefinisikan secara rekursif sebagai berikut: Basis: , 0, 1 adalah polindrom. Induksi : Jika w adalah sebuah polindrom, begitu juga 0w0 dan 1w1. Tidak ada string lain dalam Lpal selain string yang diperoleh dari basis dan induksi.
Pendahuluan (3) • CFG adalah sebuah notasi formal untuk menyatakan definisi rekursif dari bahasa. • Sebuah grammar terdiri dari satu atau lebih variabel yang merupakan kelas-kelas dari string yaitu bahasa. • Dalam contoh bahasa Lpal, terdapat hanya satu variabel p yang menyatakan himpunan dari polindrom-polindrom yaitu kelas-kelas dari string-string yang membentuk bahasa Lpal. • Terdapat aturan-aturan yang menyatakan bagaimana string dalam setiap kelas dikonstruksi. • Konstruksi dapat menggunakan simbol-simbol dari alphabet, string yang diketahui ada dalam satu kelas tertentu atau keduanya.
Contoh 1 CFG untuk polindrom adalah • P • P 0 • P 1 • P 0P0 • P 1P1
Definisi CFG (1) Komponen-komponen dalam deskripsi gramatikal dari sebuah bahasa adalah sebagai berikut: • Himpunan berhingga dari simbol yang membentuk string dari bahasa yang didefinisikan. Alphabet ini dinamakan terminal-terminal atau simbol-simbol terminal. Dalam Contoh 1, simbol terminal adalah 0 dan 1. • Himpunan berhingga dari variabel-variabel. Variabel-variabel tersebut dinamakan nonterminal atau kategori syntactic. Setiap variabel menyatakan sebuah bahasa. Dalam Contoh 1, hanya terdapat 1 variabel, yaitu P, yang menyatakan kelas dari polindrom-polindrom pada alphabet {0,1}.
Definisi CFG (2) • Salah satu dari variabel-variabel menyatakan bahasa yang sedang didefinisikan. Variabel tersebut dinamakan start symbol. Variabel-variabel lain menyatakan kelas-kelas pembantu dari string-string yang digunakan untuk mendefinisikan bahasa dari start symbol. Dalam Contoh1, hanya terdapat 1 variabel, yaitu P, yang dinamakan start symbol.
Definisi CFG (3) • Himpunan berhingga dari produksi-produksi atau aturan-aturan yang menyatakan definisi rekursif dari sebuah bahasa. Setiap produksi terdiri dari: • Sebuah variabel yang didefinisikan (secara parsial) oleh produksi. Variabel ini sering kali dinamakan head dari produksi. • Simbol produksi • Sebuah string dari nol atau lebih terminal dan variabel. String ini dinamakan body dari produksi, yang menyatakan salah satu cara untuk membentuk string dalam bahasa dari variabel dari head. • Terminal-terminal tidak diubah dan setiap variabel dari body disubstitusi dengan string yang diketahui dalam bahasa dari variabel tersebut. • Dalam Contoh 1 terdapat 5 produksi.
Komponen CFG • Keempat komponen membentuk sebuah CFG atau hanya grammar, notasinya adalah G = (V, T, P, S), dengan • V : Himpunan variabel-variabel • T : Terminal • P : Himpunan produksi • S : Start symbol.
Contoh 2 • Grammar Gpal untuk polindrom-polindrom dinyatakan oleh Gpal = ({P}, {0,1}, A, P) dengan A adalah himpunan dari 5 produksi seperti dalam Contoh 1
Contoh 3 • Sebuah CFG menyatakan ekspresi dalam bahasa pemrograman, dengan ketentuan berikut: • Ekspresi dibatasi hanya mengandung operator dan (penjumlahan dan perkalian). • Argumen juga dapat berupa identifier yang dibatasi hanya untuk huruf a dan b, dan digit 0 dan 1. • Setiap identifier haruslah diawali dengan a atau b dan dapat diikuti oleh string dalam {a, b, 0, 1}*.
Contoh 3 (Lanjutan) Terdapat dua variabel dalam grammar ini yaitu: • E menyatakan ekspresi yang juga merupakan start symbol dan merepresentasikan bahasa dari ekspresi yang didefinisikan. • I menyatakan identifier.
Contoh 3 (Lanjutan) CFG yang dimaksud memiliki produksi-produksi berikut • E I • E E + E • E E*E • E (E) • I a • I b • I Ia • I Ib • I I0 • I I1 Secara formal CFG yang dimaksud adalah G = ({E,I}, T, P, E) dimana T adalah himpunan simbol-simbol {+, *, (, ), a, b, 0, 1} dan P adalah himpunan produksi-produksi.
Notasi untuk produksi • Produksi-produksi A1, A2, …, An dapat digantikan dengan notasi A 1| 2,|…| n • Dalam Contoh 1, grammar untuk polindrom dapat ditulis sebagai P | 0 | 1 | 0P0 | 1P1.
Penurunan Menggunakan Sebuah Grammar • Produksi-produksi dari sebuah CFG dapat digunakan untuk menyimpulkan bahwa string-string tertentu dalam bahasa dari sebuah variabel. • Terdapat 2 pendekatan untuk inferensi tersebut, yaitu • Inferensi rekursif, menggunakan aturan dari body ke head • Derivation, menggunakan aturan dari head ke body
Langkah-langkah Inferensi rekursif • Ambil string-string yang diketahui ada dalam bahasa dari setiap variabel dari body. • Rangkai string-string tersebut, dalam urutan yang sesuai, dengan terminal-terminal muncul dalam body. • Simpulkan bahwa string yang dihasilkan adalah dalam bahasa dari variabel pada head.
Langkah-langkah derivation • Perluas start symbol menggunakan salah satu produksinya (yaitu gunakan salah satu produksi yang memiliki head adalah start symbol). • Perluas string yang dihasilkan dengan mengganti salah satu dari variabel dengan body dari salah satu produksi-produksinya, dan seterusnya sampai diperoleh sebuah string yang mengandung terminal-terminal saja. • Bahasa dari grammar adalah semua string-string dari terminal-terminal yang dapat diperoleh dengan cara ini.
Contoh 4: Inferensi rekursif Tabel berikut menyatakan proses inferensi menggunakan grammar pada Contoh 3:
Definisi simbol relasi • Anggap G = (V,T,P,S) adalah sebuah CFG. • Misalkan A adalah sebuah string dari terminal-terminal dan variabel-variabel dengan A adalah sebuah variabel. Bahwa dan adalah string dalam (VT), dan A V. • Misalkan A adalah sebuah produksi dari G. Maka kita katakan • Jika G dimengerti, kita hanya mengatakan A.
Definisi simbol relasi (lanjutan) • Perhatikan bahwa satu langkah derivation mengganti suatu variabel dalam string dengan body dari salah satu produksinya. • Kita dapat memperluas hubungan untuk menyatakan 0, 1 atau banyak langkah penurunan.
Definisi untuk notasi * • Notasi * menyatakan 0 atau banyak langkah dengan definisi sebagai berikut: Basis: • Untuk suatu string dari terminal-terminal dan variabel-variabel kita katakan artinya suatu string menurunkan dirinya sendiri.
Definisi untuk notasi * (lanjutan) Induksi: • Jika dan maka Bahwa jika dapat menjadi dengan 0 atau lebih langkah, dan satu langkah lagi mengambil ke , maka dapat menjadi . • Dalam pernyataan lain, notasi berarti bahwa terdapat serangkaian string-string1,2,..., n, untuk n≥1 sedemikian sehingga = 1 = n Untuk i = 1, 2, ... , n1, diperoleh ii +1.
Contoh 5 • Tunjukkan bahwa a*(a+b00) adalah dalam bahasa dari variabel E pada Contoh 3. • Berikut adalah salah satu penurunan tersebut : E E*E I*E a*E a*(E) a*(E+E) a*(I+E) a*(a+E) a*(a+I) a*(a+I0) a*(a+I00) a*(a+b00)
Notasi * Notasi * digunakan untuk menyingkat penurunan. • Dari basis bisa diperoleh E * E • Penggunaan berulang bagian induksi menghasilkan E * E*E E * I*E dan seterusnya sampai diperoleh E * a*(a+b00)
Leftmost dan Rightmost Derivation • Leftmost derivation pada setiap langkah digantikan leftmost variable dengan salah satu dari body-body produksinya. Notasi: lm untuk satu langkah dan *lm untuk banyak langkah. • Righmost derivation,rightmost variable diganti oleh salah satu dari body-nya. Notasi: rm untuk satu langkah dan *rm untuk banyak langkah.
Contoh 6 • Penurunan dari Contoh 5 merupakan leftmost derivation E lm E*E lmI*E lm a*E lm a*(E)lm a*(E+E)lm a*(I+E)lm a*(a+E)lm a*(a+I)lm a*(a+I0)lm a*(a+I00)lm a*(a+b00) Secara singkat dapat dinyatakan E *lm a*(a+b00).
Contoh 6 (lanjutan) • Sedangkan rightmost derivation a*(a+b00): E rm E*E rm E*(E) rm E*(E+E) rm E*(E+I) rm E*(E+I0) rm E*(E+I00)rm E*(E+b00) rm E*(I+b00) rm E*(a+b00) rm I*(a+b00)rm a*(a+b00) Secara singkat dapat dinyatakan E *rm a*(a+b00).
Leftmost atau rightmost derivation • Baik menggunakan leftmost atau rightmost derivation: “jika w adalah terminal string dan A adalah variabel maka A * w jika dan hanya jika A *lm w dan A * w jika dan hanya jika A *rmw”.
Bahasa dari Sebuah Grammar • Jika G = (V,T,P,S) adalah sebuah CFG, bahasa dari G dinotasikan L(G) adalah himpunan dari string-string terminal yang memiliki penurunan dari start symbol. Bahwa L(G) = {w dalam T* | S * w} • Jika sebuah bahasa L adalah bahasa dari CFG, maka L dikatakan CFL (Context Free Language). • Sebagai contoh, himpunan dari polindrom-polindrom adalah CFL (Bukti dapat dilihat pada buku rujukan).
Bentuk-Bentuk Sentential • Penurunan dari start symbol menghasilkan string-string yang memiliki aturan khusus dinamakan bentuk-bentuk sentential. • Bahwa, jika G = (V,T,P,S) adalah sebuah CFG, maka string dalam (VT)* sedemikian sehingga s * adalah bentuk sentential • Jika S *lm maka adalah bentuk left sentential • Jika S *rm maka adalah bentuk right sentential • Bahasa L(G) adalah bentuk-bentuk sentential yang ada dalam T*; yaitu hanya terdiri dari terminal
Contoh 7 • Dari Contoh 3: E*(I+E) adalah sebuah bentuk sentential karena terdapat sebuah penurunan E E*E E*(E) E*(E+E) E*(I+E) • Contoh bentuk left sentential adalah a*E, karena terdapat penurunan berikut E lmE*E lmI*E lma*E • Contoh bentuk right sentential adalah E*(E+E), karena terdapat penuruan berikut E rmE*E rmE*(E) rmE*(E+E)
Daftar Pustaka • John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman. 2001. Introduction to Automata Theory, Languange, and Computation. Edisi ke-2. Addison-Wesley