Anda di halaman 1dari 49

TUGAS TEORI KOMPUTASI

RESTU ANANDA PUTRA

H 111 15 506

JURUSAN MATEMATIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS HASANUDDIN

2018
RESUME 01

Teori komputasi merupakan suatu cabang ilmu komputer dan matematika


mengenai pemecahan suatu masalah pada model komputasi menggunakan algoritma.
Komputasi berbentuk graf transmisi. Model komputasi seperti pada gambar.

Temporary
Memory
Input

Automata CPU

Output

Program
Memori
Automata adalah mesin abstrak yang dapat mengenali (recognize), menerima
(accept), atau membangkitkan (generate) sebuah kalimat dalam bahasa tertentu.
Automata dibagi menjadi empat macam berdasarkan Temporary Memory yaitu :

1. Finite Automata : tidak terdapat memori sementara contoh


penggunaan pada elevator ataupun Vending Machines.
2. Pushdown Automata : Stack contoh compiler untuk pemrograman.
3. Linear – Bounded Automata : Deque.
4. Turing Machines : Random Access Memory.
Kekuatan automata apabila diurutkan Finite Automata < Pushdown Automata
< Turing Machines . Turing Machines sendiri merupakan model komputasi yang
paling tangguh hingga saat ini.
Materi – materi yang berkaitan dengan Teori Komputasi diantaranya adalah :
1. Teori Himpunan
2. Teori Graf
3. Relasi dan Fungsi
4. Teori Bahasa Formal
5. Barisan dan Urutan
Teori Bahasa Formal
Bahasa formal adalah bahasa yang dapat langsung dipahami serta tidak
ambigu contoh :
• Alfabet merupkan himpunan simbol – simbol, contoh alfabet adalah
∑ = {𝑎, 𝑏, 𝑐}
• String atau untaian x : deretan simbol – simbol dari alfabet ∑ . Panjang suatu
string biasanya disimbolkan dengan “ | |”. Selain itu terdapat operasi string
yaitu
1. Konkatenasi (Penyambungan)
2. Reverse (Balikan)

Suatu string dengan tanpa abjad dilambangkan dengan 𝜆 atau ε dimana


| 𝜆 | = 0. Suatu string memiliki substring, dimana substring dari string adalah
sub – barisan dari abjad yang berlanjut.

RESUME 02

Bahasa formal merupakan bahasa yang terdiri dari himpunan berupa


string – string dimana string adalah sebuah barisan simbol dari beberapa aksara
atau alfabet. Alfabet merupakan himpunan simbol – simbol contoh sebagai
berikut :

Alfabet : ∑ = {𝑎, 𝑏}

sedangkan contoh dari string adalah,

ab u= ab

abba v=bbbaaa

bbbaaa

Dalam bahasa formal juga dikenal konkatenasi atau penyambung,


contoh : w = a1,a2,a3,.....

v = b1,b2,b3,.....

Maka, wv = a1,a2,a3,....., b1,b2,b3,.....

selain konkatenasi, juga ada reverse (balikan) dimana,

wr = ......,a3,a2,a1

Panjang suatu string disimbolkan dengan “| |” atau |w|=n. Suatu string yang
tidak terdapat abjad didalamnya disimbolkan dengan "𝜆" atau "𝜀". Panjang
suatu |𝜆| = 0 dan 𝜆𝑤 = 𝑤𝜆 = 𝑤. Pada suatu string dikenal sub – string yang
merupakan sub – barisan dari abjad yang berlanjut contoh,

string sub string

abbab ab

aaabbb bbb

abababa baba

serta suatu prefix dan sufix contoh pada w = abbab

prefix sufix

a bbab

𝜆 abbab

Operasi lain yang terdapat pada string adalah wn = 𝑤𝑤𝑤. . . . . 𝑤 dengan |w| = n
contoh

(𝑎𝑏𝑏)2 = 𝑎𝑏𝑏𝑎𝑏

𝑤0 = 𝜆
Selain operator – operator yang disebutkan diatas ada operator lain yaitu
operator “ * “ yang merupakan himpunan semua string yang dapat dibentuk
contoh,

∑ = {𝑎, 𝑏}


∑ = {𝜆, 𝑎, 𝑏, 𝑎𝑎, 𝑎𝑏, 𝑏𝑎, 𝑏𝑏, 𝑎𝑎𝑎, … . . }

Dalam suatu bahasa formal terdapat sebuah operator yang disebut


penjumlahan unary contohnya,

Alfabet : ∑ = {1, +, =}

Addition = {𝑥 + 𝑦 = 𝑧 ; 𝑥 = 1𝑛 , 𝑦 = 1𝑚 , 𝑧 = 1𝑘 , 𝑛 + 𝑚 = 𝑘}

11 + 111 = 11111 ∈ Addition dengan panjang 12

111 + 1111 = 111 ∉ Addition

Sets (himpunan) ∅ = { } ≠ {𝜆}

Set size | { } | = |∅|= 0

Set size | {𝜆}| = 1

String lenght |𝜆| = 0

Operasi suatu himpunan secara umum adalah

{ 𝑎 , 𝑎𝑏 , 𝑎𝑎𝑎𝑎 } ∪ { 𝑏𝑏 , 𝑎𝑎 } = {𝑎 , 𝑎𝑏 , 𝑏𝑏 , 𝑎𝑎𝑎𝑎 }

{ 𝑎 , 𝑎𝑏 , 𝑎𝑎𝑎𝑎 } ∩ { 𝑏𝑏 , 𝑎𝑏 } = {𝑎𝑏}

{ 𝑎 , 𝑎𝑏 , 𝑎𝑎𝑎𝑎 } − { 𝑏𝑏 , 𝑎𝑏 } = { 𝑎 , 𝑎𝑎𝑎𝑎}

Selain bahasa formal terdapat bahasa lain yaitu bahasa reguler. Bahasa
reguler adalah semua bahasa yang diterima oleh otomata reguler. Otomata
reguler dibagi menjadi dua yaitu Deterministic Finite Automaton (DFA) dan
non-Deterministic

1. Deterministic Finite Automaton (DFA)

STRING

FINITE Output : “ Accept”


AUTOMATON atau

“Reject”

Contoh :

Alfabet : ∑ = { 𝑎 , 𝑏 }

State State
awal akhir
Transition
State

Untuk setiap state terdapat transisi untuk setiap simbol dalam alfabet.
Untuk menerima string seluruh input string telah discanning dan state akhir
adalah accepting. Untuk menolak string seluruh input string telah discanning
dan state akhir adalah non-accepting. Defenisi formal dari DFA
M = (Q, ,  , q0 , F )

Q : himpunan state

∑ : alfabet input

𝛿 : Fungsi transisi

F : Himpunan accepting state

q0 : state awal

suatu fungsi transisi


𝛿 ∗: 𝑄 𝑥 ∑ →𝑄

𝛿 ∗ (𝑞, 𝑤): 𝑞′

Menggambarkan state hasil dari scanning string w dimulai dari satet q. Secara

w =  1 2  k
1 2 k
q q
umum 𝛿 ∗ (𝑞, 𝑤): 𝑞′ menyatakan terdapat jalan transisi (walk of transition)

Dimana state bisa saja berulang

q w q

Bahasa diterima oleh DFA M dinyatakan sebagai L(M) dan memuat semua
string diterima oleh M. Bahasa L’ diterima atau dikenal oleh DFA M jika
L(M) = L’.
Resume 03

Non – Deterministic Finite Automaton (NFA)

Pada pembahasan sebelumnya telah dijelaskan mengenai Deterministic Finite


Automaton. Perbedaan yang mendasar antara DFA dan NFA yaitu pada NFA terdapat
dua pilihan serta tidak memiliki transisi seperti pada gambar.

q1 a q2 Tidak ada transisi


Dua pilihan
a
q0
a
q3 Tidak ada transisi

Suatu string dari NFA diterima apabila terdapat komputasi dari NFA yang
menerima string. Contoh :

L ={aa}

Sedangkan string dari NFA ditolak apabila tidak terdapat koputasi yang
menerima string, dimana untuk setiap komputasi semua input diproses dan buka
otomaton akhir atau input tidak dapat diproses. Contoh : masukan a ditolak

q1 a q2 a
q1 q2
a a
q0 q0
a a
q3 q3
Transisi Lambda

Suatu transisi dengan lambda tidak dihitung atau langsung dilewati. Contoh :

q0 a q1  q2 a q3

dimana string “aa” diterima dengan langkah sebagai berikut

Langkah 1.

