Kata Pengantar
Teori bahasa dan automata merupakan salah satu mata kuliah yang wajib di
jurusan-jurusan informatika maupun ilmu komputer. Salah satunya pada STMIK Asia
Malang. Mata kuliah ini mempelajari tentang notasi-notasi bahasa yang digunakan dalam
komputer. Bahasan dalam mata kuliah ini akan banyak diimplementasikan pada teknik
kompilasi. Oleh sebab itu akan terasa manfaatnya pada saat anda mempelajari tentang
kompilasi.
Penulis mencoba menyajikan sesuatu dengan cara sesederhana mungkin dengan
bahasa yang mudah diterima sehingga mengurangi kesulitan mahasiswa pada perkuliahan
ini. Penulis mengharapkan pembaca bisa menangkap materi dan persoalan-persoalan
yang
diberikan.
Diharapkan
pembaca
dapat
menikmati
permasalahan
tanpa
memandangnya sebagai sesuatu yang sulit. Sesuai dengan namanya, mata kuliah ini
hanya memuat teori saja, tanpa memuat hal-hal praktis yang dapat diterapkan langsung
dalam praktek.
Penulis menyadari bahwa maz banyak kekurangan di sini, baik kesalahan
pengetikan maupun kekurangtepatan dalam penjelasan. Penulis dengan senang hati akan
menerima saran dan kritik membangun dari pembaca, dapat disampaikan melalui e-mail
rideinsar30@yahoo.com.
Tidak lupa penulis mengucapkan terima kasih yang tak terhingga lepada ALLAH
SWT atas segala berkahnya, Ibunda tercinta yang akhir-akhir ini sering missed, Suamiku
tercinta yang kadang-kadang juga nyebelin, dan calon dede dalam perutku yang akan
menjadi semangat sepanjang hidupku. Serta semua saudaraku, sahabatku serta rekan
rekan kerja di ASIA Malang.
Daftar Isi
Kata Pengantar .............................................................................................
ii
1.1
1.2
1.1.2
1.1.3
Teori Pembuktian.....................................................................
1.1.4
Kompilasi .........................................................................................
1.2.1
1.2.2
Translator ................................................................................
1.2.3
Interpreter ................................................................................
1.2.4
Assembler ...............................................................................
1.2.5
Compiler .................................................................................
2.2
13
13
2.1.1
13
2.1.2
Automata .................................................................................
13
2.1.3
String .......................................................................................
14
2.1.4
14
2.1.5
16
17
2.2.1
Definisi ....................................................................................
17
2.2.2
Simbol .....................................................................................
17
2.2.3
18
2.2.4
Grammar .................................................................................
18
2.2.5
19
2.2.6
21
24
ii
3.1
24
3.2
25
3.3
25
3.4
26
3.5
27
3.6
Ekuivalen .........................................................................................
29
3.7
Indistinguishable ..............................................................................
29
3.8
Distinguishable ................................................................................
29
3.9
30
30
32
4.1
32
4.2
34
4.3
34
4.4
35
37
5.1
37
5.2
38
5.3
39
5.4
39
5.5
41
5.6
Pumping Lemma...............................................................................
41
43
6.1
43
6.2
44
6.3
45
47
7.1
47
7.2
48
7.3
49
7.4
49
iii
7.5
50
7.6
50
7.7
51
7.8
Substitusi ..........................................................................................
52
7.9
52
53
8.1
53
8.2
55
8.3
57
8.4
58
60
9.1
Pengertian ........................................................................................
60
9.2
60
9.3
60
9.4
61
9.5
63
69
69
69
70
73
73
73
77
77
77
78
83
83
83
83
iv
84
84
Bab XIV : Aplikasi FSA dan CFG pada Pengembangan Kompilator .....
87
87
87
88
90
99
Bab I
PENGANTAR
1.1. Teori Pengantar
1.1.1. Teori Himpunan
Definisi sebuah himpunan adalah kumpulan obyek atau simbol yang memiliki
sifat yang sama. Anggota himpunan disebut elemen
Contoh:
Terdapat sebuah himpunan X = {1, 2, 4}, maka
1X
3X
A. Himpunan Sama
Himpunan dikatakan sama bila memuat elemen - elemen yang sama.
Contoh :
Terdapat beberapa himpunan,
X = {1, 2, 4}
Y = {4, 1, 2}
Z = {1, 2, 3}
Maka,
X=Y
X
Maka,
A B dan C B, maka A = C
C. Himpunan Kosong
Himpunan kosong atau null () merupakan bagian dari semua himpunan.
Contoh :
Terdapat himpunan,
Maka,
A = {1, 2, 3}
B = {1, 2, 3, 4}
C = {1, 2, 3}
P = A B, maka
P = {x | x A atau x B}
P = {1, 2, 3, 4}
P = A B, maka
P = {x | x A dan x B}
P = {2}
A C = , disebut saling lepas (disjoint)
AB=A
o AB
AB=B
o AA=A
o AA=A
o Komunikatif, A B = B A
AB=BA
o Assosiatif,
A ( B C ) = (A B) C
A ( B C ) = (A B) C
o Distributif,
A ( B C ) = (A B) ( A C)
A ( B C ) = (A B) ( A C)
o Hukum DeMorgan,
A B = A B
(A B) = A B
o (A B) = A B
o (A) = A
o = U
o U =
B dan g : A
B, maka
f=g
f(x) f(y)
4. X Y B
f-1(x) f-1(y)
5. X B dan Y B
Kombinasi
Fungsi dapat dikombinasikan dengan cara komposisi, dinotasikan dengan o
Misal:
f(x) = 2x + 1
g(x) = x2
Maka,
g o f(x) = g(2x + 1) = (2x + 1)2 = 4x2 + 4x + 1
V = vertex / titik
E = edge / sisi
|V(G)| = banyak titik pada graph G = E+1
|E(G)| = banyak sisi pada graph G = V-1
V9
V2
V6
V3
V4
V5
o Lup/ gelung, adalah sisi yang menghubungkan titik dengan titik itu sendiri.
o Titik terminal, adalah titik yang berderajat 1
o Derajat, adalah banyaknya sisi dalam 1 titik
o Titik terasing, adalah titik yang berderajat nol
Jumlah sisi
|E(G)| = degV(G)/2
v1
v2
Deg = 3-1 = 2
o Euler
v3
o Hamilton
-
1.2. Kompilasi
1.2.1. Bahasa Pemrograman
Bahasa
mesin
Bahasa
Assembly
Bahasa
Pemrograman
Bahasa
Tingkat tinggi
Bahasa
Problem Oriented
1.2.2. Translator
Translator melakukan pengubahan source code/ kode program kedalam target
code/ object code. Interpreter dan Compiler termasuk dalam kategori translator.
Interpreter
Translator
Compiler
Source Code adalah bahasa tingkat tinggi.
Object Code adalah bahasa mesin atau assembly.
Contoh: PASCAL, C.
1.2.3. Interpreter
Penanganan
Kesalahan
Progra
m
Analisa
Leksikal
Analisa
Sintaks
Intermediate
Program
Interpretas
i
Hasil
Operasi
Pengelolaan
Tabel
1.2.4. Assembler
Source
Code
Assembl
er
Object
Code
.ASM
.OBJ
Proses Sebuah Kompilasi pada
Bahasa Assembler
Lingke
r
File
Target
.EXE / .COM
Keterangan :
Source Code adalah bahasa Assembler, Object Code adalah bahasa Mesin.
Object Code dapat berupa file object (.OBJ), file .EXE, atau file .COM
Contoh : Turbo Assembler (dari IBM) dan Macro Assembler (dari Microsoft).
1.2.5. Compiler
Kompilator (compiler) adalah sebuah program yang membaca suatu program
yang ditulis dalam suatu bahasa sumber (source language) dan menterjemahkannya ke dalam suatu bahasa sasaran (target language).
Proses kompilasi dapat digambarkan melalui sebuah kotak hitam (black box)
berikut :
A. Fase Compiler
Proses kompilasi dikelompokkan ke dalam dua kelompok besar :
1. Analisis (front-end) :
a. program sumber dipecah-pecah dan dibentuk menjadi bentuk
antara (inter-mediate representation)
b. Language Independent
2. Sintesis (back-end) :
a. membangun program sasaran yang diinginkan dari bentuk antara
b. Language dependent
Program
Sasaran
ANALISA
Penganalisa
Leksikal
(scanner)
SINTESA
Penganalisa
Semantik
Pembangkit
Kode antara
Penganalisa
Sintaks
(parser)
Pembentuk
kode
Pengoptimal
kode
TABEL
SIMBOL
Keterangan
1. Program Sumber : ditulis dalam bahasa sumber (Pascal, Assembler, dsb)
2. Program Sasaran : dapat berupa bahasa pemrograman lain atau bahasa
mesin pada suatu komputer.
3. Penganalisa Leksikal : membaca program sumber, karakter demi
karakter. Sederetan (satu atau lebih) karakter dikelompokkan menjadi satu
kesatuan mengacu kepada pola kesatuan kelompok karakter (token) yang
ditentukan dalam bahasa sumber. Kelompok karakter yang membentuk
sebuah token dinamakan lexeme untuk token tersebut. Setiap token yang
dihasilkan disimpan di dalam tabel simbol. Sederetan karakter yang tidak
mengikuti pola token akan dilaporkan sebagai token tak dikenal
(unidentified token).
4. Penganalisa sintaks : memeriksa kesesuaian pola deretan token dengan
aturan sintaks yang ditentukan dalam bahasa sumber. Sederetan token
yang tidak mengikuti aturan sintaks akan dilaporkan sebagai kesalahan
sintaks (sintax error). Secara logika deretan token yang bersesuaian
dengan sintaks tertentu akan dinyatakan sebagai pohon parsing (parse
tree).
10
5. Penganalisa semantik : memeriksa token dan ekspresi dari batasanbatasan yang ditetapkan. Batasan-batasan tersebut misalnya :
a. panjang maksimum token identifier adalah 8 karakter,
b. panjang maksimum ekspresi tunggal adalah 80 karakter,
c. nilai bilangan bulat adalah -32768 s/d 32767,
d. operasi aritmatika harus melibatkan operan-operan yang bertipe
sama.
Melakukan analisa semantik, biasanya dalam realisasi akan digabungkan
Dengan
intermediate
code
generator
(bagian
yang
berfungsi
C. Pembuatan Compiler
Pembuatan kompilator dapat dilakukan dengan:
1. Bahasa Mesin
Tingkat kesulitannya tinggi, bahkan hampir mustahil dilakukan.
11
2. Bahasa Assembly
Bahasa Assembly bisa dan biasa digunakan sebagai tahap awal pada
proses pembuatan sebuah kompilator.
3. Bahasa Tingkat Tinggi lain pada mesin yang sama
Proses pembuatan kopilator akan lebih mudah.
4. Bahasa tingkat tinggi yang sama pada mesin yang berbeda
Misal, pembuatan kompilator C untuk DOS, berdasar C pada UNIX.
5. Bootstrap
Pembuatan kompilator secara bertingkat.
Library Object
Code
Source
Code 1
Compiler 1
Source
Code 2
Compiler 2
Source
Code n
Compiler n
Object
Code 1
Object
Code 2
Lingker
Executable
Object
Code n
Keterangan :
o Pembentukan file Executable berdasar dari beberapa Source Code.
o Source Code dapat terdiri dari satu atau lebih behasa
pemrograman.
D. Penggunaan Compiler selain untuk programming
o Mentranslasikan javadoc ke html.
o Mendapatkan hasil dari SQL query (query optimization).
o Printer parsing PostScript file.
o Screen Scrapping.
o Konversi LaTeX ke PDF.
12
Bab II
KONSEP BAHASA AUTOMATA
Teori Bahasa
Teori bahasa membicarakan bahasa formal (formal language), terutama untuk
kepentingan perancangan kompilator (compiler) dan pemroses naskah (text
processor). Bahasa formal adalah kumpulan kalimat. Semua kalimat dalam
sebuah bahasa dibangkitkan oleh sebuah tata bahasa (grammar) yang sama.
Sebuah bahasa formal bisa dibangkitkan oleh dua atau lebih tata bahasa berbeda.
Dikatakan bahasa formal karena grammar diciptakan mendahului pembangkitan
setiap kalimatnya. Bahasa manusia bersifat sebaliknya; grammar diciptakan untuk
meresmikan kata-kata yang hidup di masyarakat. Dalam pembicaraan selanjutnya
bahasa formal akan disebut bahasa saja.
2.1.2
Automata
Automata adalah mesin abstrak yang dapat mengenali (recognize), menerima
(accept), atau membangkitkan (generate) sebuah kalimat dalam bahasa tertentu.
Automata berkaitan dengan teori mesin abstrak, yaitu mesin sekuensial yang
menerima input, dan mengeluarkan output, dalam bentuk diskrit.
Contoh :
o Mesin Jaja / vending machine
o Kunci kombinasi
o Parser/compiler
Teori Otomata dan bahasa formal berkaitan dalam hal, yaitu:
o Pembangkitan kalimat/ generation : menghasilkan semua kalimat dalam
bahasa L berdasarkan aturan yang dimilikinya.
o Pengenalan kalimat/ recognition : menentukan suatu string (kalimat) termasuk
sebagai salah satu anggota himpunan L.
13
2.1.3
String
2.1.3.1
Definisi
Simbol adalah sebuah entitas abstrak. Sebuah huruf atau sebuah angka
adalah contoh simbol.
String adalah deretan terbatas (finite) simbol-simbol. Sebagai contoh, jika a,
b, dan c adalah tiga buah simbol maka abcb adalah sebuah string yang
dibangun dari ketiga simbol tersebut.
Alfabet adalah hinpunan hingga (finite set) simbol-simbol
2.1.3.2
Panjang String
Definisi 1: sebuah string dengan panjang n yang dibentuk dari himpunan A
adalah barisan dari n simbol. Misalnya a1a2...an ;
ai A
String Hampa :
Definisi 2 : String kosong/ String hampa (null string), dilambangkan dengan
(atau ^) adalah untaian dengan panjang 0 dan tidak berisi apapun.
String hampa adalah sebuah string dengan nol buah simbol. Maka panjang
string hampa = 0.
String hampa dapat dipandang sebagai simbol hampa karena keduanya
tersusun dari nol buah simbol.
2.1.4
14
15
2.1.5
Postfix(x)
ProperPostfix(x)
Tail(x)
16
Definisi
Tata Bahasa (grammar) bisa didefinisikan secara formal sebagai kumpulan dari
himpunan-himpunan variabel, simbol-simbol terminal, simbol awal, yang dibatasi
oleh aturan-aturan produksi.
Bahasa adalah himpunan kalimat-kalimat. Anggota bahasa bisa tak hingga kalimat.
Kalimat adalah deretan hingga (string) yang tersusun atas simbol-simbol terminal.
Sentensial adalah string yang tersusun atas simbol-simbol terminal atau simbolsimbol non terminal atau campuran keduanya.
Kalimat adalah merupakan sentensial, sebaliknya belum tentu.
Derivasi adalah proses pembentukan sebuah kalimat atau sentensial. Sebuah derivasi
dilambangkan sebagai :
2.2.2
Simbol
A. Simbol Terminal
Pengertian terminal berasal dari kata terminate (berakhir), maksudnya derivasi
berakhir jika sentensial yang dihasilkan adalah sebuah kalimat (yang tersusun atas
simbol-simbol terminal itu).
Simbol terminal adalah simbol yang tidak dapat diturunkan lagi.
Simbol-simbol berikut adalah simbol terminal :
-
17
Huruf besar akhir alfabet melambangkan simbol terminal atau non terminal,
misalnya : X, Y, Z.
Huruf kecil akhir alfabet melambangkan string yang tersusun atas simbol-simbol
terminal, misalnya : x, y, z.
Huruf yunani melambangkan string yang tersusun atas simbol-simbol terminal
atau simbol-simbol non terminal atau campuran keduanya, misalnya : , , dan .
2.2.3
Aturan Produksi
Aturan produksi men-spesifikasikan bagaimana suatu tatabahasa melakukan
transformasi suatu string ke bentuk lainnya. Melalui aturan produksi didefinisikan
suatu bahasa yang berhubungan dengan tata bahasa tersebut. Sebuah produksi
dilambangkan sebagai (bisa dibaca
menghasilkan ),
Grammar
Grammar G didefinisikan sebagai pasangan 4 tuple : VT, VN, S, dan P.
Dituliskan sebagai G(VT, VN, S, P), dimana :
18
- VT
- VN
- S VN
-P
: himpunan produksi.
kamus.
Contoh Grammar :
1. G1 : VT = {I, Love, Miss, You}, VN = {S,A,B,C},
P = {S ABC, A I, B Love | Miss, C You}
S
ABC
IloveYou
L(G1)={IloveYou, IMissYou}
2. G2 : VT = {a}, VN = {S}, P = {S aSa}
S
aS
aaS
aaa
L(G2) ={an n
1}
Klasifikasi Chomsky
Noam Chomsky melakukan penggolongan tingkatan bahasa berdasarkan aturan
produksinya yang disebut dengan Hierarki Chomsky (1959). Berdasarkan
komposisi bentuk ruas kiri dan ruas kanan produksinya ( ), Noam Chomsky
mengklasifikasikan 4 tipe grammar.
Tipe sebuah grammar (atau bahasa) ditentukan dengan aturan sebagai berikut :
A language is said to be type-i (i = 0, 1, 2, 3) language if it can be specified
by a type-i grammar but cant be specified any type-(i+1) grammar.
Klasifikasi Chomsky
1. Grammar tipe ke-0 : Unrestricted Grammar (UG)
Ciri : , (VTVN)*, > 0
19
dianggap
20
Regular Grammar, RG
Keterkaitan Bahasa
2.2.6
Analisa Grammar
A.
21
Ruas kirinya mengandung string yang panjangnya lebih dari 1 (yaitu aAb)
maka G3 kemungkinan tipe CSG atau UG. Selanjutnya karena semua ruas
kirinya lebih pendek atau sama dengan ruas kananya maka G3 adalah CSG
(1).
4. Grammar G4 dengan P4 = {S aAb, B aB}.
Ruas kiri semua produksinya terdiri dari sebuah VN maka G4 kemungkinan
tipe CFG atau RG. Selanjutnya karena ruas kanannya mengandung string
yang panjangnya lebih dari 2 (yaitu aAb) maka G4 bukan RG, dengan kata
lain G4 adalah CFG (2).
B.
aAa
(1)
aba
(3)
aAa
(1)
aaAaa
(2)
anAan
(2)
anban
(3)
aB
(2)
abC
(3)
aba
(5)
aS
(1)
an-1S
(1)
an B
22
(2)
anbC
(3)
anbaC
(4)
anbam-1C
(4)
anbam
(5)
P1 (L1) = {S aSa}
23
Bab III
FINITE STATE AUTOMATA
Finite State Automata/ FSA adalah mesin yang dapat mengenali bahasa reguler tanpa
menggunakan storage (memory). FSA tidak memiliki tempat penyimpanan (memory),
tetapi hanya bisa mengingat state terkini saja.
FSA disebut juga dengan Automata Hinga (AH). FSA/ AH sangat berhubungan dengan
Regular Grammar. Dan merupakan kelas mesin dengan kemampuan-kemampuan yang
paling terbatas.
FSA memiliki state yang berhingga banyaknya dan dapat berpindah dari satu state ke
state lainnya berdasar input dan fungsi transisi. Sejumlah status dapat didefinisikan pada
mesin untuk mengingat beberapa hal secara terbatas.
Manfaat nyata:
1. Software untuk mendesain dan mengecek perilaku sirkuit digital. Contoh: mesin
ATM.
2. BagianLexical Analyzer dari berbagai kompiler yang berfungsi membagi teks
input menjadi logical unit seperti Keyword, Identifier, dan pungtuasi.
3. Search engine
3.1
menscan web, dan menemukan kata, frase atau pola yang tepat.
Definisi Formal
Definisi 1: FSA didefinisikan sebagai pasangan 5 tupel : (Q, , , S, F).
Q : himpunan hingga state
: himpunan hingga simbol input (alfabet)
: fungsi transisi, menggambarkan transisi state FSA akibat pembacaan
simbol input. Fungsi transisi ini biasanya diberikan dalam bentuk tabel.
S Q : state AWAL
F Q : himpunan state AKHIR
Mekanisme kerja FSA dapat diaplikasikan pada: elevator, text editor, analisa
leksikal, pencek parity.
24
3.2
Fungsi Transisi
Untuk q, r Q dan a , jika (q,a) = r terdefinisi, maka saat mesin berada dalam
status q menerima masukan simbol a, mesin akan bertransisi ke status r. Dengan
diagram status digambarkan dengan bulatan dan transisi dengan panah, sbb:
S = Gnp
F = {Gjl}
Diagram Transisi untuk mengecek parity ganjil
3.3
2Q
25
o Dari suatu state ada 0, 1 atau lebih state berikutnya untuk setiap
simbol masukan yang diterima.
3.4
Transisi Digraph
Contoh DFA :
1. Pengujian parity ganjil.
2. Pengujian untuk menerima bit string dengan banyaknya 0 genap, serta
banyaknya 1 genap.
-
0011 : diterima.
Diagram transisi-nya :
start
q0
0
q2
DFA nya :
q1
0
q3
(Ditolak)
(Diterima)
3. Variabel dalam bahasa pascal diawali oleh huruf (besar/kecil), dan diikuti
dengan huruf atau angka. Diagram Transisinya sebagai berikut:
26
A..Z,a..z,0..9
start
q0
A..Z,a..z
q0
0..9
A..Z,a..z,0..9
q0
Contoh kalimat yang diterima AHD: a, b, aa, ab, ba, aba, bab, abab, baba
Contoh kalimat yang tidak diterima AHD: bb, abb, abba
AHD ini menerima semua kalimat yang tersusun dari simbol a dan b yang
tidak mengandung substring bb
3.5
27
Contoh NFA:
1. NFA (Q, , , S, F). dimana :
Q = {q0, q1, q2,q3, q4}
= {a, b,c}
diberikan dalam tabel berikut:
S = q0
F = {q4}
Diagram Transisinya:
Kalimat yang diterima NFA di atas : aa, bb, cc, aaa, abb, bcc, cbb
Kalimat yang tidak diterima NFA di atas : a, b, c, ab, ba, ac, bc
2.
Diagram transisi:
0,1
q3
0,1
q4
0
q0
0,1
1
q1
28
q2
q0
q0
1
q3
q0
0
q1
q0
0
q3
q0
1
q3
q1
0
q4
3.6
q4
Ekuivalen
Definisi 2: Dua buah FSA disebut ekuivalen apabila kedua FSA tersebut menerima
bahasa yang sama.
Contoh : FSA yang menerima bahasa {an | n0 }
a
q4
3.7
q4
q4
Indistinguishable
Definisi 3: Dua buah state dari FSA disebut indistinguishable (tidak dapat
dibedakan) apabila :
3.8
Distinguishable
Definisi 4: Dua buah state dari FSA disebut distinguishable (dapat dibedakan) bila
terdapat w * sedemikian hingga:
-
29
3.9
0
q2
0,1
q4
q3
5
5!
=
= 10
2
2!3!
30
Contoh :
-
0
q0
0,1
q123
31
q4
Bab IV
Ekuivalensi NFA ke DFA
4.1
0
q0
0,1
q1
1
State yang akan dibentuk :
{}, {q0} {q1},{q0,q1}
Telusuri state
32
{q1}
0,1
{q0}
1
{}
{q0,q1}
Diagram transisi-nya :
q0
q1
q2
{q1,q2}
{q1}
r
p
{}
{q2}
p,r
33
p,r
4.2
q1
q3
q4
q2
Def 2. -closure adalah himpunan state yang dapat dicapai dari suatu state tanpa
adanya input. Contoh gambar :
4.3
-closure(q0) = [q0,q1,q3]
-closure(q1) = [q1,q3]
-closure(q3) = [q3]
q1
q2
b
q3
Tabel transisi-nya
34
-closure(q0) = [q0,q1]
-closure(q1) = [q1]
-closure(q2) = [q2]
-closure(q3) = [q3]
Hasilnya menjadi :
a
q2
a
q0
q1
b
b
4.4
q3
Penggabungan FSA
Bila diketahui L1 adalah bahasa yang diterima oleh M1 dan L2 adalah bahasa yang
diterima oleh M2 maka :
a. FSA M3 yg dapat menerima L1+L2 dibuat dengan cara
-
Tambahkan state awal untuk M3, hubungkan dengan state awal M1 dan
state awal M2 menggunakan transisi
Contoh :
- FSA M1 dan M2
0
qA0
qA1
qB0
qB1
0
- FSA M3
0
qA0
qA1
qS
qB0
qF
qB1
- FSA M4
0
qA0
1
qA1
qB0
1
0
36
qB1
Bab V
Ekspresi Reguler
5.1
Bahasa regular
Bahasa disebut reguler jika terdapat FSA yang dapat menerimanya. Bahasa reguler
dinyatakan secara sederhana dengan ekspresi reguler/regular expression (RE).
Contoh penerapan : searching string pada file
Hubungan RE dan NFA : Setiap RE ada satu NFA dengan -move yang ekuivalen.
Konversi bentuk dari ekspresi regular menjadi bentuk DFA:
RE -> NFA dengan Move -> DFA
Makna
r+t
rt
r*
(r)
(0+1)* : himpunan seluruh string yang dapat dibentuk dari simbol 0 dan 1
Apabila r adalah RE, maka L(r) adalah bahasa reguler yang dibentuk menggunakan
ekspressi reguler r.
37
L( (aa)* )
{ a2 n | n 0 }
Jawab: r = (0+1)*00(0+1)*
5.2
Jika L1 adalah bahasa reguler, maka homomorphic image h(L1) adalah bahasa
reguler juga.
Contoh:
Dimisalkan = {a,b} dan = {a,b,c} dan didefinisikan h(a) = ab dan h(b) =bbc
homomorphic image bahasa L = {aa,aba } adalah :
Jawab: h(L)= { abab, abbbcab}
38
5.3
5.4
39
Contoh :
-
5.4.2
q1
q2
b
q3
40
V1 abV0 | b
Mesin FSA nya menjadi
V0
V1
5.5
Vf
5.6
Editor text
Pumping lemma
Apabila suatu bahasa merupakan bahasa reguler maka akan dapat diterima oleh
mesin DFA M=(Q,,,q0,F), dgn sejumlah state n. Apabila string w dengan |w| n
diinputkan dalam DFA, maka pasti ada simpul k dalam DFA yang dikunjungi lebih
dari satu kali. Apabila string diantara simpul k yang sama tersebut dipompa, maka
sisanya pasti masih diterima oleh DFA tersebut.
Contoh : Bahasa yang menerima ekspresi reguler 0(10)*11
q0
q1
q3
1
q2
0 q1 1 q2
41
q1
q3 1
q4
q4
q0
0 q1 1
q3 1
q4
(L )(n )(z )
zL z n
Penjelasan,
Untuk memperlihatkan bahwa suatu bahasa infinite tidak reguler, maka kita
tunjukkan bahwa untuk nilai n yang cukup besar, sekurang-kurangnya satu untai
yang panjangnya n atau lebih besar gagal untuk dapat dipompa
Contoh :
L=
{ai^2 | i1}
{a1, a4,a9, a16, ...}
{a , aaaa , aaaaaaaaa , aaaaaaaaaaaaaaaa, ... }
Suatu string dalam L harus mempunyai panjang yang berupa nilai kuadrat
(1,4,9,16, ..., n2, ...). Misal bahwa L adalah bahasa reguler.
Perhatikan bahwa terdapat sebuah nilai n sedemikian sehingga an^2 L,
Menurut pumping lemma dapat kita tuliskan an^2 = uvx, sedemikian hingga
-
1 |v| n
(i) (uviw L)
Bab VI
FSA dengan Output
43
1012 =5
-
jika i/3 mempunyai sisa p, maka untuk input berikutnya bernilai 0 maka
2i/3 mempunyai sisa 2p mod 3
a. untuk p=0 maka 2p mod 3 = 0
b. untuk p=1 maka 2p mod 3 = 2
c. untuk p=2 maka 2p mod 3 = 1
jika i/3 mempunyai sisa p, maka untuk input berikutnya bernilai 1 maka
(2i+1)/3 mempunyai sisa (2p+1) mod 3
a. untuk p=0 maka (2p+1) mod 3 = 1
b. untuk p=1 maka (2p+1) mod 3 = 0
c. untuk p=2 maka (2p+1) mod 3 = 2
1
1
1
q1/1
q2/2
Contoh :
a. input 5 (1012) , state terakhir q2/2 , 5 mod 3 = 2
b. input 10 (10102) ,state terakhir q1/1, 10 mod 3=1
Jawab :
M = (Q,,,S,,)
Q : q0,q1,q2
: [0,1]
0/Y
q1
S : q0
0/T
: [0,1,2]
q0
(q0,0) =T
1/T
(q0,1) =T
1/T
q2
(q1,0) =Y
1/Y
(q1,1) =T
(q2,0) =T
(q2,1) =Y
q1T
0
q0Y
q2T
1
q1Y
0
6.3.2
q2Y
1
45
0/T
0/0
q0
1/2
1/1
q1
1/0
0/2
q2
0/1
Contoh kasus 1:
Tentukan FSA dari rangkaian sirkuit berikut ini. Asumsi bahwa terdapat
waktu yang cukup untuk perambatan sinyal menuju kondisi yang stabil.
y1
F
input x
y2
Contoh kasus 2
Kelereng dijatuhkan dari A atau B. Percabangan x1,x2 dan x3 menentukan
saluran mana yang akan dilewati kelereng (kiri / kanan). Ketika percabangan
dilewati, kelereng berikutnya akan melewati dengan saluran berbeda.
Buatlah FSA nya
A
X1
X2
X3
46
Bab VII
Bahasa Bebas Konteks
<subjek> <predikat>
<subjek>
<kata benda>
<predikat>
<kata kerja>
<kata benda>
kucing
<kata kerja>
berlari
<kata kerja>
menyapu
Ruas kiri dari aturan produksi terdiri dari SATU simbol non terminal
Ruas kanan dapat berupa string yang dibentuk dari simbol terminal dan non
terminal.
Contoh
1. S aSb |
Kalimat-kalimat yang dibangkitkan dari aturan produksi itu adalah
,ab,aabb,aaabbb,... , anbn
2. A 0A0
A 1A1
Aa
Kalimat-kalimat yang dibangkitkan dari aturan produksi itu adalah a,01a10,
1001a1001 , 110a011 aR
3. S aSb | SS |
47
Menspesifikasikan bahasa
L(G) = {a2nbm | n0 , m0}
AB
aaAB
aaB
aaBb
aab
AB
ABb
aaABb
aaAb
aab
Contoh 2:
-
aAB
abBbB
abAbB
abbBbbB
abbbbB
aAB
aA
abBb
abAb
48
abbBbb
abbbb
abbbb
A
b
B
b
A
b
S SS | aSb | bSa |
SS
2. S
aSb
3. S
bSa
4. S
Penguraian 2 membentuk:
1a. S
SS
SSS
2a. S
aSb
aSSb
1b. S
SS
aSbS
2b. S
aSb
aaSbb
1c. S
SS
bSaS
2c. S
aSb
abSab
1d. S
SS
2d. S
aSb
ab
49
S
a
(L )(n )(z )
(u, v, w, x, y )
z = uvwxy vwx n vx 1
(i )(uv i wx i y L )
uAy
uwy
uAy
uvAxy
uvwxy
uAy
uvAxy
uvvAxxy
uvvwxxy
51
7.8 Substitusi
S aSbS | bSaS |
jika f adalah substitusi f(a)= La dan f(b) = Lb maka f(L) adalah bahasa yang
dihasilkan oleh tatabahasa dengan aturan produksi
S SaSSbS | SbSSaS |
Sa 0Sa1 | 01
Sb 0Sb0 | 2Sb2 |
52
Bab VIII
Penyederhanaan Tata Bahasa Bebas Konteks
Tujuan
Melakukan pembatasan sehingga tidak menghasilkan pohon penurunan yang memiliki
kerumitan yang tidak perlu atau aturan produksi yang tidak berarti.
Contoh
1. S
AB | a
A a
Aturan produksi S
2. S A
A B
B C
C D
D
a|A
a,
Cara Penyederhanaan:
1. Penghilangan produksi useless (tidak berguna)
2. Penghilangan produksi unit
3. Penghilangan produksi
8.1
53
Contoh :
1. S
Ada
BBB | a
Maka,
-
Penyederhanaan menjadi:
S aSa | Bde
B
2. S
BBB | a
Aa | B
A ab | D
B
b|E
bb
aEa
Maka,
-
Aturan produksi A
Aturan produksi C
memiliki penurunan.
Maka produksi yang useless:
3. S
Penyederhanaannya menjadi:
bb
ab
aEa
aAb | cEB
54
Aa | B
dBE | eeC
ff
ae
Analisa :
-
Aturan produksi S
cEB, A
penurunan)
-
Aturan produksi D
h, redundan
aAb
eeC
ff
ae
Hasil penyederhanaan :
S
aAb
eeC
ae
ff juga redundan,
Analisis lagi
8.2
Produksi dimana ruas kiri dan kanan aturan produksi hanya berupa satu simbol
variabel, misalkan: A
B, C
Sb
ef
dd
55
D => C
dd
C => S
dd | ef
2. S
Sb
dd | ef
dd
ef
dd
Aa
ab
D => C
C => B
b | ab, karena B
B => A
A => ab | b
ab | b
ab | b
Aa
ab | b
ab
ab
56
ab
8.3
Penghilangan Produksi
Produksi
penggantian produksi yang memuat variabel yang bisa menuju produksi , atau
biasa disebut nullable.
Prinsip penggantiannya bisa dilihat kasus berikut:
S
bcAd
A
A nullable serta A
bcd
Contoh:
1. Tetapi bila kasusnya:
S
bcAd
bd |
A nullable, tapi A
penyederhanaan:
2. S
bcAd | bcd
bd
Ab | Cd
C
Variabel yang nullable adalah variabel C. Karena penurunan C
merupakan penurunan satu-satunya dari C, maka kita ganti S
S
d. Kemudian produksi C
kita hapus.
Ab | d
AaCD
57
Cd menjadi
CD | AB
b|
d|
D
Variabel yang nullable adalah variabel B, C, D.
Kemudian dr A
AaCD => S
CD => A
). Karena D
AaC
C
kita hapus
AB => A
AB | A | B
AaC => S
AaC | aC | Aa | a
dan C
kita hapus
Setelah penyederhanaan:
S
AaC | aC | Aa | a
C | AB | A | B
8.4
Pengembangan praktek
Ketiga penyederhanaan tersebut dilakukan bersama pada suatu tata bahasa bebas
konteks, yang nantinya menyiapkan tata bahasa bebas konteks tersebut untuk
diubah kedalam suatu Bentuk Normal Chomsky (BNF)
Urutan penghapusan aturan produksi :
-
Hilangkan produksi
Contoh:
S
AA | C | bd
58
Bb |
AB | d
de
Jawab:
-
A | AA | C | bd
Bb
B | AB | d
de
Bb | AA | de | bd
Bb
AB | d
de
Bb | AA | de | bd
Bb
AB | d
Hasil akhir aturan produksi tdk lagi memiliki produksi , produksi unit,
maupun produksi useless.
59
Bab IX
Bentuk Normal Chomsky
9.1 Pengertian
Bentuk normal Chomsky / Chomsky Normal Form (CNF) merupakan salah satu
bentuk normal yang sangat berguna untuk tata bahasa bebas konteks (CFG). CNF
dapat dibuat dari sebuah tata bahasa bebas konteks yang telah mengalami
penyederhanaan yaitu penghilangan produksi, useless, unit, dan .
Dengan kata lain, suatu tata bahasa bebas konteks dapat dibuat menjadi CNF dengan
syarat tata bahasa bebas konteks tersebut :
o
Aturan produksi dalam CNF ruas kanannya tepat berupa sebuah terminal atau dua
variabel. Misalkan:
o
BC
BA | d
60
1. S
bA | aB
bAA | aS | a
aBB | bS | b
bA => S
P1A
aB => S
P1B
bAA => S
aS => A
aBB => B
bS => B
P1AA => A
P1P3
P2S
P2BB => B
P2P4
P1S
61
2. S
P1
P2
P3
AA
P4
BB
P1A
P2B
P1P3
P2S
P2P4
P1S
P1
P2
P3
AA
P4
BB
aB | CA
a | bc
BC | Ab
aB | b
CA
BC
aB => S
P1B
bc => S
P2P3
Ab => B
A P2
62
C
-
aB => C
P1B
P2
P3
CA
BC
P1B
P2P3
A P2
P1B
P1
P2
P3
3. for j:= 2 to n do
63
4.
begin
5.
Vij:=;
6.
for k:=1 to (j 1) do
7.
Vij:= Vij
(A|A
dan C di Vi+k,j-k }
end
end
Penjelasan
n = panjang untai yang akan diperiksa, missal : untuk untai ada, n = | ada | = 3
tahapan no (1) dan (2) untuk mengisi table baris pertama kolom 1 n
no (4), interasi untuk mengisi kolom 1 sampai ( n baris + 1) pada suatu baris.
no (6) dan no (7), interasi untuk memeriksa mana saja yang menjadi anggota Vij
AB | BC
BA | a
CC | b
AB | a
64
Tabel diatas kita gunakan untuk mempermudah kita dalam menyelesaikan persoalan,
i akan menyatakan kolom, j akan menyatakan baris.
Kita ketahui n = 5. Dari Algoritma langkah (1) dan (2) kita bisa mengisi baris pertama
pada tabel, sebagai berikut:
b kita isi
V11= {B}
a dan C
a dan C
b kita isi
V41={B}
a dan C
Untuk V12, periksa Vik- Vi+k, j-k, berarti V11-V21, yaitu B-A,C, variabel yang
bisa menurunkan BA atau BC adalah S dan A, maka V12 kita isi {S, A}
Untuk V22, periksa Vik Vi+k, j-k, berarti V21-V31, yaitu A,C-A,C, variabel yang
bisa menurunkan AA, AC, CA, atau CC adalah B maka V22 kita isi {B}
Untuk V32, periksa Vik-Vi+k, j-k, berarti V31-V41 yaitu A, C-B, variabel yang
bisa menurunkan AB atau CB adalah S dan C, maka V32 kita isi {S, C}
Untuk V42, periksa Vik-Vi+k, j-k berarti V41-V51, yaitu A,C-B, variabel yang bisa
menurunkan AB atau CB adalah S dan C, maka V42 kita isi {S,A}
65
Untuk V13, periksa Vik-Vi+k, j-k, berarti V11-V22 & V12-V31, yaitu B-B & S,AA,C, variabel yang bisa menurunkan BB, SA,SC,AA, atau AC adalah tidak
ada, maka V13 kita isi
Untuk V23, periksa Vik-Vi+k, j-k, berarti V21-V32 & V22-V41, yaitu A,C-S,C & BB, variabel yang bisa menurunkan AS, AC, CS, CC, atau BB adalah B , maka
V23 kita isi {B}
Untuk V33, periksa Vik-Vi+k, j-k, berarti V31-V42 & V32-V51, yaitu A,C-S,A &
S,C-A,C variabel yang bisa menurunkan AS, AA, CS, CA, SA, SC, CA, atau
CC adalah B, maka V33 kita isi {B}
Untuk V14, periksa Vik-Vi+k, j-k, berarti V11-V23 & V12-V32 & V13-V41, yaitu BB & S,A-S,C & -B, variabel yang bisa menurunkan BB, SS, SC, AS AC
adalah tidak ada, maka V14 kita isi
Untuk V24, periksa Vik-Vi+k, j-k, berarti V21-V33 & V22-V42 & V23-V51, yaitu
A,C-B & B-S,A & B-S,A & B-A,C, variabel yang bisa menurunkan AC, AB,
BS, BA, BC adalah S, C, A, maka V24 kita isi {S,A,C}
66
Untuk V15, periksa Vik-Vi+k, j-k, berarti V11-V24 & V12-V33 & V13-V42 & V14V51 yaitu B-S,A,C & S,A-B & -S,A & -A,C, variabel yang bisa
menurunkan BA, BC, SA, SC, SB, atau AB adalah A,S,C maka V15 kita isi
{S,A,C}
Perhatikan
Syarat suatu untai dapat diturunkan dari simbol awal, V1n memuat simbol
awal.
Terlihat pada tabel, simbol awal S termuat di V15, maka untai baaba dapat
diturunkan oleh tata bahasa tersebut.
Kita bisa mencoba-coba untuk membuat pohon penurunan dari untai baaba,
67
68
Bab X
Penghilangan Rekursif Kiri
Aturan Produksi yang rekursif memiliki ruas kanan (hasil produksi) yang memuat
simbol variabel pada ruas kiri.
- Sebuah aturan produksi dalam bentuk: A
rekursif kanan.
dS
adB
Contohnya:
S
Sd
Bad
Bisa dilihat pohon penurunan pada gambar dari tata bahasa bebas konteks dengan
aturan produksi:
S
aAc
Ab |
69
Dalam banyak penerapan tata bahasa, rekursif kiri tak diinginkan. Untuk
menghindari penurunan yang bisa mengakibatkan loop kita perlu menghilangkan
sifat rekursif kiri dari aturan produksi. Penghilangan rekursif kiri disini
memungkinkan suatu tata bahasa bebas konteks nantinya diubah ke dalam bentuk
normal Greibach.
| ........
1,
2,
....
n,
dan
1,
2,
....
1Z
1|
1Z
2Z
2
|
2Z
| ....
| ....
3Z
mZ
n
| ....
nZ
Penggantian diatas dilakukan untuk setiap aturan produksi dengan simbol ruas kiri
yang sama. Bisa muncul simbol variabel baru Z1,Z2 dan seterusnya, sesuai
banyaknya variabel yang menghasilkan produksi yang rekursif kiri.
4. Hasil akhir berupa aturan produksi pengganti ditambah dengan aturan produksi
semula yang tidak rekursif kiri.
5. Tahapan-tahapan tersebut bisa dilihat pada Gambar berikut :
Aturan produksi
yang tidak
rekursif kiri
CFG
mengandung
aturan
produksi yang
rekursif kiri
Lakukan penggantian
munculkan aturan
produksi baru dan
simbol variabel baru
Aturan produksi
yang rekursif kiri
70
CFG bebas
dari aturan
produksi yang
rekursif kiri
Contoh :
1. Tata bahasa bebas konteks:
S
-
Sab | Sbd
1=ab,
2=bd
aSc | dd | ff
1=aSc,
2=dd,
3=ff
aScZ1 | dd Z1 | ffZ1
Z1
ab | bd
Z1
abZ1 | bd Z1
aSc | dd | ff
aScZ1 | dd Z1 | ffZ1
Z1
ab | bd
Z1
abZ1 | bd Z1
Sab | Sb | cA
Aa | a | bd
Sab | Sb
Aa
71
1=
ab,
=b
=a
cA
a | bd
= cA
1
= a,
= bd
cAZ1
Z1
ab | b
Z1
abZ1 | bZ1
a Z2 | bdZ2
Z2
Z2
a Z2
cA
Z1
abZ1 | bZ1
a | bd
a Z2 | bdZ2
cAZ1
Z2
Z2
aZ2
Z1
ab | b
72
Bab XI
Bentuk Normal Greibach
a | aAB
aB
cS
Untuk dapat diubah ke dalam bentuk normal Greibach, tata bahasa semula harus
memenuhi syarat:
Tidak menghasilkan
Terdapat dua cara pembentukan bentuk normal Greibach , yaitu melalui substitusi
dan perkalian matriks.
73
2. Berdasarkan urutan simbol yang ditetapkan pada langkah (1) seluruh aturan
produksi yang ruas kanannya diawali dengan simbol variabel dapat dituliskan
dalam bentuk Ah
Ai
dimana h <> i (rekrusif kiri sudah dihilangkan), bisa berupa simbol variabel
a. Jika h < i, aturan produksi ini sudah benar ( tidak perlu diubah)
b. Jika h > i, aturan produksi belum benar. Lakukan substitusi berulangulang terhadap Ai (ganti Ai pada produksi ini dengan ruas kanan produksi
dari variabel Ai ) sehingga suatu saat diperoleh produksi dalam bentuk Ah
Ap (dimana h p )
- Jika h = p , lakukan penghilangan rekursif kiri
- Jika h < p, aturan produksi sudah benar
3. Jika terjadi penghilangan rekursif kiri pada tahap (2b), sejumlah simbol variabel
baru yang muncul dari operasi ini dapat disisipkan pada urutan variabel semula
dimana saja asalkan ditempatkan tidak sebelum Ah (di kiri)
4. Setelah langkah (2) & (3) dikerjakan maka aturan-aturan produksi yang ruas
kanannya dimulai simbol variabel sudah berada dalam urutan yang benar
Ax
Ay ( di mana x < y )
a ( a = simbol terminal )
Bx
(B2 = simbol variabel baru yang akan muncul sebagai akibat dari operasi
penghilangan rekursif kiri)
5. Bentuk normal Greibach diperoleh dengan cara melakukan substitusi mundur
mulai dari variabel Am, lalu Am-1, Am-2, ..... Dengan cara ini aturan produksi dalam
bentuk Ax
terminal.
6. Produksi dalam bentuk Bx
Contoh
74
(tata bahasa bebas konteks sudah dalam bentuk normal Chomsky dan memenuhi syarat
untuk diubah ke bentuk normal Greibach), simbol awal adalah S:
S
CA
a|d
DD
AB
AB, karena ruas kiri > simbol pertama pada ruas kanan. Maka kita lakukan
aB | dB
Setelah semua aturan produksi sudah memenuhi ketentuan urutan variabel, kita lakukan
substitusi mundur pada aturan produksi yang belum dalam bentuk normal Greibach
(=> dibaca menjadi):
DD => C
aBD | dBD
CA => S
aBDA | dBDA
*Perhatikan substitusi mundur dimulai dari aturan produksi yang memiliki ruas kiri
dengan urutan variabel paling akhir (kasus di atas:S<A<B<C<D, maka C lebih dulu
disubstitusikan daripada S)
Hasil akhir aturan produksi yang sudah dalam bentuk normal Greibach :
75
aBDA | dBDA
a|d
aBD | dBD
aB | dB
*Perhatikan : setiap substitusi kita lakukan pada simbol variabel pertama pada ruas kanan
( pada aturan produksi yang belum bentuk normal Greibach tentunya ).
Prinsipnya:
Tentukan pengurutan simbol variabel, berdasarkan kondisi aturan produksi yang ada
buatlah urutan sedemikian sehingga memudahkan untuk proses selanjutnya. Mulailah
terlebih dahulu dari seimbol awal.
Lakukan perubahan pada aturan produksi yang belum memenuhi ketentuan urutan
tersebut dan bila perlu selama proses itu bisa dilakukan substitusi dan penghilangan
rekursif kiri
Lakukan substitusi mundur sedemikian rupa sehingga semua aturan produksi akan
diawali dengan tepat sebuah simbol terminal. Proses substitusi mundur dimulai dari
aturan produksi dengan urutan paling akhir.
Lakukan substitusi mundur juga pada aturan produksi baru yang muncul sebagai hasil
penghilangan rekursif kiri.
76
Bab XII
PUSHDOWN AUTOMATA (PDA)
12.1 Pendahuluan
FA tidak mampu mengenali bahasa yang memiliki karakteristik xnyn. Hal ini
dikarenakan FA tidak memiliki kemampuan untuk mengingat jumlah kemunculan
x untuk digunakan pada saat memeriksa jumlah kemunculan y. Kita akan
tambahkan kemampuan mengingat berbentuk stack pada mesin modifikasi FA
sehingga dapat memecahkan permasalahan ini. Mesin ini dikenal dengan Pushdown
Automata (PDA).
PDA memiliki beberapa bagian yakni:
a. Input stream
b. Finite state
c. Mekanisme kontrol yang memungkinkan berpindah dari state 1 ke state lain.
d. Tepat 1 initial state
e. Minimal 1 final state/ accepted state
f. Stack yang berguna mengingat.
g. Machine symbol.
Machine symbol merupakan finite symbol yang dapat disimpan didalam stack.
Dan mungkin beberapa symbol yang tidak dikenal oleh alphabet (contoh#).
12.2 Transisi
Dengan adanya pengingat, maka mesin harus dapat melakukan beberapa hal pada
saat melakukan transisi:
Mem-pop simbol,
Mem-push simbol,
77
q Q : state pada saat tersebut, x * : bagian string input yang belum dibaca,
dan
(q, y, ).
78
adalah
cermin(x),
= {a, b, c},
= {A, B, Z0}, dan
fungsi transisi terdefinisi melalui tabel :
Sebagai contoh, perhatikan bahwa fungsi transisi No. 1 dapat dinyatakan sebagai :
(q, a, Z) = (q, aZ). Pada tabel transisi tersebut terlihat bahwa pada state q PDA
akan melakukan PUSH jika mendapat input a atau b dan melakukan transisi state ke
state q jika mendapat input c. Pada state q PDA akan melakukan POP.
Berikut ini pengenalan dua string oleh PDA di atas :
- abcba : (q0, abcba, Z0)
- ab : (q, ab, Z)
(1)
(4)
(9)
(q1, a, AZ0)
(11)
(q1, , Z0)
(10)
(q2, , Z0)
(12)
(1)
(q, b, AZ)
(8),
(q, b, AZ)
(1)
(q, , BAZ)
(4)
(diterima)
(crash ditolak)
(crash ditolak)
79
string abcba diterima karena tracing sampai di state penerima (q2) dan string
abcba selesai dibaca (string yang belum dibaca = )
string acb ditolak karena konfigurasi akhir (q1, b, a Z0) sedangkan fungsi
transisi (q1, b, a) tidak terdefinsi
Ilustrasi graf fungsi transisi PDA di atas ditunjukkan melalui gambar berikut :
(q, y, )*,
transisi.
Ada dua cara penerimaan sebuah kalimat oleh PDA, yang masing-masing terlihat
dari konfigurasi akhir, sebagaimana penjelasan berikut :
Jika M = (Q, , , q0, Z0, , F) adalah PDA dan x *, maka x diterima dengan
state akhir (accepted by final state) oleh PDA M jika: (q0, x, Z0)
* (q, , ) untuk
* (q, , ) untuk q Q.
80
Pada tabel transisi tersebut terlihat bahwa pada state q0 PDA akan melakukan
PUSH jika mendapat input a atau b dan melakukan transisi state ke state q1 jika
mendapat input . Pada state q1 PDA akan melakukan POP.
Kedua Contoh di atas menunjukkan bahwa PDA dapat dinyatakan sebagai mesin
PUSH-POP.
Berikut ini pengenalan string baab oleh PDA di atas :
- (q0, baab, Z0)
(2 kiri)
(5 kiri)
(3 kanan)
(q1, b, bZ0)
(11)
(q1, , Z0)
(10)
(q2, , Z0)
(12)
81
(diterima)
(2 kiri)
(5 kiri)
(q0, b, aabZ0)
(3 kiri)
(q1, b, aabZ0)
(2 kiri)
(5 kiri)
(q0, b, aabZ0)
(3 kiri)
(q0, , baabZ0)
(4 kiri)
(q1, , baabZ0)
82
Bab XIII
Mesin Turing
13.1 Sejarah
Mesin Turing adalah model komputasi teoritis yang ditemukan oleh Alan Turing
(1936), berfungsi sebagai model ideal untuk melakukan perhitungan matematis.
Walaupun model ideal ini diperkenalkan sebelum komputer nyata dibangun, model
ini tetap diterima kalangan ilmu komputer sebagai model komputer yang sesuai
untuk menentukan apakah suatu fungsi dapat selesaikan oleh komputer atau tidak
(menentukan computable function). Mesin Turing terkenal dengan ungkapan "
Apapun yang bisa dilakukan oleh Mesin Turing pasti bisa dilakukan oleh komputer.
13.2 Mekanisme TM
Sebuah mesin turing terdiri atas barisan sel tersusun berupa pita yang dapat
bergerak maju mundur, komponen aktif baca/ tulis pita yang memiliki status
perhitungan serta dapat mengubah/ menulisi sel aktif yang ada di pita tadi, dan
suatu kumpulan instruksi bagaimana komponen baca/ tulis ini harus melakukan
modifikasi terhadap sel aktif pada pita, serta bagaimana menggerakkan pita
tersebut.
Pada setiap langkah dalam komputasi, mesin ini akan dapat mengubah isi dari sel
yang aktif, mengubah status dari komponen baca/ tulis, dan mengubah posisi pita
kekiri atau kekanan.
83
: Q (Q (R,L))
(q0,0) = (q1,1,R)
1. Sebagaimana graf, TM terdiri dari beberapa node dan beberapa edge. Dari satu
node mungkin terdapat satu atau lebih edge yang menuju node lainnya atau
dirinya sendiri.
2. Sebuah node menyatakan sebuah stata (state). Dua stata penting adalah stata awal
S (start) dan stata penerima H (halt). Sesaat sebelum proses pengenalan sebuah
kalimat, TM berada pada stata S. Jika kalimat tersebut dikenali maka, setelah
selesai membaca kalimat tersebut, TM akan akan berhenti pada stata H.
3. Sebiya edge mempunyai bobot yang dinotasikan sebagai triple : (a, b, d). a
adalah karakter acuan bagi karakter dalam sel pita TM yang sedang dibaca head.
Jika yang dibaca head adalah karakter a maka a akan di-overwrite dengan karakter
b dan head akan berpindah satu sel ke arah d (kanan atau kiri).
4. Kondisi crash akan terjadi jika ditemui keadaan sebagai berikut :
84
ii.
3. Head membaca simbol b, maka b tersebut harus dioverwrite dengan simbol lain
(misalnya B) untuk menandakan bahwa b tersebut (sebagai pasangan dari a) telah
dibaca, dan head bergerak ke kiri untuk mencari simbol A.
85
i.
ii.
86
Bab XIV
Aplikasi FSA dan CFG pada Pengembangan Kompilator
14.1 Scanner
Tata bahasa bebas konteks dapat diaplikasikan pada penganalisis sintaksis dari
suatu source code. Dimana simbol terminal maupun simbol variabelnya sudah
bukan satu karakter, tetapi berupa besaran leksik sebagai simbol terminalnya dan
besaran sintaks sebagai simbol variabelnya. Penganalisis leksikal biasa disebut
dengan scanner. Scanner bekerja berdasarkan mesin FSA yang ada pada Bahasa
Reguler. Untuk membantu mengkonstruksi scanner dapat digunakan Diagram
Keadaan.
Tugas Scanner
Mengirimkan token.
Menangani kesalahan.
14.2 Parser
87
token secara mundur (no backtrack). Hal ini berbeda dengan mesin Turing
yang dapat maju dan mundur dalam melakukan parsing.
b. Ciri lain adalah sangat bergantung pada algoritma Scan dalam mengambil
token.
t_PLUS
t_MIN
t_ID
t_INT
Token t_ID (identifier) bisa berupa nama atau keyword (kata kunci yang sudah
didefinisikan oleh suatu bahasa). Misalkan terdapat statement:
VAR jumlah : integer
Maka VAR dan integer adalah keyword. jumlah adalah sebuah nama yang
dideklarasikan sendiri oleh pemrogram.
Token t_ID harus diawali dengan karakter huruf (A Z, a z), dan bisa diikuti didit
(0 9) atau huruf.
Token t_INT harus diawali dengan digit dan bisa diikuti dengan digit pula.
Blank merupakan bagian program sumber yang diabaikan (dilewati) saja, misalnya
spasi kosong.
88
|
<>
{}
Contoh
-
Aturan Produksi
E
T | T + E | T E, T
Notasi BNF
E ::= <T> | <T> + <E> | <T> - <E>, T ::=
89
C. Diagram Sintaks
Diagram Sintaks merupakan alat bantu dalam pembentukan parser/ analisis sintaksis.
Notasi yang tedapat pada diagram sintaks:
Contoh
-
F*T | F / T | F
Biasanya diagram sintaks digunakan untuk memperoleh deskripsi dari suatu notasi
BNF. Misalkan notasi BNF untuk block:
<block> ::= t_BEGIN <statement> { t_SEMICOL <statement> } t_END
Diagram sintaksnya sbb:
90
Pada contoh diatas, besaran leksik (token)nya adalah simbol yang bernilai
program, coba, var, A, integer, :, +, 2, ., ;, :=,begin, end.
Sedangkan besaran sintaksnya tidak kelihatan karena diterapkan dalam aturan
produksinya.
Rincian dari tata bahasa yang dipergunakan untuk penganalisis sintaksis adalah
sebagai berikut:
S = <program>
Himpunan simbol terminal/ token yang diperoleh: <, >, =, <=, >=, <>
Atau bisa dibaca sebagai token-token: t_L, t_G, t_E, t_LE, t_GE, t_NE
(G = greater, L = less, E = Equal, N = Not)
91
Untuk token lainnya bisa ditambahkan sendiri. Bahasa tersebut juga mendukung
penulisan komentar yang di awali dengan { dan diakhiri }.
Diagram Keadaan untuk memperoleh token:
!" #
$
92
&
"
''
()
) "
),
) "
.
'/'
' '
01$
'34
05$
)
*
' '
01
0$
'34
."
' '
*
0 $
+ )
)
2
'('
(
"
2 ( *
. ) ()
*
) *
*
*
+ *
. ,
)
93
',4
(
$6
. !
Aturan Produksi dalam notasi BNF diatas, dapat dibuat diagram sintaksnya untuk
lebih mempermudah.
a. Diagram Sintaks Program
94
; untuk t_SEMICOL,
. untuk t_DOT,
:= untuk t_ASS,
dan seterusnya.
Implementasi
Untuk mengimplementasikan aturan-aturan produksi memakai teknik RecursifDescent dengan aturan sebagai berikut:
Jika ketemu simbol terminal pada aturan produksi, maka panggil prosedur
Scan.
Prosedur Program
95
0 -6
%
.
08
%
.
0%$9 61
%
* (
.
*,
086:
%
Prosedur Block
*
.
0 $ 5
%
%
&
)
0%$9 61
%
%
.
0$58
Prosedur Statement
%
.
08
96
%
.
0 %%
%
%
0 2
)
.
0
%
$2
.
0:;$5
%
%
.
0$1%$
%
%
Prosedur Exp
$2
%
.
0 2
*
0$<# 6-
01:# 6-
%
%
0 2
97
0 :#
Diasumsikan sebelum pemanggilan procedure diatas, sudah ada token atau prosedur
Scan yang sudah dipanggil. Yang penting diketahui adalah bahwa tiap prosedur
yang mewakili simbol variabel diatas, selesai dipanggil meninggalkan sebuah token
jika tidak terjadi kesalahan. Dalam program diatas belum meng-handle penanganan
kesalahan.
Beberapa hal yang perlu diperhatikan:
Untuk contoh parser sederhana, dapat dilihat pada buku Teori Bahasa dan
Otomata karangan Firrar Utdirartatmo
98
Daftar Pustaka
99