Anda di halaman 1dari 44

1

KONSEP BAHASA
Pengampu : Idhawati Hestiningsih

PENDAHULUAN
• Ilmu Komputer memiliki dua komponen utama :
1. Model dan gagasan mendasar mengenai komputer
2. Teknik rekayasa untuk perancangan sistem komputer meliputi perangkat keras (hardware)
dan perangkat lunak (software)
• Teori bahasa & otomata termasuk dalam bagian pertama dari 2 komponen utama Ilmu Komputer
diatas.
• Teori bahasa dan otomata diterapkan pada perancangan digital, pembuatan bahasa pemrograman,
dan kompilator

ABJAD, UNTAI (STRING), BAHASA


• Sebuah simbol adalah suatu entitas abstraks yang tidak kita definisikan secara formal
Contoh : huruf dan digit adalah simbol yang dipakai

• Abjad (alphabet) adalah sebuah himpunan berhingga tak kosong dari simbol – simbol
Notasi : Σ
Contoh :
- Abjad dalam bahasa Inggris terdiri dari 26 simbol :
Σ = {a,b,c,d, … z}
a ∈ Σ, artinya a adalah sebuah simbol di dalam Σ
- Σ = {1,2,3,4,5,6,7,8,9}
a∉Σ

Jika Σ1 dan Σ2 adalah abjad-abjad maka Σ1 ∪ Σ2, Σ1 – Σ2, dan Σ2 – Σ1 merupakan himpunan tidak
kosong (abjad)

• Untai / string / kata adalah sebuah barisan berhingga simbol-simbol dari suatu abjad.
Contoh :
Diketahui abjad Σ={a,b} maka untai atau string yang bisa terjadi a, ab, aa, bb, aaa, bbb, aaab, dst

Untai kosong adalah barisan yang kosong dari simbol-simbol, notasi = {ε}

• Bahasa (language) adalah suatu kumpulan dari untai-untai atau string, notasi = L
Contoh :

Diketahui :
∑= {1,2,3,4,…,5}
Kumpulan {1,12,123,1234,12345,112} adalah sebuah bahasa berdasarkan abjad yang terdiri dari
digit-digit itu.

Diketahui :
∑= {1}
Kumpulan {1,11,111,1111, ….} adalah sebuah bahasa

• Bahasa kosong (empty language) adalah sebuah bahasa yang tidak terdiri dari untai-untai.
Bahasa kosong berbeda dengan bahasa yang terdiri dari string/untai kosong.
Notasi = ∅

• Jika ∑ merupakan sebuah abjad maka ∑ juga sebuah bahasa yang terdiri atas semua untai simbol
tunggal.
Misal ∑ adalah sebuah abjad dan w adalah suatu untai berdasarkan ∑.
Jika L adalah suatu bahasa yang terdiri dari beberapa untai berdasarkan ∑ dan jika w adalah sebuah
untai di dalam L maka dapat ditulis :
w ∈ L, artinya w adalah elemen dari L
Contoh :
121 ∈ {1,12,121,1212,12121}
2
• Bahasa universal (universal language) dari ∑ adalah bahasa yang terdiri dari semua untai
berdasarkan suatu abjad ∑.
Notasi : ∑*
Contoh :
∑ = {1}, maka ∑* = {ε,1,11,111,1111, …}
Untuk abjad apa saja, ∑* bersifat tak berhingga karena abjad-abjadnya tidak kosong.

OPERASI – OPERASI PADA UNTAI


1. Panjang (length) dari untai
Notasi : |w|
Contoh :
∑ = {1,2}
w1 = 111 maka | w1| = 3
w2 = 121 maka | w2| = 3
w3 = 121212 maka |w3| = 6

2. Perangkaian (Concatenation)
Jika w dan z adalah untai-untai, perangkaian w dan z adalah untai yang diperoleh dengan
merekatkan untai z ke untai w
Contoh :
W = 112 dan z = 121212, maka perangkaian w dengan z adalah untai 112121212
w.z = wz = 112121212
w.ε = w = 112

3. Eksponensiasi (Exponentiation)
Misalkan w merupakan sebuah untai atau kata, maka :
⎧ε, jika n = 0
w"= ⎨ n -1
⎩ww , jika n > 0

wo = ε
w1 = 122
w2 = 122122
w3 = 122122122

OPERASI – OPERASI PADA BAHASA


1. Perangkaian (Concatenation)
Misal A dan B merupakan bahasa-bahasa berdasarkan abjad.
Perangkaian A dan B ditulis :
A . B = {w.x | w ∈ A dan x ∈ B}
Contoh :
A = {cat,dog} dan B {house}, maka
A . B = {cathouse, doghouse}
A.(ε) = (ε) . A = A

2. Eksponensiasi (Exponentiation)
Misalkan A merupakan suatu bahasa berdasarkan abjad ∑ :
⎧ε, jika n = 0
A" = ⎨ n-1
⎩AA , jika n > 0
Contoh :
Jika A = {ab} berdasarkan abjad Inggris tersebut didapatkan :
Ao = {ε}
A1 = A = {ab}
A2 = A.A1 = {abab}
A3 = A.A2 = {ababab}
3
3. Gabungan (Union)
Misalkan A dan B adalah bahasa-bahasa berdasarkan suatu abjad ∑, maka union dari A dan B
(A ∪ B) terdiri dari semua kata yang muncul sekurang-kurangnya sekali dalam A dan B.
A ∪ B = {x|x ∈ A atau x ∈ B}
4. Irisan (Intersection)
Misalkan A dan B adalah bahasa-bahasa berdasarkan suatu abjad ∑, maka intersection dari A dan B
(A ∩ B) terdiri dari untai-untai yang muncul baik di A maupun di B sekaligus.
A ∩ B = {x|x ∈ A dan x ∈ B}

Contoh :
∑ = {0,1}
Bahasa-bahasa A = {ε,0,1,10,11} dan B = {ε,1,0110,11010}, maka
A ∪ B = {ε,0,1,10,11,0110,11010}
A ∩ B = {ε,1}

5. Sub Bahasa
Misalkan A dan B adalah bahasa-bahasa berdasarkan suatu abjad ∑ dan jika semua untai di A juga
merupakan untai di B, maka A disebut sebuah sub bahasa dari B.
Notasi A ⊆ B

Contoh :
Jika A = {a,aa,aaa} dan B = {a,aa,aaa,aaaa,aaaaa}, maka A ⊆ B

6. Equal (Sama)
Dua buah bahasa A dan B dikatakan sama jika kedua bahasa tersebut secara persis mempunyai
untai-untai yang sama, artinya jika sebagai himpunan-himpunan keduanya persis sama.
Notasi : A = B

7. Star Closure dan Plus Closure


Jika A adalah sebuah bahasa berdasarkan suatu abjad ∑, didefinisikan :
• Star Closure dari A* :

A* = U An
n =0

• Plus Closure dari A+ :



A+ = U An
n =1

Contoh :
Ao = {ε}
A1 = {a}
A2 = {a2}={aa}
A2 = {a3}= {aaa}
dan seterusnya ……

Jadi

A* = U An = A0 ∪ A1 ∪ A2 ∪ ….
n =0 = {ε} ∪ {a} ∪ {aa} ∪ …
= {ε, a, aa, …}
∞ = A1 ∪ A2 ∪ A3 ∪ ….
+
A = UA n
= {a} ∪ {aa} ∪ {aaa} ∪ …
n =1
= {a, aa, aaa, …}
4
II. OTOMATA

• Suatu bentuk (model matematika) yang memiliki fungsi-fungsi daari komputer digital yaitu
menerima input, menghasilkan output, bisa memiliki penyimpanan sementara dan mampu membuat
keputusan dalam mentransformasikan input ke output.
• Otomata merupakan suatu sistem yang terdiri atas sejumlah berhingga state, dimana state
menyatakan informasi mengenai input yang lalu, dan dapat pula dianggap sebagai memori mesin.
• Input pada mesin otomata dianggap sebagai bahasa yang harus dikenali oleh mesin. Selanjutnya
mesin otomata membuat keputusan yang mengindikasikan apakah input ini diterima atau tidak,
sehingga mesin otomata dapat dipakai untuk menghasilkan bahasa yang aturannya ditentukan oleh
bahasa tersebut.

Contoh : Sebuah mesin otomata sederhana

a d a
q0 q1 q2 q3
u
d
q4
q5

Bila mesin mendapat untai / string input :


ada Æ diterima
adu Æ diterima
add Æ ditolak

• Sebuah string input diterima bila mencapai state akhir(final state) yang digambarkan dengan
lingkaran ganda
• Mesin diatas memiliki 6 state yaitu {q0,q1,q2,q3,q4,q5}
State awal = q0
State akhir = {q3,q4}
Himpunan untai input = {a,d,u}

VENDING MACHINE
5

q5 q10
5 5

q0 10 10
q15
10
10
25
5
q25 q20
5