q0 a q1  q2 a q3

Langkah 2. Input langsung berpindah ke q2

q0 a q1  q2 a q3

Langkah 3. String diterima

q0 a q1  q2 a q3
Catatan bahwa symbol "𝜆" tidak pernah muncul pada table penginputan.
Dengan NFA kita dapat menggambarkan dengan lebih mudah dibandingkan dengan
DFA. Contohnya

M2 a
NFA
M1 DFA
q2
q0 a q1
a
q0 a q1

L( M 1 ) = {a} L( M 2 ) = {a}
Dengan definisi formal dari NFA adalah

𝑀 = ( 𝑄 , Σ , 𝛿 , 𝑞0 , 𝐹 )

dimana :

𝑄 = ℎ𝑖𝑚𝑝𝑢𝑛𝑎𝑛 𝑠𝑡𝑎𝑡𝑒

Σ = 𝑎𝑙𝑓𝑎𝑏𝑒𝑡

𝛿 = 𝑓𝑢𝑛𝑔𝑠𝑖 𝑡𝑟𝑎𝑛𝑠𝑖𝑠𝑖

𝑞0 = 𝑠𝑡𝑎𝑡𝑒 𝑎𝑤𝑎𝑙

𝐹 = 𝑎𝑐𝑐𝑒𝑝𝑡𝑖𝑛𝑔 𝑠𝑡𝑎𝑡𝑒

Contoh dari fungsi transisi 𝛿 yaitu

𝛿 (𝑞0 , 1) = {𝑞1 }

0
q0 q1 0, 1 q2
1

selain fungsi transisi 𝛿 juga terdapat suatu fungsi transisi yang serupa dengan 𝛿 tetapi
digunakan pada string yaitu 𝛿 ∗ contohnya.

𝛿 ∗ (𝑞0 , 𝑎𝑏) = {𝑞2 , 𝑞3 , 𝑞0 }

q4 q5
a
a
q0 a q1 b q2  q3

Terdapat kasus spesial yakni untuk sebarang state q dapat ditulis 𝑞 𝜖 𝛿 ∗ (𝑞, 𝜆)
secara umum 𝑞𝑗 𝜖 𝛿 ∗ (𝑞𝑖 , 𝜆) terdapat walk dari 𝑞𝑖 ke 𝑞𝑗 yang disimbolkan dengan w
contoh.

qi w qj

w =  1 2  k
1 2 k
qi qj

Bahasa dari NFA M, bahasa yang diterima oleh M adalah 𝐿(𝑀) =


{𝑤1 , 𝑤2 , … , 𝑤𝑛 } dimana 𝛿 ∗ (𝑞0 , 𝑤𝑚 ) = {𝑞𝑖 , … , 𝑞𝑘 , … . , 𝑞𝑗 } dan ada 𝑞𝑘 𝜖 𝐹 accepting
state. Contoh 𝐹(𝑞0 , 𝑞5 )

q4 q5
a a
q0 a q1 b q2  q3

𝛿 ∗ (𝑞0 , 𝑎𝑎) = {𝑞4 , 𝑞5 } dimana 𝑞5 𝜖 𝐹 𝑎𝑎 𝜖 𝐿(𝑀) serta 𝐿(𝑀) = {𝑎𝑏}∗ ∪ {𝑎𝑏}∗ {𝑎𝑎}.
NFA menerima Bahasa regular.

Suatu mesin M1 ekuivalen dengan mesin M2 jika L(M1) = L(M2), contoh

L(M1 ) = {10} * NFA M1


0
q0 q1
1

L(M 2 ) = {10} * DFA M 2 0,1


0
q0 q1 1 q2
1
0
Teorema 1.

Jika semua Bahasa yang diterima NFA adalah Bahasa regular dan
Bahasa regular adalah Bahasa yang diterima oleh DFA maka semua DFA
adalah NFA.

Mengkonversi NFA ke DFA

Misalkan NFA M a
a q1  q2
b

maka DFA M’
q0 

contoh 𝛿 ∗ (𝑞0 , 𝑎) = {𝑞1 , 𝑞2 }

NFA M
a
q0 a q1  q2
b

maka DFA M’

q0  a
q1, q2 
Lemma 1.

Jika konversi M NFA ke M’ DFA maka dua otomaton saling ekuivalen


L(M)=L(M’).
Simbol – Simbol Bahasa Reguler

Untuk setiap Bahasa regular L1 dan L2

𝐿1 ∪ 𝐿2 ∶ 𝐺𝑎𝑏𝑢𝑛𝑔𝑎𝑛

𝐿1 𝐿2 ∶ 𝐾𝑜𝑛𝑘𝑎𝑡𝑒𝑛𝑎𝑠𝑖

𝐿1 ∗ ∶ 𝑆𝑡𝑎𝑟

𝐿1 𝑅 ∶ 𝑅𝑒𝑣𝑒𝑟𝑠𝑎𝑙

̅̅̅̅
𝐿1 ∶ 𝐶𝑜𝑚𝑝𝑙𝑒𝑚𝑒𝑛𝑡

𝐿1 ∩ 𝐿2 ∶ 𝐼𝑟𝑖𝑠𝑎𝑛

RESUME 04

EKSPRESI REGULER

Ekspresi regular dideskripsikan sebagai Bahasa Reguler contohnya

(𝑎 + 𝑏 ∙ 𝑐)∗

yang dideskripsikan dengan bahasa

{𝑎, 𝑏𝑐}∗ = {𝜆, 𝑎, 𝑏𝑐, 𝑎𝑎, 𝑎𝑏𝑐, 𝑏𝑐𝑎, … }

Definisi 1. Bahasa regular secara rekursif yaitu suatu ekpresi regular sederhana
∅ , 𝜆, 𝛼. Diberikan ekspresi regular 𝑟1 dan 𝑟2 dimana

𝑟1 + 𝑟2

𝑟1 ∙ 𝑟2

𝑟1 ∗
(𝑟1 )

adalah Bahasa regular. Bahasa dari ekspresi regular r dinotasikan dengan 𝐿(𝑟).
Contoh 𝐿((𝑎 + 𝑏 ∙ 𝑐)∗ ) = {𝜆, 𝑎, 𝑏𝑐, 𝑎𝑎, 𝑎𝑏𝑐, 𝑏𝑐𝑎, … }. Dimana untuk suatu ekspresi
regular sederhana berlaku

𝐿(∅) = ∅

𝐿(𝜆) = {𝜆}

𝐿(𝑎) = {𝑎}

serta untuk ekspresi regular 𝑟1 dan 𝑟2 berlaku

𝐿(𝑟1 + 𝑟2 ) = 𝐿(𝑟1 ) ∪ 𝐿(𝑟2 )

𝐿(𝑟1 ⋅ 𝑟2 ) = 𝐿(𝑟1 )L(𝑟2 )


𝐿(𝑟1 ∗ ) = (𝐿(𝑟1 ))

𝐿((𝑟1 )) = L(𝑟1 )

Contoh : diberikan ekspresi regular (𝑎 + 𝑏) ∙ 𝑎∗ maka

𝐿((𝑎 + 𝑏) ∙ 𝑎∗ ) = 𝐿((𝑎 + 𝑏))𝐿(𝑎∗ )

= 𝐿(𝑎 + 𝑏)𝐿(𝑎∗ )


= (𝐿(𝑎) ∪ 𝐿(𝑏)) (𝐿(𝑎))

= ({𝑎} ∪ {𝑏})( {𝑎} )∗

= {𝑎, 𝑏} {𝜆, 𝑎, 𝑎𝑎, 𝑎𝑎𝑎, … }

= {𝑎, 𝑎𝑎, 𝑎𝑎𝑎, … , 𝑏, 𝑏𝑎, 𝑏𝑎𝑎, … }

Definisi 2. Suatu ekspresi regular 𝑟1 dan 𝑟2 dikatakan ekuivalent jika 𝐿(𝑟1 ) = L(𝑟2 ).
Contoh
𝐿 = { 𝑠𝑒𝑚𝑢𝑎 𝑠𝑡𝑟𝑖𝑛𝑔 𝑡𝑎𝑛𝑝𝑎 𝑠𝑢𝑏𝑠𝑡𝑟𝑖𝑛𝑔 00 }

𝑟1 = (1 + 01)∗ (0 + 𝜆)

𝑟2 = (1∗ 011∗ )∗ (0 + 𝜆) + 1∗ (0 + 𝜆)

sehingga 𝐿(𝑟1 ) = L(𝑟2 ) = 𝐿 dimana 𝑟1 dan 𝑟2 merupakan ekspresi regular yang


