Context-free grammar
Theory of Language and Automata
(KOM208)
Credits: 3(3-0)
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 documenttype 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 stringstring 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
1. P
2. P 0
3. P 1
4. P 0P0
5. P 1P1
4.
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
Contoh 3 (Lanjutan)
Terdapat dua variabel dalam grammar ini
yaitu:
1. E menyatakan ekspresi yang juga
merupakan start symbol dan
merepresentasikan bahasa dari
ekspresi yang didefinisikan.
2. I menyatakan identifier.
Contoh 3 (Lanjutan)
CFG yang dimaksud memiliki produksi-produksi berikut
1. E I
2. E E + E
Secara formal CFG yang
dimaksud adalah
3. E E*E
4. E (E)
G = ({E,I}, T, P, E)
5. I a
dimana T adalah himpunan
6. I b
simbol-simbol {+, *, (, ), a, b,
7. I Ia
0, 1} dan P adalah himpunan
8. I Ib
produksi-produksi.
9. I I0
10.I I1
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
1. Inferensi rekursif, menggunakan aturan dari
body ke head
2. Derivation, menggunakan aturan dari head ke
body
Langkah-langkah Inferensi
rekursif
1. Ambil string-string yang diketahui ada dalam
bahasa dari setiap variabel dari body.
2. Rangkai string-string tersebut, dalam
urutan yang sesuai, dengan terminalterminal muncul dalam body.
3. Simpulkan bahwa string yang dihasilkan
adalah dalam bahasa dari variabel pada
head.
Langkah-langkah derivation
1. Perluas start symbol menggunakan salah satu
produksinya (yaitu gunakan salah satu produksi
yang memiliki head adalah start symbol).
2. 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.
3. Bahasa dari grammar adalah semua stringstring dari terminal-terminal yang dapat
diperoleh dengan cara ini.
String
yang
diperoleh
Untuk
Bahasa
dari
Produksi
Stringyang
string yang
digunakan digunakan
(i)
(ii)
(iii)
b0
(ii)
(iv)
b00
(iii)
(v)
(i)
(vi)
b00
(iv)
(vii)
a + b00
(v), (vi)
(viii)
(a + b00)
(vii)
(ix)
a*(a +
b00)
(v), (viii)
Induksi:
Jika
dan G
maka
G
G
Bahwa jika dapat menjadi dengan 0 atau
lebih langkah, dan satu langkah lagi mengambil
ke , maka dapat menjadi
.
Dalam pernyataan lain, notasi
G
berarti bahwa terdapat serangkaian stringstring 1,2,..., n, untuk n1 sedemikian
sehingga
= 1
= n
Untuk i = 1, 2, ... , n1, diperoleh i i +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)
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).
Bentuk-Bentuk
Sentential
Penurunan dari start symbol menghasilkan stringstring 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 lm E*E lm I*E lm a*E
Contoh bentuk right sentential adalah
E*(E+E), karena terdapat penuruan berikut
E rm E*E rm E*(E) rm E*(E+E)
Daftar Pustaka
John E. Hopcroft, Rajeev Motwani,
Jeffrey D. Ullman. 2001. Introduction
to Automata Theory, Languange, and
Computation. Edisi ke-2. AddisonWesley