Misalkan Vending Machine akan mengeluarkan sebatang coklat yang berharga Rp. 25,-
ƒ Masukan dari mesin berupa himpunan uang logam (koin) yaitu {koin Rp. 5, koin Rp. 10,-, koin
Rp. 25,-}
ƒ Keluaran dari mesin yaitu suatu tanda bahwa sebatang coklat dikeluarkan dari vending machine
jika masukan dapat diterima mesin yaitu uang sejumlah Rp. 25,-
ƒ Model mesin diatas dapat menerima sejumlah berhingga barisan-barisan seharga 25 yaitu {(25),
(10,5,10), (10,10,5), (5,10,10), (10,5,5,5), (5,5,5,10), (5,5,5,5,5)}
5
FINITE STATE AUTOMATA (FSA)

• Finite State Automata (Otomata dengan state berhingga) merupakan suatu model matematika dari
suatu sistem yang menerima input dan menghasilkan output
• Memiliki state yang banyaknya berhingga dan dapat berpindah-pindah dari suatu state ke state lain
• Perubahan state ini dinyatakan dengan fungsi transisi
• FSA tidak memiliki tempat penyimpanan sehingga kemampuan mengingatnya terbatas.

Contoh : vending machine, pengecek pariti ganjil

0 0

1
Even/ Odd/
Genap Ganjil

1
Keterangan :
- Lingkaran menyatakan state/kedudukan
- Label pada lingkaran adalah nama state tersebut
- Busur menyatakan transisi yaitu perpindahan kedudukan/state
- Lingkaran didahului sebuah busur tanpa label menyatakan state awal
- Lingkaran ganda menyatakan state akhir/final

• Secara formal FSA dinyatakan dengan 5 tupel atau M = (Q,∑,δ,S,F) dimana :


Q = himpunan state/kedudukan
∑ = abjad,himpunan simbol input/masukan
δ = fungsi transisi
S = state awal / kedudukan awal, S∈ Q
F = himpunan state akhir, F ⊆ Q

• Dari gambar diatas maka :


Q = {Even, Odd}
∑ = {0,1}
S = Even
F = Odd
δ = fungsi transisi
δ (Even,0) = Even
δ (Even,1) = Odd
δ (Odd,0) = Odd
δ (Odd,1) = Even
Maka tabel fungsi transmisi pengecek pariti ganjil :

δ 0 1
Even Even Odd
Odd Odd Even

Karena mesin diatas merupakan pengecek pariti ganjil, maka himpunan state akhir yang
menyatakan input diterima oleh mesin adalah {Odd}

- Jika mesin mendapat input 1101 urutan state menjadi :


Even 1 Odd 1 Even 0 Even 1 Odd, maka diterima oleh mesin
4. Jika mesin mendapat input 101 urutan state menjadi :
Even 1 Odd 0 Odd 1 Even, maka ditolak oleh mesin

• FSA dibagi 2 yaitu :


1. DFA (Deterministic Finite Automata) = otomata berhingga yang pasti (tetap/tertentu)
2. NDFA (Non-Deterministic Finite Automata) = otomata berhingga yang tidak pasti
6
DFA (DETERMINISTIC FINITE AUTOMATA)
= dari suatu state ada tepat satu state berikutnya untuk setiap simbol masukan yang diterima

Mesin DFA
a a
b

b b
q0 q1 q2

Konfigurasi DFA diatas secara formal dinyatakan :


Q = {q0,q1,q2}
∑ = {a,b}
S = q0
F = {q2}

Fungsi transisi :
δ (q0,a) = q0
δ a b
δ (q0,b) = q1
q0 q0 q1
δ (q1,a) = q1
q1 q1 q2
δ (q1,b) = q2 q2 q1 q2
δ (q2,a) = q1
δ (q2,b) = q2

Keterangan :
Untuk sebuah state dan input yang berlaku bisa ditentukan tepat satu state berikutnya.
Suatu string x dinyatakan diterima bila δ(S,x) berada pad state akhir. Dengan kata lain secara formal
bila M adalah sebuah bahasa FSA, M= (Q, ∑, δ, S, F) menerima bahasa yang disebut L(M) yang
merupakan himpunan {x | δ (S,x) di dalam F}.

Contoh :
ƒ Bila diinputkan string ‘abb’ pada mesin tersebut maka :
δ (q0,abb) = δ (q0,bb) = δ (q1,b) = q2
Karena q2 merupakan state terakhir maka ‘abb’ berada dalam L(M)

ƒ Bila diinputkan string ‘baba’ pada mesin tersebut maka :


δ (q0,baba) = δ (q1,aba) = δ (q1,ba) = δ (q2,a) = q1
Karena q1 tidak termasuk state terakhir maka ‘baba’ tidak berada dalam L(M)

Contoh soal :
1. Diberikan mesin DFA sebagai berikut :
a

a,b
q0 q1
b

Q = {q0,q1}
∑ = {a,b}
S = q0
F = {q1}

Buat tabel transisi dari mesin DFA diatas.

Penyelesaian :

δ a b
q0 q1 q1
q1 q1 q0
7
2. Diberikan tabel transisi seperti berikut ini :

δ a b
q0 q0 q1
q1 q0 q0

Dengan S = q0
F = {q1}
Buat mesin DFA-nya

Penyelesaian :
a

b
q0 q1
a,b

NDFA (NON DETERMINISTIC FINITE AUTOMATA)


• Untuk setiap state tidak selalu tepat ada satu state berikutnya untuk setiap simbol input yang ada
• Dari suatu state bisa terdapat 0,1 atau lebih busur keluar (transisi) berlabel simbol input yang sama
• Perbedaan DFA dan NDFA ada pada fungsi transisinya
DFA Æ setiap rancangan state input selalu tepat ada satu state berikutnya
NFA Æ untuk setiap pasangan state input, bisa memiliki 0 (nol) atau lebih pilihan untuk state
berikutnya
Contoh : a

a
δ a b
q0 q1 q0 {q1} ∅
b q1 {q1} {q0}

b
a
δ a b
q0
a q0 {q1,q2} {q0}
q1
b
q1 {q1} {q0}
q2 {q2} {q1}
a b

q2
a

δ a b
a q0 {q0,q1} {q1}
a,b
q1 {q1} {q1}
a,b
q0 q1

a δ a b
q0 q1 q0 {q1} {q0}
q1 {q0} ∅
a
8
Keterangan :
ƒ Suatu string diterima oleh DFA bila terdapat suatu urutan transisi sehubungan dengan input
string tersebut dari state awal sampai dengan state akhir.
ƒ Untuk NFA harus dicoba semua kemungkinan yang ada sampai terdapat satu yang
mencapai state akhir.
ƒ Suatu string x dinyatakan diterima oleh bahasa NFA, M= (Q, ∑, δ, S, F) bila
{x | δ (S,x) memuat sebuah state di dalam F}

SOAL

1. Gambarlah diagram transisi untuk NFA berikut ini :


Q = {q0,q1,q2,q3,q4}
∑ = {0,1}
S = q0
F = {q2 ,q4}

Fungsi transisi dari NFA tersebut :

δ 0 1
q0 {q0,q3} {q0,q1}
q1 ∅ {q2}
q2 {q2} {q2}
q3 {q4} ∅
q4 {q4} {q4}

2. Bila L (M) adalah bahasa yang diterima oleh NFA diatas tentukan apakah string-string berikut
termasuk dalam L (M)

a. 001
b. 10010
c. 111000

PENYELESAIAN

1. 0,1
0,1

0 0
q0 q3 q4

q1

q2

0,1
9
2. a. String untai 001
δ (q0,001) = δ (δ (q0, 0), 01)
= δ ({q0, q3}, 01)
= δ (δ (q0, 0) ∪ δ (q3, 0), 1)
= δ ({q0, q3} ∪ {q4}, 1)
= δ ({q0, q3, q4},1)
= δ (q0,1) ∪ δ (q3,1) ∪ δ (q4,1)
= {q0, q1} ∪ ∅ ∪ {q4}
= {q0, q1, q4}

String 001 diterima oleh NFA karena δ (q0, 001) memuat sebuah state di dalam F yaitu {q4}
10
BAHASA – BAHASA REGULER DAN EKSPRESI-EKSPRESI REGULER

1. Bahasa – Bahasa Reguler


Misalkan ∑ merupakan sebuah abjad. Koleksi dari bahasa-bahasa reguler atau ∑ didefinisikan
sebagai berikut :
a. ∅ adalah sebuah bahasa reguler
b. {ε} adalah sebuah bahasa reguler
c. Untuk setiap a ∈ ∑, {a} adalah sebuah bahasa reguler
d. Jika A dan B adalah sebuah bahasa reguler maka A ∪ B, A . B, dan A* adalah sebuah
bahasa reguler

Contoh :
Misal Σ = {a,b} maka ∅ dan {ε} adalah bahasa – bahasa reguler.
{a} dan {b} adalah bahasa – bahasa reguler
{a,b} adalah bahasa reguler yang merupakan gabungan dari {a} dan {b}
{a,ab,b} adalah bahasa reguler

2. Ekspresi Reguler
Ekspresi reguler merupakan penyederhanaan dari bahasa – bahasa reguler

Bahasa Reguler Ekspresi Reguler


{a} a
{b} b
{ab} ab
{a,b} = {a}∪ {b} a∪b
{a}* a*
{a}+ a+
∅ ∅
{ε} ε