saling ekuivalent.

Teorema 1. Bahasa yang dibangun oleh ekspresi regular adalah Bahasa regular serta
Bahasa regular adalah Bahasa yang dibangun dari ekspresi regular.

Pembuktian 1. Bahasa yanh dibangun oleh ekspresi regular adalah subset dari Bahasa
regular. Untuk setiap ekspresi regular 𝑟 maka Bahasa 𝐿(𝑟) adalah regular.
Pembuktian dengan induksi ukuran dari 𝑟 maka,

dengan ekspresi regular sederhana yaitu ∅ , 𝜆, 𝛼 dengan hubungan yang diberikan


oleh NFAs dimana

adalah Bahasa regular. Anggap bahwa untuk ekspresi regular 𝑟1 dan 𝑟2 , 𝐿(𝑟1 ) dan
𝐿(𝑟2 ) adalah Bahasa regular. Kita akan membuktikan bahwa

𝐿(𝑟1 + 𝑟2 )

𝐿(𝑟1 ⋅ 𝑟2 )

𝐿(𝑟1 ∗ )

𝐿((𝑟1 ))
adalah Bahasa regular. Dari definisi sebelumnya bahwa

𝐿(𝑟1 + 𝑟2 ) = 𝐿(𝑟1 ) ∪ 𝐿(𝑟2 )

𝐿(𝑟1 ⋅ 𝑟2 ) = 𝐿(𝑟1 )L(𝑟2 )


𝐿(𝑟1 ∗ ) = (𝐿(𝑟1 ))

𝐿((𝑟1 )) = L(𝑟1 )

maka dengan hipotesis sebelumnya 𝐿(𝑟1 ) dan 𝐿(𝑟2 ) adalah Bahasa regular dan juga
bahwa Bahasa regular tertutup terhadap gabungan , konkatenasi , dan star. Sehingga

𝐿(𝑟1 + 𝑟2 ) = 𝐿(𝑟1 ) ∪ 𝐿(𝑟2 )

𝐿(𝑟1 ⋅ 𝑟2 ) = 𝐿(𝑟1 )L(𝑟2 )


𝐿(𝑟1 ∗ ) = (𝐿(𝑟1 ))

adalah Bahasa regular dan

𝐿((𝑟1 )) = L(𝑟1 )

adalah secara trivial merupakan Bahasa regular.Terbukti

Dengan menggunakan sifat tertutup dari operasi yang ada, kita dapat mengkonstruksi
secara rekursif NFA M yang diterima oleh 𝐿(𝑀) = 𝐿(𝑟). Contoh 𝑟 = 𝑟1 + 𝑟2 maka

L(M1 ) = L(r1 ) L(M ) = L(r )



L(M2 ) = L(r2 )
Pembuktian 2. Bahasa regular adalah subset dari Bahasa yang dibangun oleh ekspresi
regular. Untuk setiap 𝐿 terdapat ekspresi regular 𝑟 dengan 𝐿(𝑟) = 𝐿. Kita akan
mengkonversi sebuah NFA dengan accepts 𝐿 ke ekspresi regular.

Karena 𝐿 regular, maka terdapat NFA M yang menerimanya.

L( M ) = L

ambil dengan single final state. Dari M konstruksi Graf Transisi Generalisasi yang
ekuivalent dimana label – label transisinya adalah ekspresi regular contoh

M
a c a c
a, b a+b

Menghapus suatu states contoh


e
d c
qi q qj
a b

ae * d ce * b
ce * d
qi qj
ae * b
dengan mengulangi proses tersebut sampai tersisa dua states, maka hasil grafnya
adalah
Initial graph
Resulting graph
r1 r4
r3
q0 qf
r2
dengan hasil ekspresi regular

𝑟 = 𝑟1 ∗ 𝑟2 (𝑟4 + 𝑟3 𝑟1 ∗ 𝑟2 )∗

𝐿(𝑟) = 𝐿(𝑀) = 𝐿

Pada saat dikatakan bahwa diberikan Bahasa regular 𝐿 maka Bahasa 𝐿 adalah standar
representasi (DFA,NFA, atau ekspresi regular).

RESUME 05

Bahasa Non – regular (Pumping Lemma)

Pada pembahasan sebelumnya telah dijelaskan mengenai Bahasa regular.


Untuk mengingatkan kembali contoh dari Bahasa regular yaitu

1. 𝑎∗ 𝑏
2. 𝑏 ∗ 𝑐 + 𝑎
3. 𝑏 + 𝑐(𝑎 + 𝑏)∗
4. 𝑑𝑙𝑙

sedangkan untuk Bahasa non – regular contohnya,

1. {𝑎𝑛 𝑏 𝑛 ∶ 𝑛 ≥ 0}
2. {𝑣𝑣 𝑅 ∶ 𝑣 ∈ {𝑎, 𝑏}∗ }
3. 𝑑𝑙𝑙.

Untuk membuktikan bahwa Bahasa 𝐿 merupakan Bahasa non – regular ada du acara
yakni

1. Membuktikan bahwa tidak ada DFA atau NFA atau ekspresi regules yang
menerima 𝐿 (namun tidak mudah membuktikannya karena terdapat nilai tak
hingga)
2. Menggunakan Pumping Lemma

selain kedua cara diatas juga dapat dilakukan pembuktian menggunakan Prinsip
Sarang burung merpati ( The Pigeonhole Principle ) yaitu terdapat empat burung
merpati yang akan menempati tiga sarang burung merpati, sehingga paling tidak
terdapat dua burung merpati yang menempati satu sarang burung merpati. Prinsip
sarang burung merpati dapat diterapkan dalam DFA contohnya misalkan suatu DFA
dengan empat states seperti berikut,

b
b b

q1 a q2
a
q3 b q4
a a
misalkan walk dari suatu string yang denan panjang paling sedikit empat yaitu aaaab,
dilakukan pengulangan suatu state pada walk aaaab seperti pada gambar,

q1 a q2 a q3 a q2 a q3 b q4
dimana state diatas dapat digambarkan menjadi

b
b b

q1 a q2 a q3 b q4
a a
terjadi pengulangan pada state 𝑞3 sebagai hasil dari Prinsip sarang burung merpati
dimana walk state bertindak sebagai burung merpati.

Secara umum dapa dituliskan bahwa jika |𝑤| ≥ #𝑠𝑡𝑎𝑡𝑒𝑠 dari DFA, dari
Prinsip sarang burung merpati, state berulang pada walk 𝑤. Dimana walk dari 𝑤 =
𝜎1 𝜎2 … 𝜎𝑘

1 2 i  i +1 j  j +1 k
q1 .... qi .... qi .... qz

|𝑤| ≥ #𝑠𝑡𝑎𝑡𝑒𝑠 dari DFA = 𝑚, dan 𝑞𝑧 = 𝑞𝑚−1 , 𝑞𝑖 adalah state yang berulang
dengan pengubahan DFA menjadi,

1 2 k
q1 ...... qi ...... qz
State yang berulang
Pumping Lemma

Untuk membuktikan Pumping Lemma kita dapat mengambil Bahasa regular 𝐿


yang tak hingga (memuat bilangan tak hingga dari string ), maka terdapat sebuah
DFA yang menerima Bahasa 𝐿 dimana 𝑚 sebagai 𝑠𝑡𝑎𝑡𝑒𝑠, seperti pada gambar
ambil string 𝑤 ∈ 𝐿 dengan |𝑤| ≥ 𝑚, dimana m merupakan nilai states dari DFA,
maka paling tidak terdapat satu states yang berulang pada walk dari 𝑤,

Walk pada DFA

w = 1 2  k
1 2 ...... q ......
k
State berulang pada DFA

sehingga terdapat banyak state yang mungkin berulang. Ambil 𝑞 sebagai state
pertama yang berulang. Proyeksi satu dimensi dari walk 𝑤 seperti gambar berikut
Kejadian Kejadian
Pertama kedua

1 2 i  i +1 j  j +1 k
.... q .... q ....

State unik

dimana 𝑤 dapat ditulis sebagai 𝑤 = 𝑥𝑦𝑧, sehingga

Kejadian Kejadian
Pertama kedua

1 2 i  i +1 j  j +1 k
.... q .... q ....

𝑥 = 𝜎1 … 𝜎𝑖 𝑧 = 𝜎𝑗+1 … 𝜎𝑘
𝑦 = 𝜎𝑖+1 … 𝜎𝑗
pada DFA
Hanya memuat kejadian
y pertama dari q

