Anda di halaman 1dari 8

Penyederhanaan CFG (edisi 1) 1/8

Lecture Notes

Penyederhanaan Context Free Grammar


Thompson Susabda Ngoen

Teori Bahasa dan Automata

Pendahuluan
Context Free Grammar (CFG) terdiri atas sejumlah production yang berbentuk A
dengan berupa sejumlah simbol terminal dan non-terminal. Selain contex-free grammar
terdapat jenis grammar lain yang disebut context-sensitive grammar (CSG). Perbedaannya
dengan CFG adalah pada bentuk production. Bagian head production (simbol di kiri tanda
panah) CFG selalu berupa satu simbol non terminal. Bagian head production CSG boleh
terdiri atas sejumlah simbol.
Production berikut milik sebuah CFG
1. P 0P0
2. P 1P1
3. P 0
4. P 1
5. P
Derivasi yang dapat dibentuk diantaranya
P 1P1 10P01 101P101 101101
sentential form 1P1 diturunkan dari sentential form P berdasarkan production 2.
sentential form 10P01 diturunkan dari sentential form 1P1 berdasarkan production 1.
Production berikut milik sebuah CSG
1. P 0P0
2. 0P 01P1
3. P 0
4. P 1
5. P
Derivasi yang dapat dibentuk diantaranya
P 0P0 01P10 01110
Production nomor 2, 0P 01P1, menyatakan simbol P boleh diderivasi dengan 1P1 hanya
jika P berada di dalam konteks tertentu yaitu di sebelah kiri P terdapat simbol 0. Jadi P tidak
free diderivasi menjadi 1P1, maksudnya tidak bisa membentuk derivasi P 1P1 11P11
1111
Sepaham dengan namanya, production pada CFG mempunyai susunan body (simbolsimbol di kanan tanda panah) yang bebas, tidak ada ketentuan tentang jenis dan jumlah
simbol pembentuk body suatu production. Terlalu bebasnya bentuk production CFG akan
merepotkan implementasi.
Eliminasi Useless Production
Apakah semua production suatu CFG memang berguna (usefull) ? Simbol X pada grammar
G = (V,T, P, S) disebut berguna jika terdapat derivasi S
X
w dengan w terdiri atas
simbol terminal. Dua persyaratan harus dipenuhi X untuk dianggap berguna:
w
1. generating, yaitu X
maksudnya X dapat menghasilkan minimum satu buah string
2. reachable, yaitu S
X
Maksudnya dimulai dari start symbol harus bisa dihasilkan derivasi yang mengandung X

INSTITUT BISNIS dan INFORMATIKA INDONESIA

Penyederhanaan CFG (edisi 1) 2/8

Apakah production berikut usefull?


1. S aSa
2. S Abd
3. S Bde
4. A Ada
5. B BBB
6. B a
Uji generating
dengan menggunakan production 6 diperoleh B a, artinya B generating
dengan menggunakan production 3 diperoleh S Bde
pada derivasi berikut kita akan menggantikan simbol B
karena B generating maka S generating
dengan menggunakan production 4 diperoleh A Ada Adada
jika derivasi ini diteruskan maka tidak akan menghasilkan string karena simbol A
tidak bisa diganti dengan simbol terminal, A tidak generating,
Production yang mengandung A dibagian head atau body dibuang, diperoleh
1. S aSa
3. S Bde
5. B BBB
6. B a
Uji reachable
S Bde artinya B reachable dari S
Hasil:
1. S aSa
2. S Bde
3. B BBB
4. B a
Apakah production berikut usefull?
1. S Aa
2. S B
3. A ab
4. A D
5. B b
6. B E
7. C bb
8. E aEa
Uji generating
dengan menggunakan production 3 diperoleh A ab, artinya A generating
dengan menggunakan production 5 diperoleh B b, artinya B generating
dengan menggunakan production 7 diperoleh C bb, artinya C generating
dengan menggunakan production 2 diperoleh S B,
karena B generating maka S juga generating
tidak tedapat production dengan D sebagai head, D tidak generating
dengan menggunakan production 8 diperoleh E aEa aaEaa
jika derivasi ini diteruskan maka tidak akan menghasilkan string karena simbol E
tidak bisa diganti dengan simbol terminal, E tidak generating,
1. S Aa
2. S B
3. A ab
5. B b
7. C bb

INSTITUT BISNIS dan INFORMATIKA INDONESIA

Penyederhanaan CFG (edisi 1) 3/8

Uji reachable
S Aa A reachable dari S
SB
B reachable dari S
Tidak terdapat derivasi S C sehingga C tidak reachable dari S
Dengan demikian production yang usefull adalah
1. S Aa
2. S B
3. A ab
4. B b