Teorema
Misalkan r,s, dan t merupakan ekspresi – ekspresi reguler atas Σ abjad yang sama, maka :
a) r ∪ s = s ∪ r
b) r ∪ ∅ = r = ∅ ∪ r
c) r ∪ r = r
d) (r ∪ s) ∪ t = r ∪ (s ∪ t)
e) r ε = εr = r
f) (rs)t = r(st)
g) r∅ = ∅r = ∅
h) r (s ∪ t) = rs ∪ rt dan (r ∪ s) t = rt ∪ st
i) r* = r** = r* r* = (ε ∪ r)* = r*(r ∪ ε) = (r ∪ ε) r* = ε ∪ r r*

Arti dan Notasi Ekspresi Reguler

Notasi *, +, + atau ∪, ⋅

Arti :
ƒ * yaitu karakter asterik (penutup bintang atau star closure) artinya bisa tidak muncul, bisa juga
muncul berhingga kali (0 s/d n).
+
ƒ yaitu penutup plus atau plus closure artinya minimal muncul satu kali (1 s/d n)
ƒ + atau ∪ yaitu union atau gabungan
ƒ ⋅ berarti concatenation (perangkaian), biasanya bisa dihilangkan, misal a . b bisa ditulis ab.
11
Contoh Ekspresi Reguler (ER)

ƒ ER = 010*
String yang dibangkitkan / muncul = 01, 010, 0100, 01000 (jumlah nol di ujung kanan bisa
tidak muncul, bisa juga muncul berhingga kali)

ƒ ER = ab*cc
String yang dibangkitkan / muncul : abcc, acc, abbcc (b bisa tidak muncul atau muncul
berhingga kali)

ƒ ER = a*d
String yang dibangkitkan / muncul = d, ad, aad, aaad

ƒ ER = a+d
String yang dibangkitkan / muncul = ad, aad, aaad

ƒ ER = a*∪ b* (∪ berarti atau)


String yang dibangkitkan / muncul = ε, a, b, aa, bb, aaa, bbb

ƒ ER = a ∪ b
String yang dibangkitkan / muncul = a, b

ƒ ER = (a ∪ b)*
String yang dibangkitkan / muncul = ε, a, b, aa, bb, aaa, bbb, ab, abb, aab, ba

ƒ ER = 01* + 0 atau 01* ∪ 0


String yang dibangkitkan / muncul = 0, 01, 011, 0111

Hubungan ER dan FSA

1. q0
a
q1 b
q2

NFA dengan ER : ab

2.
b
q0 q1

NFA dengan ER : a*b

5. a atau a,b
q0 q1 q0 q1
b

NFA dengan ER : a ∪ b

4.
a
q0 q1

q1

NFA dengan ER : a ∪ b
12
0
5.
0 1
q0 q1 q2

NFA dengan ER : 010*

6. 0 0,1
q0 q1 q2

NFA dengan ER : 0 (0∪1)

0,1

7. 0
q0 q1

NFA dengan ER : 0 (1∪ 0)*

8. 0 0
q0 q1 q2

NFA dengan ER : 01*0


13
EKUIVALENSI FINITE AUTOMATA

• Finite Automata dikatakan ekuivalen apabila menerima bahasa yang sama.


• Dari sebuah mesin NFA dapat dibuat mesin DFA yang ekuivalen yaitu mampu menerima bahasa
yang sama.

Contoh : DFA 0,1 NFA


0,1

0 0
q0 q1 q0 q1
0,1

1
q2

Kedua mesin diatas bisa menerima bahasa yang sama, yaitu dalam ekspresi regular 0 (0 ∪ 1)*

Konstruksi mesin DFA dari NFA :

NFA
0 1 Q = {q0,q1}
∑ = {0,1}
S = q0
0,1
q0 q1 F = {q1}
1

Tabel fungsi transisi dari NFA tersebut :

δ 0 1
q0 {q0,q1} {q1}
q1 ∅ {q0,q1}

• Langkah selanjutnya membuat state-state baru dengan mengikuti transisi yang ada.
• Dimulai dari q0 yang memperoleh input 0 dan 1

{q0} 1 {q1}

0
{q0,q1}

• Kemudian dilanjutkan dari q1 bila memperoleh input 0 dan 1


0
{q0} 1 {q1} ∅

0
{q0,q1}
14
• Telusuri juga state-state baru yang terbentuk

δ ({q0, q1}, 0) = δ (δ (q0, 0) ∪ δ (q1, 0))


= {q0, q1} ∪ ∅
= {q0, q1}

δ ({q0, q1}, 1) = δ (δ (q0, 1) ∪ δ (q1, 1))


= {q1} ∪ {q0, q1}
= {q0, q1}

0
{q0} 1 {q1} ∅

0
{q0,q1}
0,1

δ (∅, 0) = ∅
δ (∅, 1) = ∅

DFA yang terbentuk 0,1

0
{q0} 1 {q1} ∅

0
{q0,q1}
0,1

• Menentukan state akhir dari DFA


Karena himpunan state akhir pada NFA adalah {q1} maka state akhir pada DFA yang baru
terbentuk adalah semua state yang mengandung {q1}
0,1

0
{q0} 1 {q1} ∅

0
{q0,q1}
0,1

• Selanjutnya DFA bisa dikonstruksikan seperti berikut :


15

0,1

0
q0 1 q1 q3

0
q2
0,1

Q = {q0, q1 ,q2 ,q3}


∑ = {0,1}
S = q0
F = {q1, q2}

Fungsi transisi mesin DFA

δ 0 1
q0 q2 q1
q1 q3 q2
q2 q2 q2
q3 q3 q3

Bukti ekuivalen : string 001 diterima di mesin NFA dan mesin DFA diatas
16
ATURAN PRODUKSI UNTUK SUATU FINITE STATE AUTOMATA

ATURAN PRODUKSI BAHASA REGULER


• Sebuah automata berhingga menspesifikasikan sebuah bahasa sebagai himpunan semua untai yang
menggerakkan dari state awal ke salah satu state yang diterimanya (himpunan state akhir)
• FSA berikut menerima ekspresi regular :
a (a*∪b*)b
a

q2
ε b

q0 a
q1 q4

ε b
q3

Gambar 1
b

• Selain dengan ekspresi reguler, dapat dikonstruksi aturan-aturan produksi untuk suatu tata bahasa
reguler.
• Aturan produksi untuk bahasa reguler
αÆ β dibaca α menghasilkan β

α : simbol variabel
β : maksimal memiliki sebuah simbol variabel yang terletak di paling kanan bila ada.

α atau β bisa berupa simbol terminal atau simbol nonterminal/variabel.

Simbol variabel/nonterminal : simbol yang masih bisa diturunkan, biasanya dinyatakan huruf besar,
misal A,B,C
Simbol terminal : simbol yang sudah tidak bisa diturunkan lagi, biasanya dinyatakan dengan
huruf kecil, misal a,b,c

• Suatu tata bahasa (grammar) didefinisikan dengan 4 tupel yaitu G = V, T, P, S dimana :


V = himpunan simbol variabel non terminal
T = himpunan simbol terminal
P = kumpulan aturan produksi
S = simbol awal

MENGKONSTRUKSI ATURAN PRODUKSI DARI SUATU FINITE AUTOMATA


• Dalam mengkontruksi aturan produksi tata bahasa reguler dari suatu finite state automata, yang
perlu diperhatikan adalah state-state yang menjadi state akhir
• Mesin FSA diatas memiliki simbol input ‘a’ dan ‘b’, simbol a dan b akan menjadi simbol terminal
pada aturan produksi yang akan dibentuk
• Misal ditentukan simbol awal S.
Identikkan S dengan state awal qo.
Dari qo mendapat input a menjadi q1
Aturan produksi ditulis : S Æ Ae
Dimana E diidentikkan dengan q1
Dari q1 mendapat transisi ε (tanpa menerima input) ke q2 dan q3.
Aturan produksi ditulis : E Æ A dimana A diidentikan dengan q2
EÆB dimana B diidentikan dengan q3
17
Dari q2 mendapat input a tetap ke q2 dan dari q3 mendapat input b tetap ke q3
Aturan produksi ditulis : A Æ Aa
B Æ Bb

Selanjutnya dari q2 mendapat input b ke q4 dan dari q3 mendapat input b ke q4, sedangkan q4
merupakan state akhir dan dari q4 tidak ada lagibusur keluar
Aturan produksi ditulis : A Æ b
BÆ b

Jadi secara keseluruhan aturan produksi untuk mesin FSA diatas ditulis seperti berikut :
S Æ Ae
EÆA|B
A Æ Aa | b
B Æ Bb | b

Tanda ‘ | ’ berarti atau

Secara formal tata bahasa yang diperoleh dari mesin FSA diatas adalah :
V = {S,E,A,B}
T = {a,b}
P = {S Æ Ae, E Æ A | B, A Æ Aa | b, B Æ Bb | b}

• Misal a

a b
q0 q1 q2
b
b q3

q4 b

b
Gambar 2
q5 a q6

Dari mesin diatas dapat dikonstruksi aturan produksi :


T = {a,b}
S=S

S Æ Aa | Bb identikkan S untuk q0, A untuk q1, B untuk q4


A Æ Bc identikkan C untuk q2
C Æ As dari q2 mendapat input a ke q0
dari q3 tidak ada transisi keluar dan bukan state akhir maka transisi ke q3
diabaikan / tidak ditulis
B Æ Bd identikan D untuk q5
D Æ Bs dari q5 mendapat input b ke q0
dari q6 tidak ada transisi keluar dan bukan state akhir maka transisi ke q6
diabaikan / tidak ditulis