j  i +1
1 ....  i  j +1 k
q .... ....

x z
dengan melakukan observasi pada panjang |𝑥 𝑦 | ≤ 𝑚 , 𝑚 merupakan nilai dari states
DFA. 𝑥 dan 𝑦 merupakan state unik karena pada 𝑥𝑦 tidak terdapat state yang
berulang kecuali 𝑞. Panjang dari y, |𝑦| ≥ 1 , karena terdapat paling tidak satu transisi
pada loop

y
...

j  i +1

kita dapat mengabaikan form pada string z. z sebenarnya saling tumpeng tindih
dengan path x dan y. Contohnya pada string xz diterima tanpa harus melewati loop
diatas maupun string xyyz diterima walaupun harus melewati loop sebanyak dua kali
yang artinya string x yi z diterima dengan i = 0,1,2,… . Oleh karena itu x yi z 𝜖 𝐿
dimana i = 0,1,2,… adalah Bahasa yang diterima oleh DFA. Dilain sisi, kita dapat
mendeskripsikan Pumping Lemma sebagai berikut :

“ Diberikan Bahasa regular L tak hingga terdapat bilangan bulat m ( panjang


kritis )untuk sebarang string 𝑤 𝜖 𝐿 dengan panjang |𝑤| ≥ 𝑚 dapat ditulis 𝑤 =
𝑥𝑦𝑧 dengan |𝑥𝑦| ≤ 𝑚 dan |𝑦| ≥ 1 sedemikian hingga 𝑥 𝑦 𝑖 𝑧 𝜖 𝐿 dimana 𝑖 =
0,1,2 …”

panjang kritis m = panjang Pumping p.

Aplikasi dari Pumping Lemma adalah setiap Bahasa berukuran hingga


merupakan regular sehingga dengan mudah kita dapat mengkonstruksi sebuah NFA
yang menerima setiap string pada Bahasa tersebut. Oleh karena itu untuk setiap
Bahasa non – regular merupakan Bahasa berukuran tak hingga dimana memuat setiap
nilai dari string.

Misalkan kita ingin membuktikan bahwa Bahasa tak hingga 𝐿 tidak regular.
Langkah pertama kita dapat mengasumsikan bahwa 𝐿 adalah Bahasa regular.
Pumping lemma seharusnya menahan 𝐿. Gunakan Pumping lemma untuk
memperoleh kontradiksi. Misalkan m merupakan panjang kritis dari 𝐿. Pilih string
khusus 𝑤 ∈ 𝐿 yang memenuhi kondisi |𝑤| ≥ 𝑚. Dimana 𝑤 = 𝑥𝑦𝑧 , dengan
menunjukkan bahwa 𝑤 ′ = 𝑥𝑦 𝑖 𝑧 ∉ 𝐿 untuk 𝑖 ≠ 1. Sehingga akan memberikan
kontradiksi, karena dari Pumping lemma 𝑤 ′ = 𝑥𝑦 𝑖 𝑧 ∈ 𝐿 . Oleh karena itu, 𝐿 tidak
regular. Catatan bahwa kita hanya cukup membuktikan satu string 𝑤 ∈ 𝐿 yang
memberikan kontradiksi.

Teorema 1. Bahasa 𝐿 = {𝑎𝑛 𝑏 𝑛 : 𝑛 ≥ 0} tidak regular.

Pembuktian. Dengan menggunakan Pumping lemma, asumsikan bahwa 𝐿 regular.


Karena , 𝐿 tak hingga sehingga kita dapat menggunakan Pumping lemma. Misalkan m
panjang kritis dari 𝐿. Pilih string 𝑤 sedemikian hingga 𝑤 ∈ 𝐿 dan panjang |𝑤| ≥ 𝑚,
kita pilih 𝑤 = 𝑎𝑚 𝑏 𝑚 . Dari Pumping lemma 𝑤 = 𝑎𝑚 𝑏 𝑚 = 𝑥𝑦𝑧 dengan |𝑥𝑦| ≤
𝑚 , |𝑦| ≥ 1.
m m

𝑤 = 𝑎𝑚 𝑏 𝑚 = 𝑎 … 𝑎𝑎 … 𝑎𝑎𝑎 … 𝑎𝑏 … 𝑏

x y z
Jadi 𝑦 = 𝑎𝑘 , 1 ≤ 𝑘 ≤ 𝑚. Dari Pumping lemma 𝑥𝑦 𝑖 𝑧 ∈ 𝐿, 𝑖 = 0,1,2, … . Sehingga
𝑥𝑦 2 𝑧 ∈ 𝐿

m+k m
xy 2 z = a...aa...aa...aa...ab...b  L
x y y z
Jadi, 𝑎𝑚+𝑘 𝑏 𝑚 ∈ 𝐿, 𝑘 ≥ 1 , tapi 𝐿 = {𝑎𝑛 𝑏 𝑛 : 𝑛 ≥ 0} kontradiksi dengan 𝑎𝑚+𝑘 𝑏 𝑚 ∉ 𝐿.
Oleh karena itu, asumsi bahwa 𝐿 adalah Bahasa regular tidak benar. Jadi, 𝐿 bukan
Bahasa regular.

Teorema 2. Bahasa 𝐿 = { 𝑣𝑣 𝑅 : 𝑣 ∈ Σ ∗ } Σ = {𝑎, 𝑏} tidak regular.

Pembuktian. Sama halnya dengan pembuktian sebelumnya kita kembali akan


menggunakan Pumping lemma. Langkah pertama asumsikan bahwa 𝐿 adalah Bahasa
regular. Karena , 𝐿 tak hingga sehingga kita dapat menggunakan Pumping lemma.
Misalkan m panjang kritis dari 𝐿. Pilih string 𝑤 sedemikian hingga 𝑤 ∈ 𝐿 dan
panjang |𝑤| ≥ 𝑚, kita pilih 𝑤 = 𝑎𝑚 𝑏 𝑚 𝑏 𝑚 𝑎𝑚 . Dari Pumping lemma 𝑤 =
𝑎𝑚 𝑏 𝑚 𝑏 𝑚 𝑎𝑚 = 𝑥𝑦𝑧 dengan |𝑥𝑦| ≤ 𝑚 , |𝑦| ≥ 1.

m m m m
w = xyz = a...aa...a...ab...bb...ba...a
x y z

Jadi 𝑦 = 𝑎𝑘 , 1 ≤ 𝑘 ≤ 𝑚. Dari Pumping lemma 𝑥𝑦 𝑖 𝑧 ∈ 𝐿, 𝑖 = 0,1,2, … . Sehingga


𝑥𝑦 2 𝑧 ∈ 𝐿
m+k m m m
xy 2 z = a...aa...aa...a...ab...bb...ba...a ∈ L
x y y z
Jadi, 𝑎𝑚+𝑘 𝑏 𝑚 𝑏 𝑚 𝑎𝑚 ∈ 𝐿, 𝑘 ≥ 1 , tapi 𝐿 = { 𝑣𝑣 𝑅 : 𝑣 ∈ Σ ∗ } kontradiksi dengan
𝑎𝑚+𝑘 𝑏 𝑚 𝑏 𝑚 𝑎𝑚 ∉ 𝐿. Oleh karena itu, asumsi bahwa 𝐿 adalah Bahasa regular tidak
benar. Jadi, 𝐿 bukan Bahasa regular.

RESUME 06

Bahasa Bebas Konteks

Pada pembahasan sebelumnya telah dijelaskan mengenai Bahasa regular dan


Bahasa non - regular. Kali ini akan dijelaskan mengenai Bahasa bebas konteks
dimana Bahasa ini memuat Bahasa regular. Bahasa bebas konteks dibagi menjadi
dua :

1. Tata Bahasa bebas konteks


2. Pushdown Automata

Tata Bahasa Bebas Konteks (Context – Free Grammars).

Definisi dari Context – Free Grammars adalah suatu Bahasa 𝐿 dikatakan


bebas konteks jika terdapat Context – Free Grammars 𝐺 dengan 𝐿 = 𝐿(𝐺). Contoh
tata Bahasa salah satunya yaitu Tata Bahasa dari Bahasa Inggris

Kalimat Frasa kata benda Predikat

Frasa kata benda Kata penghubung Kata benda

Predikat Kata kerja

Contoh tata Bahasa 𝑆 → 𝑎𝑆𝑏 dan 𝑆 → 𝜆. Maka derivasi dari string ab :

𝑆 ⟹ 𝑎𝑆𝑏 ⟹ 𝑎𝑏