Eliminasi -Production
Di dalam CFG mungkin terdapat -production, production berbentuk A . Production ini
bermanfaat untuk membentuk empty string atau untuk mengakhiri suatu pengulangan.
Production di bawah ini
1. P 0P0
2. P 1P1
3. P 0
4. P 1
5. P
menggunakan P untuk membentuk empty string (P ) dan mengakhiri pengulangan
pada P 0P0 00.
Jika sebuah language L mempunyai grammar CFG maka L {} mempunyai CFG yang
tidak mengandung -production.
Menghilang -production pada CFG diawali dengan mendeteksi variabel yang nullable.
Sebuah simbol non terminal atau variabel A disebut nullable jika A
. Apabila A muncul
pada body production misalnya B CAD maka production ini diubah menjadi dua versi,
satu dengan A dan yang lain tanpa A.
Hilangkan -production di bawah ini
1. S aAb
2. A aAb
3. A
Contoh string yang dihasilkan dari production di atas:
1) S aAb ab
production 1, 3
2) S aAb aaAbb aabb
production 1, 2, 3
3) S aAb aaAbb aaaAbbb aaabbb production 1, 2, 2, 3
Dengan menggunakan production 3 diperoleh A , artinya A nullable
Apakah S nullable ? S aAb ab, artinya S tidak nullable
Pada production S aAb terdapat sebuah simbol nullable yaitu A,
Bentuk dua production:
S aAb
S ab
Pada production A aAb terdapat sebuah simbol nullable yaitu A,
Bentuk dua production:
A aAb
A ab

INSTITUT BISNIS dan INFORMATIKA INDONESIA

Penyederhanaan CFG (edisi 1) 4/8

Hasil:
1. S aAb
2. S ab
3. A aAb
4. A ab
Contoh string yang dihasilkan dari keempat production tersebut:
1) S ab
production 2
2) S aAb aabb
production 1, 4
3) S aAb aaAbb aaabbb production 1, 3, 4
Hilangkan -production di bawah ini
1. S ABaC
2. A BC
3. B b |
4. C D |
5. D d
Contoh string yang dihasilkan dari production di atas:
1) S ABaC BCBaC CBaC BaC aC a production 1, 2, 3b, 4b, 3b, 4b
2) S ABaC BCBaC bCBaC
production 1, 2, 3a
bDBaC bdBaC bdaC bda
production 4a, 5, 3b, 4b
Dengan menggunakan production 3 diperoleh B , artinya B nullable
Dengan menggunakan production 4 diperoleh C , artinya C nullable
Dengan menggunakan production 2 diperoleh A BC
Karena B dan C nullable maka A juga nullable
D dan S tidak nullable
Production S ABaC mengandung 3 simbol nullable maka akan terbentuk 23
production:
S ABaC | BaC | AaC | ABa | aC | Ba | Aa | a
Production A BC mengandung 2 simbol nullable, akan terbentuk 22 production:
A BC | B | C
Salah lagi mana? A , tidak digunakan
Hasil:
1. S ABaC
2. S BaC
3. S AaC
4. S ABa
5. S aC

6. S Ba
7. S Aa
8. S a
9. A BC
10. A B

11. A C
12. B b
13. C D
14. D d

Contoh string yang dihasilkan keempat production tersebut:


1) S a
production 8
2) S Aa BCa bCa bDa bda production 7, 9, 12, 13, 14

INSTITUT BISNIS dan INFORMATIKA INDONESIA

Penyederhanaan CFG (edisi 1) 5/8

Eliminasi unit Production


Production berikut menghasilkan expression bahasa pemrograman
1. E T | E + T
2. T F | T * F
3. F I | (E)
4. I a | b
String b * (a + b) diperoleh dari derivasi:
E T T * F F * F I * F b * F b * (E) b * (E + T)
b * (T + T) b * (F + T) b * (I + T) b * (a + T)
b * (a + F) b * (a + I) b * (a + b)
Derivasinya cukup panjang dan parse tree-nya cukup panjang.
Penyebabnya adalah unit production. Unit production ialah production
berbentuk A B, pada contoh di atas berupa
ET
TF
FI
Apabila unit production dihilangkan maka derivasi akan lebih singkat dan parse tree akan
lebih pendek.
Variabel A membentuk unit pair (A,A).
Jika (A,A) adalah unit pair dan A B adalah production maka terbentuk unit pair (A,B).
Jika (A,B) adalah unit pair dan B C adalah production maka terbentuk unit pair (A,C).
Unit pair (X,Y) dan production Y membentuk production X
(E, E) dan E T membentuk unit pair (E, T)
(E, T) dan T T * F membentuk production E T * F
(E, T) dan T F membentuk unit pair (E, F)
(E, F) dan F (E) membentuk production E (E)
(E, F) dan F I membentuk unit pair (E, I)
(E, I) dan I a | b membentuk production E a | b
(T, T) dan T F membentuk unit pair (T, F)
(T, F) dan F (E) membentuk production T (E)
(T, F) dan F I membentuk unit pair (T, I)
(T, I) dan I a | b membentuk production T a | b
(F, F) dan F I membentuk unit pair (F,I)
(F, I) dan I a | b membentuk production F a | b