Pada mesin ini q0 sebagai state akhir memiliki transisi-transisi keluar, maka untuk menandakannya
sebagai state akhir aturan produksi ditulis :

SÆε Anda bedakan mesin ini dengan mesin gambar 1 dimana q4 sebagai state akhir tidak
memiliki transisi keluar

Jadi secara formal tata bahasa yang diperoleh dari mesin FSA diatas adalah :
V = {S,A,B,C,D}
18
T = {a,b}
P = {S Æ Aa | Bb | ε, AÆ Bc, B Æ Bd, C Æ As, D Æ Bs}

Aturan produksi diatas bisa disederhanakan sehingga merduksi jumlah simbol variabel yang
diperlukan menjadi :

P = {S Æ Aa | Bb | ε, AÆ baS, B Æ bbS}

FSA UNTUK SUATU TATA BAHASA REGULER


• Misal tata bahasa reguler dengan aturan produksi :
S Æ Ab | Ba | ε
A Æ abaS
B Æ babS

b
a b a q3
q0 q1 q2

q4 a

a
Gambar 3
q5 b q6

Pada gambar 3 :
S berkorelasi dengan q0, A dengan q4, B dengan q1
S Æ ε menandakan q0 termasuk state akhir

• Contoh lain, misal tata bahasa reguler dengan aturan produksi :


S Æ abA | B | baB | ε
A Æ Bs | b
B Æ As

S berkorelasi dengan q0, A dengan q2, B dengan q4


S Æ ε menandakan q0 termasuk state akhir
Dari S Æ B maka dibuat transisi ε dari q0 ke q4
Dari A Æ b ditentukan state q3 termasuk state akhir

a b b q3
q0 q1 q2

ε
a

q4 b Gambar 4

q5
19
• Contoh lain, misal tata bahasa reguler dengan aturan produksi :
S Æ As | Bb | b
B Æ Cc
C Æ As

S berkorelasi dengan q0, B dengan q1, C dengan q2


S Æ b maka dibuat state akhir q3

b c
q0 q1 q2

b a

q3 Gambar 5
20
POHON PENURUNAN

1. CONTEXT FREE GRAMMAR (CFG)


• Pada tata bahasa bebas konteks / Context Free Grammar (CFG) tidak terdapat pembatasan hasil
produksinya. Beda halnya dengan tata bahasa reguler yang ada pembatasan pada ruas kanan
atau hasil produksinya.
• Contoh aturan produksi yang termasuk tata bahasa reguler :
S Æ abA | baB
A Æ Bs
B Æ As
Bagian yang belum terturunkan selalu terjadi pada ujung.

• Contoh aturan produksi yang termasuk CFG :


B Æ CdeFg
C Æ BcDe
Bagian yang belum terturunkan bisa terjadi dimana saja.

• CFG merupakan suatu cara yang menunjukkan bagaimana menghasilkan untai-untai dalam
sebuah bahasa
• CFG menjadi dasar dalam pembentukan suatu parser (proses analisis sintaksis) dimana bagian
sintaks dalam suatu kompilator kebanyakan didefinisikan dalam CFG

2. PARSING
• Pohon penurunan (derivation tree / parse tree) berguna untuk menggambarkan bagaimana
memperoleh suatu string (untai) dengan cara menurunkan simbol-simbol variabel menjadi
simbol-simbol terminal
• Setiap simbol variabel akan diturunkan menjadi terminal, sampai tidak ada yang belum
tergantikan.
• Misal terdapat CFG dengan aturan produksi (dengan simbol awal S) :
S Æ AB
A Æ Aa | a
B Æ Bb | b

Akan digambarkan pohon penurunan untuk memperoleh untai ‘aabbb’.


Pada pohon tersebut simbol awal S akan menjadi akar (root).
Setiap kali penurunan dipilih aturan produksi yang menuju ke solusi.
Simbol-simbol variabel akan menjadi simpul-simpul yang mempunyai anak.
Simpul-simpul yang tidak mempunyai anak akan menjadi simbol terminal, seperti gambar
berikut : S

A B

a A b B

a b B

• Proses penurunan / parsing dapat dilakukan dengan 2 cara :


- Penurunan terkiri (leftmost derivation)
Simbol variabel terkiri yang diperluas terlebih dulu
- Penurunan terkanan (rightmost derivation)
Simbol variabel terkanan yang diperluas terlebih dulu
21
• Contoh :
Diberikan CFG : (‘Æ’ dibaca ‘menurunkan’)
S Æ Aas | a
A Æ SbA | ba

Untuk memperoleh untai ‘aabbaa’ dari CFG :


- Penurunan terkiri (leftmost derivation)
S Æ Aas Æ aSbAS Æ aabAS Æ aabbaS Æ aabbaa

- Penurunan terkanan (rightmost derivation)


Simbol variabel terkanan yang diperluas terlebih dulu
S Æ Aas Æ aAa Æ aSbAa Æ aSbbaa Æ aabbaa
Proses penurunannya berbeda tetapi akan diperoleh pohon yang sama :
S

a A S

S b A a

a b a

• Biasanya persoalan yang berkaitan dengan pohon penurunan adalah mencari penurunan yang
hasilnya menuju kepada suatu untai yang ditentukan yang dalam hal ini perlu dilakukan
percobaan pemilihan aturan produksi yang bisa menuju ke solusi

• Contoh : CFG

S Æ Ab | Ba
A Æ a | As | Baa
B Æ b | Bs | Abb

Berikut pohon penurunan untuk memperoleh string ‘aaabbabbba’


S

a B

a B B

a B B b S

b b S b A

a B a

3. AMBIGUITAS (Kedwiartian)
• Ambiguitas terjadi bila terdapat lebih dari satu pohon penurunan yang berbeda untuk
memperoleh suatu untai
• Misal terdapat CFG :
SÆA|B
AÆa
BÆa
22
Untuk memperoleh untai ‘a’ bisa dengan 2 penurunan, yaitu :
- SÆAÆa
- SÆBÆa

• Misal : CFG
S Æ SbS | ScS |a

Untuk memperoleh untai ‘abaca’ bisa dengan 2 cara, yaitu :


- S Æ SbS Æ SbScS Æ SbSca Æ Sbaca Æ abaca
S

S b S

a S S c S

a a

- S Æ ScS Æ SbScS Æ abScS Æ abacS Æ abaca

S c S

S b S a

a a
23

PENYEDERHANAAN CFG

1. TUJUAN PENYEDERHANAAN
• Melakukan pembatasan sehingga tidak menghasilkan pohon penurunan yang memiliki
kerumitan yang tidak perlu atau aturan produksi yang tidak berarti.
• Contoh :
S Æ AB | a
AÆa
Kelemahan CFG diatas, aturan produksi S Æ AB tidak berarti karena B tidak memiliki
penurunan.

Untuk CFG berikut :


SÆ A
AÆB
BÆC
CÆD
DÆa|A
Memiliki kelemahan terlalu panjang jalannya padahal berujung pada S Æ a, produksi D Æ A
juga menyebabkan kerumitan.

• Suatu CFG dapat disederhanakan dengan melakukan :


1. Penghilangan produksi useless (tidak berguna)
2. Penghilangan produksi unit
3. Penghilangan produksi ε

2. PENGHILANGAN PRODUKSI USELESS


• Produksi useless didefinisikan sebagai :
- Produksi yang memuat simbol variabel yang tidak memiliki penurunan yang akan
menghasilkan terminal-terminal seluruhnya (disebut ‘menuju terminal’). Produksi ini tidak
berguna karena bila diturunkan tidak akan pernah selesai masih ada simbol variabel yang
tersisa.
- Produksi yang tidak akan pernah dicapai dengan penurunan apapun dari simbol awal
sehingga produksi itu redundance (berlebih)

• Contoh terdapat CFG :


S Æ aSa | Abd | Bde
A Æ Ada
B Æ BBB | a

Maka :
1. Simbol variabel A tidak memiliki penurunan yang menuju terminal, sehingga bisa
dihilangkan
2. Konsekuensi no. (1), aturan produksi S Æ Abd tidak memiliki penurunan maka CFG setelah
disederhanakan menjadi :
S Æ aSa | Bde
B Æ BBB | a

• Contoh terdapat CFG :


S Æ Aa | B
A Æ ab | D
BÆb|E
C Æ bb
E Æ aEa
Maka :
1. Pada aturan produksi A Æ D, simbol variabel D tidak memiliki penurunan
2. Pada aturan produksi C Æ bb, bila dicoba melakukan penurunan dari simbol awal S tidak
akan pernah mencapai C.
3. Simbol variabel E tidak memiliki aturan produksi yang menuju terminal
24
4. Konsekuensi no (3) aturan produksi B Æ E, simbol variabel E tidak memiliki penurunan
Sehingga dari CFG diatas, produksi yang useless :
AÆD
C Æ bb
E Æ aEa
BÆE

Maka CFG setelah disederhanakan menjadi :


S Æ Aa | B
A Æ ab
BÆb

