Академический Документы
Профессиональный Документы
Культура Документы
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 (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.
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
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
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.
a d a
q0 q1 q2 q3
u
d
q4
q5
• 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.
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
δ 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}
Mesin DFA
a a
b
b b
q0 q1 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)
Contoh soal :
1. Diberikan mesin DFA sebagai berikut :
a
a,b
q0 q1
b
Q = {q0,q1}
∑ = {a,b}
S = q0
F = {q1}
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
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
δ 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
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
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*
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
String yang dibangkitkan / muncul = a, b
ER = (a ∪ b)*
String yang dibangkitkan / muncul = ε, a, b, aa, bb, aaa, bbb, ab, abb, aab, ba
1. q0
a
q1 b
q2
NFA dengan ER : ab
2.
b
q0 q1
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
6. 0 0,1
q0 q1 q2
0,1
7. 0
q0 q1
8. 0 0
q0 q1 q2
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)*
NFA
0 1 Q = {q0,q1}
∑ = {0,1}
S = q0
0,1
q0 q1 F = {q1}
1
δ 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}
0
{q0,q1}
14
• Telusuri juga state-state baru yang terbentuk
0
{q0} 1 {q1} ∅
0
{q0,q1}
0,1
δ (∅, 0) = ∅
δ (∅, 1) = ∅
0
{q0} 1 {q1} ∅
0
{q0,q1}
0,1
0
{q0} 1 {q1} ∅
0
{q0,q1}
0,1
0,1
0
q0 1 q1 q3
0
q2
0,1
δ 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
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.
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
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
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
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}
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
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
b c
q0 q1 q2
b a
q3 Gambar 5
20
POHON PENURUNAN
• 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
A B
a A b B
a b B
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
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
S b S
a S S c S
a a
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.
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 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
• 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 | ε
• Prinsipnya setiap kali melakukan penyederhanaan, periksa lagi aturan produksi yang tersisa,
apakah semua produksi yang useless sudah dihilangkan.
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
• Contoh CFG
SÆA
S Æ Aa
AÆB
BÆC
BÆb
CÆD
C Æ ab
DÆb
26
• Contoh CFG
S Æ Cba | D
A Æ bbC
B Æ Sc | ddd
C Æ Ea | f | C
D Æ E | 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
• 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
• Contoh CFG :
S Æ AaCD
A Æ CD | AB
BÆb|ε
CÆd|ε
DÆε
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Æε
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.
• 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
• 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
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
• Contoh CFG :
S Æ Aab | ch | CD
A Æ dbE | Eec
B Æ ff | DD
C Æ ADB | As
DÆi
E Æ jd
• 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
• 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
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
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}
Jadi berdasarkan fungsi transisi diatas, maka mesin Turing beroperasi seperti berikut :
Head ditunjukkan dengan
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}
δ 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.
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
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.
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.
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
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
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
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
- 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
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.
Maka konstanta 60 dikonversi menjadi real dengan fungsi inttoreal(60) menjadi konstanta
bilangan real
:=
id1 +
id2 *
id3 inttoreal(60)
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 :
- 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.