Hasil:
1. E E + T | T * F | ( E ) | a | b
2. T T * F | ( E ) | a | b
3. F ( E ) | a | b
4. I a | b
String b * (a + b) diperoleh dari derivasi:
E T * F b * F b * (E) b * (E + T)
b * (a + T) b * (a + b)

INSTITUT BISNIS dan INFORMATIKA INDONESIA

Penyederhanaan CFG (edisi 1) 6/8

Hilangkan unit production di bawah ini


1. S Aa | B
2. A a | bc | B
3. B A | bb
Contoh string yang dihasilkan:
1) S Aa Ba bba
production 1a, 2c, 3b
2) S B A bc
production 1b, 3a, 2b
Unit production:
SB
BA
AB
(S, S) dan S B membentuk unit pair (S, B)
(S, B) dan B bb membentuk production S bb
(S, B) dan B A membentuk unit pair (S, A)
(S, A) dan A a | bc membentuk production S a | bc
(B, B) dan B A membentuk unit pair (B. A)
(B, A) dan A a | bc membentuk production B a | bc
(A, A) dan A B membentuk unit pair (A, B)
(A, B) dan B bb membentuk production A bb
Jika dikumpulkan semua maka hasilnya
1. S Aa | a | bb | bc
2. A a | bb | bc
3. B a | bb | bc
Contoh string yang dihasilkan:
1) S Aa bba
production 1a, 2b
2) S bc
production 1c

Chomsky Normal Form


Kita telah melakukan penyederhaan production CFG dengan mengeliminasi simbol yang
tidak berguna, -production, dan unit production. Ketiga proses ini tidak menjamin
terbentuknya production yang seragam, misalnya bagian body tidak lebih dari dua simbol.
Chomsky Normal Form (CNF) adalah bentuk production
A BC
Aa

dengan A, B, dan C berjenis simbol non terminal dan a simbol terminal.


CFG yang tidak mengandung -production dapat diubah sehingga semua production-nya
berbentuk CNF, dengan cara:
1. apabila body mengandung simbol terminal dan panjang body lebih dari satu maka
gunakan variabel pembantu untuk menggantikan simbol terminal.
S aBcD diuraikan menjadi
S ABCD
Aa
Cc
2. uraikan body yang panjangnya tiga atau lebih menjadi sejumlah production yang
panjangnya masing-masing dua dengan bantuan variabel baru.
S ABCD diuraikan menjadi
S AE
E BF
F CD

INSTITUT BISNIS dan INFORMATIKA INDONESIA

Penyederhanaan CFG (edisi 1) 7/8

Ubah production berikut menjadi CNF


1. S ABa
2. A aab
3. B Ac
Ubah simbol terminal
1. S ABa menjadi
S ABC
(1a)
Ca
(1b)
2. A aab menjadi
A CCD
(2a)
Db
(2b)
3. B Ac menjadi
B AE
(3a)
Ec
(3b)
Ubah body yang panjang lebih dari dua
1a. S ABC menjadi
S AF
F BC
2a. A CCD menjadi
A CG
G CD
Hasil:
1. S AF
2. F BC
3. C a
4. A CG
5. G CD
6. D b
7. B AE
8. E c
Ubah production berikut menjadi CNF
1. E E + T | T * F | ( E ) | a | b
2. T T * F | ( E ) | a | b
3. F ( E ) | a | b
4. I a | b
Ubah simbol terminal
1a. E E + T menjadi
E EPT
(a)
P+
1b. E T * F menjadi
E TMF
(b)
M*
1c. E (E) menjadi
E LER
(c)
L(
R)
Ubah body yang panjangnya lebih dari dua
(a). E EPT menjadi
E EC1
C1 PT

INSTITUT BISNIS dan INFORMATIKA INDONESIA

Penyederhanaan CFG (edisi 1) 8/8


(b). E TMF menjadi
E TC2
C2 MF
(c). E LER menjadi
E LC3
C3 ER
Hasil:
1. E EC1 | TC2 | LC3 | a | b
2. T TC2 | LC3 | a | b
3. F LC3 | a | b
4. I a | b
5. P +
6. M *
7. L (
8. R )
9. C1 PT
10. C2 MF
11. C3 ER

Referensi
Hopcroft, E. John, Rajeev Motwani, Jeffrey D. Ullman, (2001), Introduction to Automata
Theory, Languages, and Computation, 2nd edition, Addison-Wesley
Linz, P., (1990), An Introduction to Formal Languages and Automata, D.C. Heath and
Co.
Martin, J. C. (1991), Introduction to Languages and the Theory of Computation,
McGraw-Hill

INSTITUT BISNIS dan INFORMATIKA INDONESIA

Anda mungkin juga menyukai