• Contoh CFG :
S Æ aAb | Ceb
A Æ Dbe | eeC
B Æ ff
C Æ ae
DÆh
Maka :
1. Pada aturan produksi S Æ Ceb, A Æ Dbe (E tidak memiliki penurunan)
2. Aturan produksi D Æ h redundan

Sehingga :
S Æ aAb
A Æ eeC
B Æ ff
C Æ ae

Dari sisa CFG diatas B Æ ff juga redundan, sehingga hasil penyederhanaan menjadi :
S Æ aAb
A Æ eeC
C Æ ae

• Contoh CFG :
S Æ Ab
A Æ bcD | Dac
B Æ e | Ab
C Æ bCb | adF | ab
F Æ Cfb
Maka :
1. Pada aturan produksi A Æ bcD, variabel D tidak memiliki penurunan
2. Konsekuensi no (1), simbol variabel A tidak memiliki penurunan yang menuju terminal
sehingga tersisa hanya A Æ Dac
3. Konsekuensi no (2), B Æ Ab tidak memiliki penurunan
4. Simbol variabel F tidak memiliki penurunan yang menuju terminal
5. Konsekuensi no (4), C Æ adF tidak memiliki penurunan

Setelah disederhanakan menjadi :


S Æ Ab
BÆe

• Contoh CFG :
S Æ Abd
B Æ Cd | Ab
D Æ ef
A Æ Ed
F Æ dc
Maka :
1. Pada aturan produksi A Æ Ed, E tidak memiliki penurunan
2. Pada aturan produksi F Æ dc, redundan
25

Sehingga :
S Æ Abd
B Æ Cd | Ab
D Æ ef

Dari sisa CFG diatas maka pada aturan produksi B Æ Ab, A tidak mempunyai penurunan,
sehingga aturan produksi setelah disederhanakan :
S Æ Abd
B Æ Cd
D Æ ef

• Contoh CFG :
S Æ Abc | ab
AÆ AAA | ε

Maka :
S Æ Abc | ab
AÆ AAA | ε

Hasil tetap karena A Æ ε diperhitungkan.

• Prinsipnya setiap kali melakukan penyederhanaan, periksa lagi aturan produksi yang tersisa,
apakah semua produksi yang useless sudah dihilangkan.

2. PENGHILANGAN PRODUKSI UNIT


• Produksi unit adalah produksi dimana ruas kiri dan kanan aturan produksi hanya berupa satu
simbol variabel, misalkan A Æ B, C Æ D
• Keberadaan produksi unit membuat tata bahasa memiliki kerumitan yang tidak perlu atau
menambah panjang penurunan.
• Penyederhanaan ini dilakukan dengan melakukan penggantian aturan produksi unit
• Contoh CFG :
S Æ Sb
SÆC
CÆD
C Æ ef
D Æ dd

Lakukan penggantian berturutan mulai dari aturan produksi yang oaling dekat menuju ke
penurunan terminal.
C Æ D menjadi C Æ dd
S Æ C menjadi S Æ dd | ef

Sehingga aturan produksi setelah penyederhanaan :


S Æ Sb
S Æ dd | ef
C Æ dd
C Æ ef
D Æ dd

• Contoh CFG
SÆA
S Æ Aa
AÆB
BÆC
BÆb
CÆD
C Æ ab
DÆb
26

Penggantian yang dilakukan :


C Æ D menjadi C Æ b
B Æ C menjadi B Æ b | ab karena B Æ b sudah ada maka cukup tulis B Æ ab
A Æ B menjadi A Æ ab | b
S Æ A menjadi S Æ ab | b

Sehingga aturan produksi setelah penyederhanaan :


S Æ ab | b
S Æ Aa
A Æ ab | b
B Æ ab
BÆb
CÆb
C Æ ab
DÆb

• Contoh CFG
S Æ Cba | D
A Æ bbC
B Æ Sc | ddd
C Æ Ea | f | C
D Æ E | SABC
E Æ gh

Penggantian yang dilakukan :


D Æ E menjadi D Æ gh
C Æ C dihapus
S Æ D menjadi S Æ gh | SABC

Sehingga aturan produksi setelah penyederhanaan :


S Æ Cba | gh | SABC
A Æ bbC
B Æ Sc | ddd
C Æ Ea | f
D Æ gh | SABC
E Æ gh

3. PENGHILANGAN PRODUKSI ε
• Produksi ε adalah produksi dalam bentuk α Æ ε atau bisa dianggap sebagai produksi kosong
(empty).
• Penghilangan ε dilakukan dengan penggantian produksi yang memuat variabel yang bisa
menuju produksi ε atau disebut nullable.
• Contoh :
S Æ bcAd
AÆε

Pada kasus diatas A nullable, serta A Æ ε satu-satunya produksi dari A, maka variabel A bisa
ditiadakan . Hasil penyederhanaan CFG menjadi :
S Æ bcd

Tetapi bila kasusnya :


S Æ bcAd
A Æ bd | ε
Pada kasus diatas A nullable tapi A Æ ε bukan satu-satunya produksi dari A, maka hasil
penyederhanaan :
S Æ bcAd | bcd
A Æ bd
27

• Contoh CFG :
S Æ Ab | Cd
AÆd
CÆε
Variabel yang nullable adalah variabel C. Karena penurunan C Æ ε merupakan penurunan satu-
satunya dari C, maka produksi C Æ ε dihapus dan S Æ Cd menjadi S Æ d.
Hasil penyederhanaan CFG :
S Æ Ab | d
AÆd

• Contoh CFG :
S Æ Da | Bd
A Æ bc
AÆε
BÆC

Variabel yang nullable adalah variabel A.


A Æ ε bukan penurunan satu-satunya dari A (terdapat A Æ bc), maka
S Æ Da menjadi S Æ Da | d dan A Æ ε dihapus.
Setelah penyederhanaan :
S Æ Da | d | Bd
A Æ bc
BÆc

• Contoh CFG :
S Æ AaCD
A Æ CD | AB
BÆb|ε
CÆd|ε
DÆε

Variabel yang nullable adalah variabel B,C,D.


Dari A Æ CD, D hanya memiliki penurunan D Æ ε,maka D Æ ε dihapus sehingga
S Æ AaCD menjadi S Æ AaC
A Æ CD menjadi A Æ C

Variabel B dan C memiliki penurunan ε meskipun bukan satu-satunya penurunan maka


dilakukan penggantian :
A Æ AB menjadi A Æ AB | A | B
S Æ AaC menjadi S Æ AaC | Ac | Aa | a
B Æ ε dan C Æ ε dihapus

Setelah penyederhanaan :
S Æ AaC | Ac | Aa | a
A Æ C | AB | A | B
BÆb
CÆd

• Contoh CFG :
S Æ AB
A Æ abB | aCa | ε
B Æ Ba | BB | ε
CÆε

Variabel yang nullable adalah A,B,C.


Dari S Æ AB, maka S juga nullable. Lakukan penggantian :
A Æ aCa menjadi A Æ aa
28
B Æ Ba menjadi B Æ Ba | b
B Æ BB menjadi B Æ BB | B
A Æ abB menjadi A Æ abB | ab
S Æ AB menjadi S Æ AB | A | B | ε
C Æ ε, B Æ ε, A Æ ε dihapus

Perhatikan :
Untuk penggantian S Æ AB, S Æ ε tetap dipertahankan karena S merupakan simbol awal.
Ini merupakan satu-satunya perkecualian produksi ε yang tidak dihapus yaitu produksi ε yang
dihasilkan oleh simbol awal.

Hasil akhir penyedernaan :


S Æ AB | A | B | ε
A Æ abB | ab | aa
B Æ Ba | b | BB | B

• Contoh CFG :
S Æ aAb
A Æ aAb | ε

Hasil penyederhanaan :
S Æ aAb | ab
A Æ aAb | ab

• Contoh CFG :
S Æ ABaC
A Æ BC
BÆb|ε
CÆD|ε
DÆd

Hasil penyederhanaan :
S Æ ABaC | BaC | AaC | ABa | aC | Aa | Ba | a
A Æ B | C | BC
BÆb
CÆD
DÆd

• Pada prakteknya ketiga penyederhanaan tersebut (penghilangan useless, unit, ε) dilakukan


bersama pada suatu CFG yang nantinya menyiapkan CFG tersebut untuk diubah ke dalam
bentuk normal Chomsky (dibahas bab selanjutnya).
• Hal yang memerlukan perhatian adalah penghilangan suatu tipe produksi bisa menghasilkan
produksi yang lain, hal ini didasari kenyataan bahwa penghilangan suatu tipe produksi bisa
menghasilkan produksi tipe yang lain, hal ini didasari kenyataan bahwa penghilangan produksi
ε bisa menghasilkan produksi unit.
• Tapi perhatikan juga bahwa penghilangan produksi unit tidak menghasilkan produksi ε dan
penghilangan produksi useless tidak menghasilkan produksi unit maupun produksi ε.
• Maka untuk menghapus semua produksi yang tidak diinginkan tersebut dengan melakukan
urutan sebagai berikut :
1. Hilangkan produksi ε
2. Hilangkan produksi unit
3. Hilangkan produksi useless
Penghilangan Penghilangan Penghilangan CFG yang sudah
CFG
produksi ε produksi unit produksi useless disederhanakan