𝑆 → 𝑎𝑆𝑏 𝑆 →𝜆
Derivasi dari string aabb :

𝑆 ⟹ 𝑎𝑆𝑏 ⟹ 𝑎𝑎𝑆𝑆𝑏𝑏 ⟹ 𝑎𝑎𝑏𝑏

𝑆 → 𝑎𝑆𝑏 𝑆 →𝜆

Maka Bahasa dari tata Bahasa diatas adalah 𝐿 = { 𝑎𝑛 𝑏 𝑛 : 𝑛 ≥ 0} .Untuk nol atau
lebih dari langkah derivasi kita notasikan dengan
*
𝑆 ⇒ 𝑎𝑎𝑎𝑏𝑏𝑏

Secara umum kita dapat menuliskannya dengan

*
𝑤1 ⇒ 𝑤2

jika

𝑤1 ⇒ 𝑤2 ⇒ 𝑤3 ⇒ ⋯ ⇒ 𝑤𝑛

pada nol atau lebih langkah derivasi. Selain notasi diatas juga terdapat notasi lain
yang dapat digunakan yaitu

𝑆 → 𝑎𝑆𝑏 dan 𝑆 → 𝜆 maka S → aSb | λ

Grammar atau tata Bahasa dinotasikan dengan 𝐺 = (𝑉, 𝑇, 𝑆, 𝑃) ,

dimana,

𝑉 = Himpunan Variabel

𝑇 = Himpunan dari simbol penghubung

𝑆 = Variabel awal

𝑃 = Himpunan hasil − hasil


Tata Bahasa bebas konteks 𝐺 dimana semua hasil – hasil pada 𝑃 merupakan formula
dari 𝐴 → 𝑠 dimana “A” adalah variable dan “s” adalah string dari variable dan
penghubung. Contoh

𝑆 → 𝑎𝑆𝑏 | 𝜆

maka hasilnya

𝑃 = { 𝑆 → 𝑎𝑆𝑏, 𝑆 → 𝜆 }

dan,

𝐺 = ( 𝑉, 𝑇, 𝑆, 𝑃)

Dimana

𝑃 = 𝑎𝑆𝑏

𝑉 = {𝑆} , variabel

𝑇 = {𝑎, 𝑏} , penghubung

𝑆 = variabel awal