• Hasil yang diperoleh adalah tata bahasa yang sudah bebas dari ketiga jenis produksi tersebut.
Contoh :
29
S Æ AA | C | bd
A Æ Bb | ε
B Æ AB | d
C Æ de

Lakukan penghilangan produksi ε, sehingga aturan produksi menjadi :


S Æ A | AA | C | bd
A Æ Bb
B Æ B | AB | d
C Æ de

Penghilangan produksi ε berpotensi untuk menghasilkan produksi unit baru yang sebelumnya
tidak ada. Selanjutnya lakukan penghilangan produksi unit menjadi :
S Æ Bb | AA | de | bd
A Æ Bb
B Æ AB | d
C Æ de

Penghilangan produksi unit bisa menghasilkan produksi useless sehingga lakukan penghilangan
produksi useless :
S Æ Bb | AA | de | bd
A Æ Bb
B Æ AB | d
Hasil akhir aturan produksi diatas tidak lagi memiliki produksi ε, produksi unit, produksi
useless.
30
BENTUK NORMAL CHOMSKY
(CHOMSKY NORMAL FORM / CNF)

• Merupakan salah satu bentuk normal yang sangat berguna untuk CFG
• Bentuk normal Chomsky dibuat dari CFG yang telah mengalami penyederhanaan yaitu
penghilangan produksi useless, unit, dan ε.
• Aturan produksi dalam bentuk normal Chomsky adalah ruas kanannya tepat berupa sebuah terminal
atau 2 variabel, misal :
A Æ BC
AÆb
BÆa
C Æ BA | d
• Langkah-langkah pembentukan bentuk normal Chomsky :

Biarkan yang
sudah CNF

CFG yang sudah Penggantian simbol terminal pada Buat variabel dan aturan CNF
disederhanakan aturan produksi yang ruas kanan > 1 produksi baru bila perlu

Penggantian aturan produksi yang


simbol variabel > 2

• Contoh : Berikut ini CFG yang sudah mengalami penyederhanaan


S Æ Ba | Ab
A Æ Baa | As | a
B Æ Abb | Bs | b

Aturan produksi yang sudah dalam bentuk normal Chomsky (CNF) :


AÆa
BÆb

Dilakukan penggantian aturan produksi yang belum bentuk normal Chomsky :


S Æ Ba menjadi S Æ P1A
S Æ Ab menjadi S Æ P2B
A Æ Baa menjadi A Æ P1AA menjadi A Æ P1P3
A Æ As menjadi A Æ P2S
B Æ Abb menjadi B Æ P2BB menjadi B Æ P2P4
B Æ Bs menjadi B Æ P1S

Sehingga terbentuk aturan produksi dan simbol variabel baru :


P1 Æ b
P2 Æ a
P3 Æ AA
P4 Æ BB

Hasil akhir aturan produksi dalam bentuk normal Chomsky :


AÆa
BÆb
S Æ P1A
S Æ P2B
A Æ P1P3
A Æ P2S
B Æ P2 P4
B Æ P1S
31
P1 Æ b
P2 Æ a
P3 Æ AA
P4 Æ BB

• Contoh : Berikut ini CFG yang sudah mengalami penyederhanaan


S Æ Ab | CA
A Æ a | bc
B Æ BC | Ab
C Æ Ab | b

Aturan produksi yang sudah dalam bentuk normal Chomsky :


S Æ CA
AÆa
B Æ BC
CÆb

Penggantian aturan produksi yang belum dalam bentuk normal Chomsky :


S Æ Ab menjadi S Æ P1B
A Æ bc menjadi S Æ P2P3
B Æ Ab menjadi B Æ AP2
C Æ Ab menjadi C Æ P1B

Terbentuk aturan produksi dan simbol variabel baru :


P1 Æ a
P2 Æ b
P3 Æ c

Hasil akhir aturan produksi dalam bentuk normal Chomsky :


S Æ CA
AÆa
B Æ BC
CÆb
S Æ P1B
S Æ P2P3
B Æ AP2
C Æ P1B
P1 Æ a
P2 Æ b
P3 Æ c

• Contoh CFG :
S Æ Aab | ch | CD
A Æ dbE | Eec
B Æ ff | DD
C Æ ADB | As
DÆi
E Æ jd

Aturan produksi yang sudah dalam bentuk normal Chomsky :


S Æ CD
B Æ DD
DÆi

Penggantian aturan produksi :


S Æ Aab menjadi S Æ P1P2
S Æ ch menjadi S Æ P3P4
32
A Æ dbE menjadi A Æ P5P6
A Æ Eec menjadi A Æ P8P9
B Æ ff menjadi B Æ P10P10
C Æ ADB menjadi C Æ AP11
C Æ As menjadi C Æ P1S
E Æ Jd menjadi E Æ P12D

Terbentuk aturan produksi baru :


P1 Æ a
P2 Æ AB
P3 Æ c
P4 Æ h
P5 Æ d
P6 Æ P7E
P7 Æ b
P8 Æ e
P9 Æ EC
P10 Æ f
P11 Æ DB
P12 Æ j

Hasil akhir dalam bentuk normal Chomsky :


S Æ CD
B Æ DD
DÆi
S Æ P1P2
S Æ P3P4
A Æ P5P6
A Æ P8P9
B Æ P10P10
C Æ AP11
C Æ P1S
E Æ P12D
P1 Æ a
P2 Æ AB
P3 Æ c
P4 Æ h
P5 Æ d
P6 Æ P7E
P7 Æ b
P8 Æ e
P9 Æ EC
P10 Æ f
P11 Æ DB
P12 Æ j
33
PUSHDOWN AUTOMATA (PDA)

• PDA merupakan mesin otomata dan CFG. Bila sebuah FSA mempunyai kemampuan “memori”
yang terbatas, pada PDA didefinisikan sebuah tempat penyimpanan yang tidak terbatas berupa
stack / tumpukan
• Stack = kumpulan dari elemen-elemen sejenis dengan sifat penambahan elemen dan pengambilan
elemen melalui suatu tempat yang disebut top of stack (puncak stack).
• Pengambilan elemen dan stack dinyatakan dengan operasi pop, sedangkan memasukkan elemen ke
dalam stack dengan operasi push.
• Setiap elemen stack bisa memuat 1 simbol, yang disebut simbol stack.
• Contoh sebuah stack :
A

Bila dilakukan operasi pop, maka kondisi stack menjadi :

Bila dilakukan operasi push B, maka kondisi stack menjadi :


B

• Sebuah PDA dinyatakan dalam 7 tupel, M = (Q, Σ, Γ, ∆, S, F, Z) dimana :


Q = himpunan state
Σ = himpunan simbol input
Γ = simbol-simbol tumpukan/stack
∆ = fungsi transisi
S = state awal, S∈ Q
F = himpunan final state F∈Q
Z = simbol awal tumpukan / top stack, Z ∈ Γ

Dari komponen diatas dapat dilihat :


- Definisi untuk Q, Σ, ∆, S, F sama dengan yang ada pada FSA
- Tupel yang baru adalah Γ, Z yang berhubungan dengan stack
- ∆ memiliki kemiripan dengan δ pada FSA dengan beberapa perbedaan

• Pada PDA terdapat 2 jenis transisi (∆) yaitu :


- Memakai suatu simbol input
Bergantung pada simbol input, simbol pada top stack dan state terdapat sejumlah pilihan yang
mungkin. Setiap pilihan terdiri dari state berikutnya dan simbol-simbol untuk mengganti simbol
pada top stack. Penggantian simbol pada top stack bisa berupa push untuk satu atau beberapa
simbol, bisa berupa pop untuk simbol kosong.
- Dengan transisi ε
Mirip yang pertama tetapi dilakukan tanpa membaca simbol. Transisi ini memungkinkan PDA
memanipulasi isi stack atau berpindah state tanpa membaca simbol.

• Contoh PDA :
Q = {q1, q2}
Σ = {a, b}
Γ = {A, B, Z}
S = q1
F = {q2}
Z=Z
34
Memiliki fungsi transisi sebagai berikut :
∆(q1,ε, Z) = {(q2,Z)}
∆(q1,a, Z) = {(q1,AZ)}
∆(q1,b, Z) = {(q1,BZ)}
∆(q1,a, A) = {(q1,AA)}
∆(q1,b, A) = {(q1,ε)}
∆(q1,a, B) = {(q1,ε)}
∆(q1,b, B) = {(q1,BB)}
Apakah string ‘abba’ diterima PDA ini :

1. Konfigurasi awal mesin : state q1, top stack Z, membaca input ‘a’, fungsi transisinya
∆(q1,a, Z) = {(q1,AZ)}
Konfigurasi mesin menjadi state q1, A di push
A

2. Membaca input ‘b’


Fungsi transisinya ∆(q1,b,A) = {(q1,ε)}
Konfigurasi mesin menjadi state q1, top stack dipop

3. Membaca input ‘b’


Fungsi transisinya ∆(q1,b, Z) = {(q1,BZ)}
Konfigurasi mesin menjadi state q1, B dipush

4. Membaca input ‘a’


Fungsi transisinya ∆(q1,a, B) = {(q1, ε)}
Konfigurasi mesin menjadi state q1, top stack dipop

5. Semua input telah selesai dibaca