Dalam Tata Bahasa bebas konteks dikenal juga Bahasa yang dimiliki oleh
Tata Bahasa (Bahasa dari Tata Bahasa). Definisi Bahasa dari Tata Bahasa yaitu
* “
Untuk sebuah tata Bahasa 𝐺 dengan variabel awal 𝑆 maka 𝐿(𝐺) = {𝑤: 𝑆 ⟹ 𝑤, 𝑤 ∈
𝑇 ∗ dengan w adalah string dari penghubung (terminal) atau 𝜆 .

Setelah penjelasan singkat mengenai tata Bahasa bebas konteks, maka akan
diberikan contoh dari tata Bahasa bebas konteks yaitu

𝐿 = {𝑎𝑛 𝑏 𝑛 : ≥ 0}

Dimana 𝐿 adalah Bahasa bebas konteks dan karena 𝐺: 𝑆 → 𝑎𝑆𝑏|𝜆 adalah tata Bahasa
bebas konteks maka membangun 𝐿(𝐺) = 𝐿.
Derivasi Order dan Derivasi Trees (Pohon)

Derivasi order dan derivasi pohon dibagi menjadi dua yaitu

1. Derivasi paling kiri


2. Derivasi paling kanan

Contoh derivasi order, misalkan diberikan tata Bahasa dengan 5 hasil seperti berikut

1. 𝑆 → 𝐴𝐵

2. 𝐴 → 𝑎𝑎𝐴

3. 𝐴 → 𝜆

4. 𝐵 → 𝐵𝑏

5. 𝐵 → 𝜆

maka, order derivasi paling kiri dari string aab adalah


1 2 3 4 5
𝑆 ⟹ 𝐴𝐵 ⟹ 𝑎𝑎𝐴𝐵 ⟹ 𝑎𝑎𝐵 ⟹ 𝑎𝑎𝐵𝑏 ⟹ 𝑎𝑎𝑏

Pada setiap langkah kita mensubtitusi variabel paling kiri. Sedangkan, untuk order
derivasi paling kanan dari string aab adalah
1 4 5 2 3
𝑆 ⟹ 𝐴𝐵 ⟹ 𝐴𝐵𝑏 ⟹ 𝐴𝑏 ⟹ 𝑎𝑎𝐴𝑏 ⟹ 𝑎𝑎𝑏

Pada setiap langkah kita mensubtitusi variabel paling kanan. Setelah diberikan contoh
dari derivasi order maka berikut ini contoh dari derivasi pohon. Misalkan contoh tata
Bahasa yang sama berikut ini

𝑆 → 𝐴𝐵 𝐴 → 𝑎𝑎𝐴|𝜆 𝐵 → 𝐵𝑏|𝜆

maka derivasi aab :

𝑆 ⟹ 𝐴𝐵 ⟹ 𝑎𝑎𝐴𝐵 ⟹ 𝑎𝑎𝐴𝐵𝑏 ⟹ 𝑎𝑎𝐵𝑏 ⟹ 𝑎𝑎𝑏


Dengan langkah – langkah untuk membuat derivasi pohon adalah

Langkah 1. 𝑆 ⟹ 𝐴𝐵 dengan hasil AB

A B

Langkah 2. 𝑆 ⟹ 𝐴𝐵 ⟹ 𝑎𝑎𝐴𝐵 dengan hasil aaAB

A B

a a A

Langkah 3. 𝑆 ⟹ 𝐴𝐵 ⟹ 𝑎𝑎𝐴𝐵 ⟹ 𝑎𝑎𝐴𝐵𝑏 ⟹ 𝑎𝑎𝐵𝑏 dengan hasil aaBb

A B

a a A B b

Langkah 4. 𝑆 ⟹ 𝐴𝐵 ⟹ 𝑎𝑎𝐴𝐵 ⟹ 𝑎𝑎𝐴𝐵𝑏 ⟹ 𝑎𝑎𝐵𝑏 dengan hasil 𝑎𝑎𝜆𝐵𝑏 = 𝑎𝑎𝐵𝑏

A B

a a A B b


Sehingga diperoleh derivasi pohon 𝑆 ⟹ 𝐴𝐵 ⟹ 𝑎𝑎𝐴𝐵 ⟹ 𝑎𝑎𝐴𝐵𝑏 ⟹ 𝑎𝑎𝐵𝑏 ⟹ 𝑎𝑎𝑏
dengan hasil 𝑎𝑎𝜆𝜆𝑏 = 𝑎𝑎𝑏.

A B

a a A B b

 

Dengan derivasi paling kiri 𝑆 ⟹ 𝐴𝐵 ⟹ 𝑎𝑎𝐴𝐵 ⟹ 𝑎𝑎𝐵 ⟹ 𝑎𝑎𝐵𝑏 ⟹ 𝑎𝑎𝑏 dan


derivasi paling kanan 𝑆 ⟹ 𝐴𝐵 ⟹ 𝐴𝐵𝑏 ⟹ 𝐴𝑏 ⟹ 𝑎𝑎𝐴𝑏 ⟹ 𝑎𝑎𝑏 memberikan hasil
yang sama untuk derivasi pohon yaitu

A B

a a A B b

 
Namun terdapat kasus dimana untuk derivasi pohon terjadi ambiguitas (dua
makna). Definisi dari ambiguitas tata Bahasa yaitu “ suatu tata Bahasa bebas konteks
𝐺 dikatakan ambigu jika terdapat string 𝑤 ∈ 𝐿(𝐺) yang mempunyai dua derivasi
pohon yang berbeda atau dua derivasi paling kiri”.

RESUME 07

Simplifikasi Tata Bahasa Bebas Konteks

Tata bahasa merupakan suatu aturan produksi. Mencari turunan suatu string
dengan aturan produksi yang banyak membutuhkan simplifikasi. Dengan adanya
simplifikasi dapat membantu untuk melihat apakah suatu aturan produksi berguna
atau apakah dapat berlaku untuk suatu terminal.

Pada pembahasan kali ini juga dikenal sebuah aturan yaitu aturan substitusi.
Contohnya pada tata Bahasa

𝑆 → 𝑎𝐵

𝐴 → 𝑎𝑎𝐴

𝐴 → 𝑎𝑏𝐵𝑐

𝐵 → 𝑎𝐴

𝐵→𝑏

kita akan mensubtitusi 𝐵 → 𝑏 sehingga tata Bahasa diatas akan ekuivalen dengan,

𝑆 → 𝑎𝐵 |𝑎𝑏

𝐴 → 𝑎𝑎𝐴

𝐴 → 𝑎𝑏𝐵𝑐 | 𝑎𝑏𝑏𝑐

𝐵 → 𝑎𝐴

Secara umum dapat dituliskan dengan 𝐴 → 𝑥𝐵𝑧 dengan subtitusi 𝐵 → 𝑦1 sehingga


diperoleh tata Bahasa yang ekuivalen adalah 𝐴 → 𝑥𝐵𝑧 | 𝑥𝑦1 𝑧. Selain itu, pada
simplifikasi dari tata Bahasa bebas konteks juga ada variabel nullable (Nullable
Variables). Secara umum dituliskan sebagai

𝜀 − produksi ∶ X → ε

Variabel Nullable ∶ Y ⇒ ⋯ ⇒ ε

Contoh dari variabel null adalah

𝑆 → 𝑎𝑀𝑏
𝑀 → 𝑎𝑀𝑏

𝑀→𝜀

dimana, 𝑀 merupakan variabel null dan 𝜀 merupakan ε − produksi. Kita dapat


melakukan penghapusan terhadap ε − produksi dengan mensubtitusi 𝑀 → 𝜀
sehingga,

𝑆 → 𝑎𝑀𝑏 |𝑎𝑏

𝑀 → 𝑎𝑀𝑏 | 𝑎𝑏

Setelah dilakukan penghapusan terhadap ε − produksi maka semua variabel null


hilang (kecuali untuk variabel awal).

Pada simplifikasi dari tata Bahasa bebas konteks juga terdapat unit produksi
dimana,

Unit produksi : 𝑋 → 𝑌 (variabel tunggal pada kedua sisi)

Contoh,

𝑆 → 𝑎𝐴

𝐴 →𝑎

𝐴→𝐵

𝐵→𝐴

𝐵 → 𝑏𝑏

𝐴 → 𝐵 dan 𝐵 → 𝐴 merupakan unit produksi. Kita dapat melakukan penghapusan dari


unit produksi dengan mensubtitusi 𝐴 → 𝐵 maka,

𝑆 → 𝑎𝐴 | 𝑎𝐵

𝐴 →𝑎
𝐵 →𝐴|𝐵

𝐵 → 𝑏𝑏

Produksi unit dari 𝑋 → 𝑋 dapat dihapus ,

S → aA | aB S → aA | aB
A→a Remove A→a
B → A| B B→B B→A
B → bb B → bb

Selanjutnya subtitusi 𝐵 → 𝐴

S → aA | aB S → aA | aB
A→a Remove A→a
B → A| B B→B B→A
B → bb B → bb
Selanjutnya hapus produksi yang berulang sehingga diperoleh hasil akhir sebagai
berikut,

S → aA | aB | aA S → aA | aB
A→a A→a
B → bb B → bb
Sering kali terdapat tata Bahasa dengan produksi yang tidak berguna
contohnya sebagai berikut,

S → aSb
S →
S→A
A → aA Useless Production
Dimana derivasinya tidak pernah berhenti,

𝑆 ⟹ 𝐴 ⟹ 𝑎𝐴 ⟹ 𝑎𝑎𝐴 ⟹ ⋯ ⟹ 𝑎𝑎 … 𝑎𝐴 ⟹ ⋯

Secara umum produksi yang tidak berguna didefinisikan dengan

“Jika terdapat derivasi 𝑆 ⇒ ⋯ ⇒ 𝑥𝐴𝑦 ⇒ ⋯ ⇒ 𝑤 ∈ 𝐿(𝐺), 𝑤 terdiri dari terminal


maka variabel A berguna,sehingga variabel A tidak berguna”.

Contoh dari produksi yang tidak berguna,

S → aSb
S → Productions

Variables S→A useless

useless A → aA useless

useless B→C useless

useless C→D useless

Menghapus variabel dan produksi yang tidak berguna, contoh

𝑆 → 𝑎𝑆 | 𝐴 |𝐶

𝐴→𝑎

𝐵 → 𝑎𝑎

𝐶 → 𝑎𝐶𝑏

Langkah 1. Cari semua variabel yang dapat memproduksi string – string hanya
dengan terminal atau 𝜀 (variabel berguna yang mungkin). Pertama { 𝐴, 𝐵} sisi kanan
dari produksi yang hanya mempunyai terminal. Kedua { 𝐴, 𝐵, 𝑆} sisi kanan dari
produksi dengan terminal dan variabel dari langkah sebelumnya. Proses ini dapat
digeneralisasi.

Langkah 2. Hapus semua produksi yang menggunakan variabel selain { A , B , S }


maka

𝑆 → 𝑎𝑆 | 𝐴

𝐴→𝑎

𝐵 → 𝑎𝑎

Langkah 3. Cari semua variabel yang dapat dicapai dari S. dimana A merupakan
variabel yang dapat dicapai dari S dan B tidak. Lakukan penghapusan terhadap
variabel yang tidak dapat dicapai dari S sehingga diperoleh hanya variabel yang
berguna,

𝑆 → 𝑎𝑆 | 𝐴

𝐴→𝑎

Untuk melakukan semua penghapusan diperlukan langkah – langkah sebagai


berikut

1. Menghapus variabel null


2. Menghapus unit produksi
3. Menghapus variabel yang tidak berguna.

Hasil ini menjamin bahwa semua variabel dan produksi yang tidak diinginkan
dihapus.

Bentuk Normal Tata Bahasa Bebas Konteks

Bentuk normal dari tata Bahasa bebas konteks dibagi menjadi

1. Bentuk normal Chomsky


2. Bentuk normal Greinbach
Bentuk normal Chomsky
Secara umum bentuk normal Chomsky didefinisikan dengan “ dari
sebarang tata Bahasa bebas konteks ( yang tidak memproduksi 𝜀 ) bukan
bentuk normal Chomsky”. Contoh bentuk normal Chomsky
𝑆 → 𝐴𝑆
𝑆 →𝑎
𝐴 → 𝑆𝐴
𝐴 →𝑏
Sedangkan yang bukan merupakan bentuk normal Chomsky adalah
𝑆 → 𝐴𝑆
𝑆 → 𝐴𝐴𝑆
𝐴 → 𝑆𝐴
𝐴 → 𝑎𝑎
kita dapat mengkonversi suatu tata Bahasa menjadi bentuk normal Chomsky
contohnya
𝑆 → 𝐴𝐵𝑎
𝐴 → 𝑎𝑎𝑏
𝐵 → 𝐴𝑐
Lakukan penggantian terhadap aturan-aturan produksi yang ruas kanannya
mengandung lebih dari satu simbol terminal atau mengandung lebih dari dua
simbol variabel. Penggantian ini mengakibatkan terciptanya simbol-simbol
variable baru dan aturan-aturan produksi baru. Simbol variabel baru untuk
terminal: Ta,Tb, dan Tc

S → ABTa
S → ABa A → TaTaTb
A → aab B → ATc
B → Ac Ta → a
Tb → b
Tc → c
Simbol variabel intermediate baru 𝑉1 untuk memecahkan produksi

pertama S → AV1
S → ABTa
V1 → BTa
A → TaTaTb
A → TaTaTb
B → ATc
B → ATc
Ta → a
Ta → a
Tb → b
Tb → b
Tc → c
Tc → c
Simbol variabel intermediate baru 𝑉2

S → AV1
S → AV1
V1 → BTa
V1 → BTa
A → TaV2
A → TaTaTb
V2 → TaTb
B → ATc
B → ATc
Ta → a
Ta → a
Tb → b
Tb → b
Tc → c
Tc → c
Maka diperoleh bentuk akhir dari bentuk normal Chomsky

S → AV1
V1 → BTa
A → TaV2
V2 → TaTb
B → ATc
Ta → a
Tb → b
Tc → c

Adapun prosedur mengkonversi tata bahasa ke bentuk normal Chomsky.

1. Hapus atau hilangkan variabel nullable, produksi unit, dan variabel


useless (opsional).
2. Kemudian, untuk setiap simbol a: Variabel barunya adalah 𝑇𝑎 dan
tambahan produksi 𝑇𝑎 → 𝑎.
Dengan catatan: produksi dengan panjang minimal 2, ganti a dengan
𝑇𝑎 . Dan produksi dari 𝐴 → 𝑎 tidak perlu diubah.
3. Ganti semua produksi 𝐴 → 𝐶1 𝐶2 … 𝐶𝑛 dengan

𝐴 → 𝐶1 𝑉1

𝑉1 → 𝐶2 𝑉2

𝑉𝑛−2 → 𝐶𝑛−2 𝑉𝑛

dimana 𝑉1 , 𝑉2 , … , 𝑉𝑛−2 adalah variabel intermediate baru.

Bentuk Normal Greinbach


Bentuk normal Greibach sangat baik untuk parsing string, bisa dikatakan
lebih baik daripada bentuk normal Chomsky. Akan tetapi, sulit untuk
menemukan normal Greinbach dari sebuah tata bahasa. Bentuk normal
Greinbach:

𝐴 → 𝑎𝑉1 𝑉2 … 𝑉𝑘 𝑘≥0

Contoh bentuk normal Greinbach

𝑆 → 𝑐𝐴𝐵

𝐴 → 𝑎𝐴|𝑏𝐵|𝑏

𝐵→𝑏

Konversi tata bahasa yang bukan bentuk normal Greinbach ke bentuk normal
Greinbach

𝑆 → 𝐴𝑇𝑏 𝑆𝑇𝑏
𝑆 → 𝑎𝑏𝑆𝑏
𝑆 → 𝑎𝑇𝑎
𝑆 → 𝑎𝑎
𝑇𝑎 → 𝑎

𝑇𝑏 → 𝑏

Bentuk normal Greinbach

RESUME 08

Push Down Automata

Push Down Automata (PDA) merupakan perluasan dari NFA yang


merupakan suatu cara untuk mendefinisikan bahasa regular. PDA digambarkan
sebagai tempat penyimpanan yang tidak terbatas, yaitu berupa stack (tumpukan).
Stack digunakan untuk menyimpan sejumlah simbol yang diakses dengan aturan
LIFO (Last in First out). Stack tersebut dapat dibaca di push (memasukkan elemen)
dan di pop (pengambilan elemen) hanya pada bagian atas dari stack (top stack).
Stack Stack

Kepala Stack $ z Top

Simbol spesial
bagian bawah pada
saat waktu 0
State pada PDA digambarkan dengan,
Input Pop Push

a, b → c
q1 q2

Sebagai contoh state diatas dimana 𝑎 sebagai input dan 𝑏 berada pada posisi top
kemudian pop 𝑏 lalu dilakukan pergantian dengan push 𝑐.
b top c
h Replace
h
e e
$ $

Karena PDA merupakan perluasan dari NFA maka PDA menerima transisi
NFA. Contohnya PDA 𝑀 ∶ 𝐿(𝑀) = { 𝑎𝑛 𝑏 𝑛 : 𝑛 ≥ 0 }

a,  → a b, a → 

q0 ,  →  q1 b, a →  q2 , $ → $ q3
Dengan pemikiran dasar dilakukan push a pada stack, pasangkan b pada input dengan
a pada stack, pasangan ditemukan. Contoh eksekusi yang diterima aaabbb

a,  → a b, a → 

q0 ,  →  q1 b, a →  q2 , $ → $ q3

Langkah 1. Mulai dari state awal 𝑞0 , karena transisi 𝑞0 bernilai 𝜆 maka langsung
menuju state 𝑞1 .

Langkah 2. Input a, lalu push a begitu seterusnya sebanyak tiga kali.

Langkah 3. Selanjutnya dibaca b lalu pop a dan seterusnya sebanyak tiga kali.

Langkah 4. Tersisa transisi $. Maka eksekusi diterima.

Suatu string diterima jika terdapat komputasi sedemikian sehingga semua


input diproses dan state terakhir adalah accepting state. Contoh string yang ditolak
adalah aab

a,  → a b, a → 

q0 ,  →  q1 b, a →  q2 , $ → $ q3

Langkah 1. Mulai dari state awal 𝑞0 , karena transisi 𝑞0 bernilai 𝜆 maka langsung
menuju state 𝑞1 .

Langkah 2. Input a, lalu push a begitu seterusnya sebanyak dua kali.

Langkah 3. Selanjutnya dibaca b lalu pop a.

Langkah 4. Tersisa satu stack 𝑎. Berakhir ada state 𝑞2 yang bukan accepting state
sehingga string ditolak.
Tidak ada komputasi apapun yang menerima string aab. String aab ditolak oleh PDA.

Pushing and Popping Strings

a , w1 → w 2
q1 q2

Dimana a merupakan input, 𝑤1 string pop dan 𝑤2 string push. Contoh

a , eb → cdf
q1 q2
Maka

top c
String
e top
d String
Pop b f Push
h Replace
h
e e
$ $
Selain digambarkan seperti diatas dapat juga dengan transisi
pop

a, e →  a, b → 
q1
,  →  push
a,  → f a,  → d a,  → c q2

PDA secara formal untuk

a , w1 → w 2
q1 q2
maka fungsi transisinya dinotasikan dengan 𝛿(𝑞1 , 𝑎, 𝑤1 ) = { (𝑞2 , 𝑤2 )}. Dengan
definisi PDA 𝑀 = ( 𝑄 , Σ , Γ , δ, 𝑞_0, 𝑧, 𝐹) dimana,

𝑄 = state

Σ = Input

Γ = stack

𝛿 = Fungsi transisi

𝑞0 = state awal

𝑧 = simbol awal stack

𝐹 = Accept state

Dengan deskripsi pembentukan (Instantaneous) ( 𝑞 , 𝑢 , 𝑠) dimana

𝑞 = 𝑐𝑢𝑟𝑟𝑒𝑛𝑡 𝑠𝑡𝑎𝑡𝑒

𝑢 = 𝑟𝑒𝑚𝑎𝑖𝑛𝑖𝑛𝑔 𝑖𝑛𝑝𝑢𝑡

𝑠 = 𝑐𝑢𝑟𝑟𝑒𝑛𝑡 𝑠𝑡𝑎𝑐𝑘 𝑐𝑜𝑛𝑡𝑒𝑛𝑡𝑠

Contoh deskripsi pembentukan ( 𝑞1 , 𝑏𝑏𝑏, 𝑎𝑎𝑎$)

Langkah 1. Mulai dari state awal 𝑞0 , karena transisi 𝑞0 bernilai 𝜆 maka langsung
menuju state 𝑞1 .

Langkah 2. Input a, lalu push a begitu seterusnya sebanyak tiga kali.

Langkah 3. Selanjutnya dibaca b lalu pop a dan begitu seterusnya sebanyak tiga kali.

Langkah 4. Tersisa transisi akhir $ . Maka string diterima.

Komputasi untuk ( 𝑞1 , 𝑏𝑏𝑏, 𝑎𝑎𝑎$) dapat dituliskan juga sebagai berikut,


(𝑞0 , 𝑎𝑎𝑎𝑏𝑏𝑏, $) ≻ (𝑞1 , 𝑎𝑎𝑎𝑏𝑏𝑏, $) ≻ (𝑞1 , 𝑎𝑎𝑏𝑏𝑏, 𝑎$) ≻
(𝑞1 , 𝑎𝑏𝑏𝑏, 𝑎𝑎$) ≻ (𝑞1 , 𝑏𝑏𝑏, 𝑎𝑎𝑎$) ≻ (𝑞2 , 𝑏𝑏, 𝑎𝑎$) ≻ (𝑞2 , 𝑏, 𝑎$) ≻
(𝑞2 , 𝜆, $) ≻ (𝑞3 , 𝜆, $)

Untuk lebih sederhana dapat ditulis


*
(𝑞0 , 𝑎𝑎𝑎𝑏𝑏𝑏, $) ≻ (𝑞3 , 𝜆, $)

a,  → a b, a → 

q0 ,  →  q1 b, a →  q2 , $ → $ q3

*
Bahasa yang diterima oleh PDA 𝑀 ∶ 𝐿(𝑀) = { 𝑤 ∶ (𝑞0 , 𝑤, 𝑧) ≻ (𝑞𝑓 , 𝜆, 𝑠)} .

RESUME 09

Merancang PDA

Pada pembahasan sebelumnya telah dijelaskan mengenai PDA (Push Down


Automata) dan kali ini akan ditunjukkan bagaimana merancang PDA dari Bahasa
bebas konteks. Contoh diberikan 𝐿(𝑀) = { 𝑎𝑛 𝑏 𝑚 𝑐 𝑛 |𝑛, 𝑚 ≥ 1 } maka dari Bahasa
yang diberikan diketahui bahwa jumlah 𝑎 = 𝑐. Selanjutnya akan dirancang PDA dari
𝐿(𝑀) sebagai berikut

𝑎, 𝑎 → 𝑎𝑎 𝑏, 𝜆 → 𝜆
𝑎, $ → 𝑎$
𝑏, 𝑎 → 𝑎 𝑐, 𝑎 → 𝜆

q0 q1 q2 q3
𝑏, 𝑎 → 𝑎 𝑐, 𝑎 → 𝜆 𝜆, $ → $
𝑏, 𝜆 → 𝜆
Misalkan input string aabbbcc maka,

Langkah 1. Diinput a, maka tidak ada pop kemudian push a

𝑎, 𝑎 → 𝑎𝑎 𝑏, 𝜆 → 𝜆
𝑎, $ → 𝑎$
𝑏, 𝑎 → 𝑎 𝑐, 𝑎 → 𝜆

q0 q1 q2 q3
𝑏, 𝑎 → 𝑎 𝑐, 𝑎 → 𝜆 𝜆, $ → $
𝑏, 𝜆 → 𝜆
Langkah 2. Diinput a, maka pop a, lalu push aa

𝑎, 𝑎 → 𝑎𝑎 𝑏, 𝜆 → 𝜆
𝑎, $ → 𝑎$
𝑏, 𝑎 → 𝑎 𝑐, 𝑎 → 𝜆

q0 q1 q2 q3
𝑏, 𝑎 → 𝑎 𝑐, 𝑎 → 𝜆 𝜆, $ → $
𝑏, 𝜆 → 𝜆
Langkah 3. Diinput b, maka pop a kemudian push a

𝑎, 𝑎 → 𝑎𝑎 𝑏, 𝜆 → 𝜆
𝑎, $ → 𝑎$
𝑏, 𝑎 → 𝑎 𝑐, 𝑎 → 𝜆

q0 q1 q2 q3
𝑏, 𝑎 → 𝑎 𝑐, 𝑎 → 𝜆 𝜆, $ → $
𝑏, 𝜆 → 𝜆
Langkah 4. Diinput b, maka pop a kemudian push a

𝑎, 𝑎 → 𝑎𝑎 𝑏, 𝜆 → 𝜆
𝑎, $ → 𝑎$
𝑏, 𝑎 → 𝑎 𝑐, 𝑎 → 𝜆

q0 q1 q2 q3
𝑏, 𝑎 → 𝑎 𝑐, 𝑎 → 𝜆 𝜆, $ → $
𝑏, 𝜆 → 𝜆
Langkah 5. Diinput b, maka pop a kemudian push a (pada stack tersisa aa)

𝑎, 𝑎 → 𝑎𝑎 𝑏, 𝜆 → 𝜆
𝑎, $ → 𝑎$
𝑏, 𝑎 → 𝑎 𝑐, 𝑎 → 𝜆

q0 q1 q2 q3
𝑏, 𝑎 → 𝑎 𝑐, 𝑎 → 𝜆 𝜆, $ → $
𝑏, 𝜆 → 𝜆
Langkah 6. Diinput c, maka pop a dan tidak ada yang di push

𝑎, 𝑎 → 𝑎𝑎 𝑏, 𝜆 → 𝜆
𝑎, $ → 𝑎$
𝑏, 𝑎 → 𝑎 𝑐, 𝑎 → 𝜆

q0 q1 q2 q3
𝑏, 𝑎 → 𝑎 𝑐, 𝑎 → 𝜆 𝜆, $ → $
𝑏, 𝜆 → 𝜆
Langkah 7. Diinput c, maka pop a dan tidak ada yang di push

𝑎, 𝑎 → 𝑎𝑎 𝑏, 𝜆 → 𝜆
𝑎, $ → 𝑎$
𝑏, 𝑎 → 𝑎 𝑐, 𝑎 → 𝜆

q0 q1 q2 q3
𝑏, 𝑎 → 𝑎 𝑐, 𝑎 → 𝜆 𝜆, $ → $
𝑏, 𝜆 → 𝜆
Langkah 8. Maka tersisa stack $, string diterima.

Selain contoh diatas contoh PDA yang lain dari Bahasa bebas konteks adalah :

Contoh 1.
𝐿(𝑀) = { 𝑎𝑛+𝑚 𝑏 𝑛 𝑐 𝑚 |𝑛, 𝑚 ≥ 1 }, dimana 𝑎𝑛 dan 𝑎𝑚 di push kemudian 𝑎𝑛 di
pop oleh 𝑏 𝑛 dan 𝑎𝑚 akan di pop oleh 𝑐 𝑚 . Dengan PDA sebagai berikut
𝑎, 𝑎 → 𝑎𝑎
𝑎, $ → 𝑎$
𝑏, 𝑎 → 𝜆 𝑐, 𝑎 → 𝜆

q0 q1 q2 q3
𝑏, 𝑎 → 𝜆 𝑐, 𝑎 → 𝜆 𝜆, $ → $
Contoh 2.
𝐿(𝑀) = { 𝑎𝑛 𝑏 𝑛+𝑚 𝑐 𝑚 |𝑛, 𝑚 ≥ 1 }, dimana 𝑎𝑛 di push kemudian 𝑎𝑛 di pop
oleh 𝑏 𝑛 selanjutnya push 𝑏 𝑚 lalu di pop oleh 𝑐 𝑚 . Dengan PDA sebagai
berikut

𝑏, 1 → 11
𝑎, 0 → 00 𝑏, $ → 1$
𝑎, $ → 0$
𝑏, 0 → 𝜆 𝑐, 1 → 𝜆

q0 q1 q2 q3
𝑏, 0 → 𝜆 𝑐, 1 → 𝜆 𝜆, $ → $

Selain PDA diatas untuk 𝐿(𝑀) = { 𝑎𝑛 𝑏 𝑛+𝑚 𝑐 𝑚 |𝑛, 𝑚 ≥ 1 dapat juga


dikonstruksi seperti pada gambar berikut

𝑎, 0 → 00
1, 0 → 𝜆
𝑎, $ → 0$
𝑏, 1 → 11 𝑐, 1 → 𝜆

q0 q1 q2 q3
𝑏, 0 → 10 𝑐, 1 → 𝜆 𝜆, $ → $

Contoh 3.
𝐿(𝑀) = { 𝑎𝑛 𝑏 2𝑛 |𝑛 ≥ 1 }, dimana 𝑎𝑛 di push kemudian 𝑎𝑛 di push lagi
setelah itu dipop oleh 𝑏 𝑛 sehingga hanya 1⁄2 stack yang terhapus. Dengan
PDA sebagai berikut

𝑎, 0 → 000
𝑎, $ → 00$ 𝑏, 𝜆 → 0

q0 q1 q2
𝑏, 𝜆 → 0 𝜆, $ → $
atau

𝑎, 0 → 00
𝑎, $ → 0$

𝑏, 0 → 𝜆 q2
q0 q1 q3
𝑏, 0 → 0 𝜆, $ → $

𝑏, 0 → 0
Catatan : Untuk suatu 𝐿(𝑀) yang bukan Bahasa bebas konteks maka PDA
tidak dapat dikonstruksi contohnya 𝐿(𝑀) = { 𝑎𝑛 𝑏 𝑛 𝑐 𝑛 |𝑛 ≥ 1 }.

Selain PDA yang deterministik, PDA dapat juga dalam bentuk Non –
Deterministik atau biasa disebut Non – Deterministic PDA contohnya 𝐿(𝑀) =
{ 𝑤𝑤 𝑅 | 𝑤 ∈ {𝑎, 𝑏}+ } dengan PDA sebagai berikut
𝑎, 1 → 01
𝑎, 0 → 00 𝑏, 1 → 𝜆
𝑎, $ → 0$ 𝑎, 0 → 𝜆

q0 q1 q2
𝑎, 0 → 𝜆 𝜆, $ → $
𝑏, 1 → 𝜆

𝑏, $ → 1$
𝑏, 1 → 11
𝑏, 0 → 10
Misalkan string abba maka dengan pohon parsing diperoleh alur untuk string abba
yang diterima dan string abba yang ditolak.

𝑎𝑏𝑏𝑎, 𝑞0 , $

𝑏𝑏𝑎, 𝑞0 , 0$

𝑏𝑎, 𝑞0 , 10$

𝑎, 𝑞0 , 0$ 𝑎, 𝑞0 , 110$

𝜆, 𝑞0 , $ 𝜆, 𝑞0 , 0110$

DITERIMA DITOLAK

Anda mungkin juga menyukai