Fungsi transisinya ∆(q1, ε, Z) = {(q2, Z)}
Konfigurasi mesin menjadi state q2

State q2 berada dalam F (final state) maka ‘abba’ diterima oleh PDA tersebut.
35
• Contoh PDA :
Q = {q1,q2}
Σ = {0,1,2}
Γ = {Z, B, G}
S = q1
F=∅
Z=Z
Memiliki fungsi transisi sebagai berikut :
∆(q1,0, Z) = {(q1,BZ)}
∆(q1,0, B) = {(q1,BB)}
∆(q1,0, G) = {(q1,BG)}
∆(q1,0, Z) = {(q1,GZ)}
∆(q1,0, B) = {(q1,GB)}
∆(q1,2, Z) = {(q2,Z)}
∆(q1,2, B) = {(q2,B)}
∆(q1,2, G) = {(q2,G)}
∆(q2,0, B) = {(q2,ε)}
∆(q2,ε, Z) = {(q2,ε)}
∆(q2,1, G) = {(q2,ε)}
Apakah string ‘020’ diterima PDA ini :

1. Konfigurasi awal mesin : state q1, top stack Z, membaca input ‘0’, fungsi transisinya
∆(q1,0, Z) = {(q1,BZ)}
Konfigurasi mesin menjadi state q1, B dipush
B

2. Membaca input ‘2’


Fungsi transisinya ∆(q1,2,B) = {(q2,B)}
Konfigurasi mesin menjadi state q2, stack tetap

3. Membaca input ‘0’


Fungsi transisinya ∆(q2,0,B) = {(q2,ε)}
Konfigurasi mesin menjadi state q2, B dipop

4. Tanpa membaca input ‘ε’


Fungsi transisinya ∆(q2,ε, Z) = {(q2, ε)}
Konfigurasi mesin menjadi state q2, Z dipop
Stack kosong.

Semua input telah selesai dibaca, stack kosong berada dalam F (final state) maka ‘020’ diterima
oleh PDA tersebut.
36
MESIN TURING

• Stack (tumpukan) yang terdapat pada PDA memiliki keterbatasan kemampuan akses, yaitu hanya
mengakses data yang terdapat pada top / puncak dari stack.
• Untuk melakukan akses pada bagian yang lebih rendah dari puncak stack, harus memindahkan
bagian di atasnya (pop), yang mana akan menyebabkan bagian tersebut hilang.
• Pada mesin Turing, memori berupa suatu pita yang pada dasarnya berupa array (deretan) sel-sel
penyimpanan. Setiap sel mampu menyimpan sebuah simbol tunggal.
• Pita tersebut tidak mempunyai sel pertama dan sel terakhir. Pita dapat memuat informasi dalam
jumlah tak terbatas, dan dapat diakses bagian manapun dari pita dengan urutan bagaimanapun.
• Terdapat sebuah head yang menunjukkan posisi yang diakses pada pita. Head dapat bergerak ke
kanan atau ke kiri untuk membaca input dari pita dan sekaligus juga bisa melakukan penulisan pada
pita/mengubah isi pita.
• Mesin Turing bisa dianalogikan seperti komputer sederhana, dengan sejumlah state sebagai
memori, pita sebagai secondary storage, fungsi transisi sebagai program.
• Sebuah mesin Turing secara formal dinyatakan dalam 7 tupel, yaitu M = (Q, Σ, Γ, δ, S, F, b)
dimana :
Q = himpunan state
Σ = himpunan simbol input
Γ = simbol pada pita (meliputi pula blank)
δ = fungsi transisi
S = state awal, S ∈ Q
F = himpunan state akhir, F⊆ Q
b = simbol kosong (blank) Æ bukan bagian dari Σ, b ∉Σ

Bagian dari pita yang belum ditulisi dianggap berisi simbol b (blank)

• Contoh :
Misal terdapat mesin Turing :
Q = {q1,q2}
Σ = {a,b}
Γ = {a,b, b)
F = {q2}
S = {q1}

Fungsi transisinya : Pergerakan mesin Turing : R = right(kanan), L = left (kiri)


δ (q1,a) = (q1,a,R) Î pada state q1, head menunjuk karakter ‘a’ pada pita, menjadi state q1, head
bergerak ke kanan
δ (q1,b) = (q1,a,R) Î pada state q1, head menunjuk karakter ‘b’ pada pita, menjadi state q1, head
menulis karakter ‘a’ lalu bergerak ke kanan
δ (q1, b ) = (q2, b ,L) Î pada state q1, head menunjuk karakter ‘ b ’ pada pita menjadi state q2,
head bergerak ke kiri

Perhatian : pada mesin Turing


δ (q,x) = (q,y,G)
bila x <> y, maka head akan menulis simbol y (menimpa x) sebelum bergerak sesuai G
(kiri / kanan)

Jadi berdasarkan fungsi transisi diatas, maka mesin Turing beroperasi seperti berikut :
Head ditunjukkan dengan

1. Misal pita yang akan dibaca : ‘abbaa’

a b b a a

state q1
Fungsi transisi δ (q1,a) = (q1,a,R) menyebabkan head bergerak ke kanan
37
2.
a b b a a

state q1
Fungsi transisi δ (q1,b) = (q1,a,R) menyebabkan head menulis ‘a’ lalu bergerak ke kanan

3.
a a b a a

state q1
Fungsi transisi δ (q1,b) = (q1,a,R) menyebabkan head menulis ‘a’ lalu bergerak ke kanan

4.
a a a a a

state q1
Fungsi transisi δ (q1,a) = (q1,a,R) menyebabkan head bergerak ke kanan

5.
a a a a a

state q1
Fungsi transisi δ (q1,a) = (q1,a,R) menyebabkan head bergerak ke kanan

6.
a a a a a b

state q1
Head menunjuk b, karena bagian pita yang belum ditulisi dianggap berisi b
Fungsi transisi δ (q1, b ) = (q2, b ,L) menyebabkan head bergerak ke kiri

7.
a a a a a b

state q2
Tidak ada transisi lagi dari state q2, mesin Turing akan berhenti (halt state)
Karena state q2 termasuk state akhir berarti input tersebut diterima

• Contoh :
Misal konfigurasi mesin Turing :
Q = {q0,q1,q2,q3,q4}
Σ = {0,1}
Γ = {0,1,X,Y, b)
F = {q4}
S = {q0}

Fungsi transisinya dalam bentuk tabel sebagai berikut :

δ 0 1 X Y b
q0 (q1,X,R) - - (q3,Y,R) -
q1 (q1,0,R) (q2,Y,L) - (q1,Y,R) -
q2 (q2,0,L) - (q0,X,R) (q2,Y,L) -
q3 - - - (q3,Y,R) (q4, b ,L)
q4 - - - -
38
1. Misal pita yang akan dibaca : ‘0011’

0 0 1 1

state q0
2.
X 0 1 1

state q1
3.
X 0 1 1

state q1

4.
X 0 Y 1

state q2
5.
X 0 Y 1

state q2

6.
X 0 Y 1

state q0
7.
X X Y 1

state q1
8.
X X Y 1

state q1
9.
X X Y Y

state q2
10.
X X Y Y

state q2

11.
X X Y Y

state q0

12.
X X Y Y

state q3
39
13.
X X Y Y

state q3
14.
X X Y Y b

state q4
Tidak ada transisi lagi dari state q4, mesin Turing berhenti dan karena state q4 termasuk state akhir,
maka input tersebut diterima.

DESKRIPSI SEKETIKA PADA MESIN TURING


• Tahapan transisi nomor (1) sampai (14) pada contoh diatas dapat dinyatakan dalam notasi yang
disebut deskripsi seketika (instantaneous description).
• Deskripsi seketika diperlukan untuk menyatakan secara formal konfigurasi mesin Turing pada
suatu saat.
• Perubahan dari suatu kondisi ke berikutnya dipisahkan dengan tanda ‘ | ‘
Untuk simbol head ditulis dengan garis bawah ‘_’
• Jadi tahapan no. 1 sampai 14 dapat dinyatakan sebagai berikut :
(q0,0011) | (q1,X011) (q1,X011) (q2,X0Y1) (q2,X0Y1) (q0,X0Y1) (q1,XXY1)
(q1,XXY1) (q2,XXYY) (q2,XXYY) (q0,XXYY) (q3,XXYY) (q3,XXYY b)
(q4,XXYY b)
• Misal bila mendapat input 011 :
(q0,011) (q1,X11) (q2,XY1) (q0,XY1) (q3,XY1)
Tidak ada transisi (q3,1) maka mesin berhenti dan karena q3 tidak termasuk state akhir berarti input
tersebut ditolak.
40
TEKNIK KOMPILASI

BAHASA PEMROGRAMAN
Penggolongan bahasa pemrograman berdasarkan tingkat ketergantungannya dengan mesin :
1. Bahasa mesin
Merupakan bahasa asli yang digunakan oleh mesin komputer, berupa deretan bit hingga
membentuk numeric biner atau bila diringkas menjadi heksadesimal
Contoh :
Untuk mesin IBM/370 0001100000110101 (dalam bentuk biner) bila diringkas dalam
bentuk heksadesimal menjadi 1835, yang artinya komputer menyalin isi register 5 ke register 3
Perintah tersebut hanya dimengerti oleh mesin jenis tertentu yaitu mesin keluarga IBM/370,
sulit dimengerti manusia

2. Bahasa assembly
Merupakan bentuk simbolik dari bahasa mesin, dianggap sebagai bahasa pemrograman yang
pertama kali berbentuk string dan lebih mudah dimengerti manusia
Contoh :
LR 3,5 komputer menyalin isi general register 5 ke general register 3

3. Bahasa Tingkat Tinggi (High Level Language) / user oriented


Merupakan bahasa pemrograman yang lebih dekat ke bahasa manusia, contoh : bahasa Pascal,
C, PL/I, Fortran, COBOL.
Bahasa ini memberikan fasilitas yang lebih banyak, kontrol program yang terstruktur, kalang,
block, prosedur.
Tujuan utamanya adalah memudahkan pemakainya dalam membuat program dan
kemampuannya dalam mengatasi kerumitan (kompleksitas).
Contoh : dalam bahasa Pascal
X := Y + Z;
Perintah tersebut kemudian diterjemahkan dalam bahasa assemby untuk mesin IBM/370
L 3,Y Load Y ke register 3
A 3,Z Add Z
ST 3,X Simpan hasilnya ke X

Jadi beberapa kalimat bahasa Assembly dapat dinyatakan dengan satu perintah dalam bahasa
tingkat tinggi. Kerumitan-kerumitan implementasinya secara hardware disembunyikan dari
pemakai, dikemas dalam perintah yang mudah dimengerti dan setiap jenis data dikelompokkan
untuk menggambarkan jenis operasi yang dapat menggunakannya.

4. Bahasa yang problem oriented


Bahasa ini memungkinkan penyelesaian untuk suatu masalah atau aplikasi yang spesifik.
Contoh : SQL untuk aplikasi database, COGO untuk aplikasi teknik sipil, dll

Bahasa problem oriented kadang digolongkan ke dalam bahasa tingkat tinggi.

TRANSLATOR
• Translator (penerjemah) = melakukan pengubahan source code / source program (program
sumber) ke dalam target code / object code / object program (program objek).
• Source code ditulis dalam bahasa sumber, object code berupa bahasa pemrograman lain /
bahasa mesin pada suatu komputer.
• Jadi penerjemah membaca suatu program yang ditulis dalam bahasa sumber dan
menerjemahkan bahasa sumber ke dalam suatu bahasa lain.
• Saat melakukan proses penerjemahan, penerjemah akan melaporkan adanya
keanehan/kesalahan yang mungkin diketemukan.

Program sumber penerjemah Program objek

error messages
41
• Ada beberapa macam translator, yaitu :
1. Assembler
Source code adalah bahasa assembly, object code adalah bahasa mesin
contoh : Turbo Assembler, Macro Assembler

Source code Assembler Objek code


berupa file .ASM berupa file .EXE / .COM

2. Kompilator (Compiler)
Source code adalah bahasa tingkat tinggi (misal : Pascal, C).
Object code adalah bahasa mesin/bahasa assembly.
Source code dan data diproses pada saat yang berbeda, contoh : Turbo Pascal, Turbo C
Data

Eksekusi
Source code Compiler Objek code komputer Hasil

Compile time Run time

Compile time = saat pengubahan source code ke object code


Run time = saat eksekusi

3. Interpreter
Interpreter tidak membangkitkan object code, hasil translasi dalam bentuk internal.
Source code dan data diproses pada saat yang sama.
Kompiler menerjemahkan semua baris perintah terlebih dahulu ke suatu program sedangkan
interpreter hanya menganalisis dan langsung mengeksekusi setiap baris perintah.
Contoh : Basica/GW-Basic, LISP, SMALLTALK
Data

Source code Interpreter Hasil


Run time

• Dalam matakuliah ini translator yang dibahas adalah kompilator

TAHAP – TAHAP KOMPILASI

• Tahap-tahap yang harus dilalui pada saat mengkompilasi program, yaitu :


1. Lexical analysis Tahap analisis (front end) = bertugas melakukan dekomposisi
2. Syntactic analysis program sumber menjadi bagian-bagian dasarnya
3. Semantic analysis
4. Intermediate code generation
5. Code optimization Tahap sintesis (back end) = bertugas melakukan pembangkitan
6. Object code generation dan optimasi program objek

• Skema blok kompilator

Symbol Table Management

Source code Object code

Lexical Syntactic Semantic Intermediate Code Object


analyzer analyzer analyzer code generation optimization code
(scanner) (parser) generation

Error handler
42
Keterangan :
- Lexical analyzer(scanner)
Berfungsi memecah teks program sumber menjadi bagian-bagian kecil yang mempunyai
satu arti yang disebut token, seperti : konstanta, nama variabel, keyword, operator
- Syntax analyzer(parser)
Berfungsi mengambil program sumber (sudah dalam bentuk barisan token) dan menentukan
kedudukan masing-masing token berdasarkan aturan sintaksnya Æ memeriksa kebenaran
dan urutan kemunculan token
- Semantic analyzer
Berfungsi menentukan validitas semantiks/keberartian program sumber. Biasanya bagian ini
digabung dengan intermediate code generator.
- Intermediate code generator
Berfungsi membangkitkan kode antara
- Code optimation
Berfungsi mengefisienkan kode antara yang dibentuk
- Code generator
Berfungsi membangkitkan kode program target dalam bahasa target yang ekivalen dengan
bahasa sumber
- Symbol table management
Berfungsi mengelola tabel simbol selama proses kompilasi.
Tabel simbol adalah struktur data yang memuat rekord untuk tiap identifier dengan atribut-
atribut identifier itu.
- Error handler
Berfungsi menangani kesalahan yang berlangsung selama proses kompilasi

• Contoh : pernyataan pemberian nilai (assignment) :


position := initial + rate * 60

- Lexical analysis
Mengelompokkan pernyataan tersebut menjadi token-token sebagai berikut :
1. Token identifier position
2. Token simbol assignment :=
3. Token identifier initial
4. Token tanda plus +
5. Token identifier rate
6. Token tanda perkalian *
7. Token konstanta angka 60

Ketika identifier pada program sumber ditemukan lexical analyzer, identifier dimasukkan ke
tabel simbol.
position := initial + rate * 60
diubah menjadi
id1 := id2 + id3 * 60

- Syntax analysis
Memparsing atau membentuk pohon sintaks pernyataan, yaitu :
assignment statement

identifier := expression

position expression + expression

identifier expression * expression

initial identifier konstanta angka

rate 60
43

:=

id1 +

id2 *

id3 60

- Semantic analysis
Memeriksa kebenaran arti program sumber, mengumpulkan informasi tipe bagi tahap
berikutnya. Tahap ini menggunakan pohon sintaks tahap syntax analysis untuk identifikasi
operator dan operand suatu ekspresi dan kalimat. Komponen penting analisis semantik
adalah pemeriksaan tipe, memeriksa operator yang harus mempunyai operand yang
diijinkan oleh spesifikasi bahasa sumber.

Karena misal adanya pernyataan deklarasi di awal :


var
position, initial, rate : real

Maka konstanta 60 dikonversi menjadi real dengan fungsi inttoreal(60) menjadi konstanta
bilangan real
:=

id1 +

id2 *

id3 inttoreal(60)

- Intermediate Code Generator


Intermediate code adalah representasi perantara antara bentuk bahasa tingkat tinggi dengan
bahasa mesin. Karena pada level berikutnya masih akan dilakukan optimasi, maka perlu
dibuat representasi yang memudahkan optimasi, yang bukan merupakan bahasa mesin.

temp1 := inttoreal(60)
temp2 := id3 * temp1
temp3 := id2 + temp2
id1 := temp3

- Code Optimization
Tahap code optimization proses identifikasi dan membuang operasi-operasi yang tidak perlu
dari intermediate code generation untuk penyederhanaan sehingga nantinya kode mesin
hasil menjadi lebih cepat. Kode-kode tersebut dioptimasi menjadi :

Temp1 := id3 * 60.0


Id1 := id1 + temp1

- Code Generator
Tahap akhir kompilator adalah pembangkitan kode target/objek dan biasanya kode mesin
atau assembly yang dapat direlokasi. Pembangkitan kode sangat bergantung pada mesin
yang dipakai, misal :

MOVF id3, R2
MULF #60.0, R2
MOVF id2, R1
ADDF R2, R1
MOVF R1, id1
44
REFERENSI
1. John C. Martin, “Introduction to Languages and The Theory of Computation”, McGraw-Hill
Book Co, 1997.
2. Dean Kelly, “Otomata dan Bahasa-bahasa Formal”, Prenhallindo, 1999.
3. Firrar Utdirartatmo, “Teori Bahasa dan Otomata”, J & J Learning, 2001.
4. Bambang Hariyanto, “Teori Bahasa, Otomata, dan Komputasi serta Terapannya”, Penerbit
Informatika, 2004.
5. Sumantri Slamet, Heru Suhartanto, “Teknik Kompilasi”, PT. Elex Media Komputindo, 1993.
6. Firrar Utdirartatmo, “Teknik Kompilasi”, Graha Ilmu, 2005.
7. Eko Sediyono, “Teknik Kompilasi Teori dan Praktik”, Penerbit Andi, 2005.