Bahasa Kompilasi

44
1 KONSEP BAHASA Pengampu : Idhawati Hestiningsih PENDAHULUAN Ilmu Komputer memiliki dua komponen utama : 1. Model dan gagasan mendasar mengenai komputer 2. Teknik rekayasa untuk perancangan sistem komputer meliputi perangkat keras (hardware) dan perangkat lunak (software) Teori bahasa & otomata termasuk dalam bagian pertama dari 2 komponen utama Ilmu Komputer diatas. Teori bahasa dan otomata diterapkan pada perancangan digital, pembuatan bahasa pemrograman, dan kompilator ABJAD, UNTAI (STRING), BAHASA Sebuah simbol adalah suatu entitas abstraks yang tidak kita definisikan secara formal Contoh : huruf dan digit adalah simbol yang dipakai Abjad (alphabet) adalah sebuah himpunan berhingga tak kosong dari simbol – simbol Notasi : Σ Contoh : - Abjad dalam bahasa Inggris terdiri dari 26 simbol : Σ = {a,b,c,d, … z} a Σ, artinya a adalah sebuah simbol di dalam Σ - Σ = {1,2,3,4,5,6,7,8,9} a Σ Jika Σ 1 dan Σ 2 adalah abjad-abjad maka Σ 1 Σ 2 , Σ 1 Σ 2 , dan Σ 2 Σ 1 merupakan himpunan tidak kosong (abjad) Untai / string / kata adalah sebuah barisan berhingga simbol-simbol dari suatu abjad. Contoh : Diketahui abjad Σ={a,b} maka untai atau string yang bisa terjadi a, ab, aa, bb, aaa, bbb, aaab, dst Untai kosong adalah barisan yang kosong dari simbol-simbol, notasi = {ε} Bahasa (language) adalah suatu kumpulan dari untai-untai atau string, notasi = L Contoh : Diketahui : = {1,2,3,4,…,5} Kumpulan {1,12,123,1234,12345,112} adalah sebuah bahasa berdasarkan abjad yang terdiri dari digit-digit itu. Diketahui : = {1} Kumpulan {1,11,111,1111, ….} adalah sebuah bahasa Bahasa kosong (empty language) adalah sebuah bahasa yang tidak terdiri dari untai-untai. Bahasa kosong berbeda dengan bahasa yang terdiri dari string/untai kosong. Notasi = Jika merupakan sebuah abjad maka juga sebuah bahasa yang terdiri atas semua untai simbol tunggal. Misal adalah sebuah abjad dan w adalah suatu untai berdasarkan . Jika L adalah suatu bahasa yang terdiri dari beberapa untai berdasarkan dan jika w adalah sebuah untai di dalam L maka dapat ditulis : w L, artinya w adalah elemen dari L Contoh : 121 {1,12,121,1212,12121}

Transcript of Bahasa Kompilasi

Page 1: Bahasa Kompilasi

1

KONSEP BAHASA Pengampu : Idhawati Hestiningsih

PENDAHULUAN • Ilmu Komputer memiliki dua komponen utama :

1. Model dan gagasan mendasar mengenai komputer 2. Teknik rekayasa untuk perancangan sistem komputer meliputi perangkat keras (hardware)

dan perangkat lunak (software) • Teori bahasa & otomata termasuk dalam bagian pertama dari 2 komponen utama Ilmu Komputer

diatas. • Teori bahasa dan otomata diterapkan pada perancangan digital, pembuatan bahasa pemrograman,

dan kompilator ABJAD, UNTAI (STRING), BAHASA • Sebuah simbol adalah suatu entitas abstraks yang tidak kita definisikan secara formal

Contoh : huruf dan digit adalah simbol yang dipakai • Abjad (alphabet) adalah sebuah himpunan berhingga tak kosong dari simbol – simbol

Notasi : Σ Contoh : - Abjad dalam bahasa Inggris terdiri dari 26 simbol : Σ = {a,b,c,d, … z} a ∈ Σ, artinya a adalah sebuah simbol di dalam Σ - Σ = {1,2,3,4,5,6,7,8,9} a ∉ Σ Jika Σ1 dan Σ2 adalah abjad-abjad maka Σ1 ∪ Σ2, Σ1 – Σ2, dan Σ2 – Σ1 merupakan himpunan tidak kosong (abjad)

• Untai / string / kata adalah sebuah barisan berhingga simbol-simbol dari suatu abjad.

Contoh : Diketahui abjad Σ={a,b} maka untai atau string yang bisa terjadi a, ab, aa, bb, aaa, bbb, aaab, dst Untai kosong adalah barisan yang kosong dari simbol-simbol, notasi = {ε}

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

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

• Bahasa kosong (empty language) adalah sebuah bahasa yang tidak terdiri dari untai-untai.

Bahasa kosong berbeda dengan bahasa yang terdiri dari string/untai kosong. Notasi = ∅

• Jika ∑ merupakan sebuah abjad maka ∑ juga sebuah bahasa yang terdiri atas semua untai simbol

tunggal. Misal ∑ adalah sebuah abjad dan w adalah suatu untai berdasarkan ∑. Jika L adalah suatu bahasa yang terdiri dari beberapa untai berdasarkan ∑ dan jika w adalah sebuah untai di dalam L maka dapat ditulis : w ∈ L, artinya w adalah elemen dari L Contoh : 121 ∈ {1,12,121,1212,12121}

Page 2: Bahasa Kompilasi

2

• Bahasa universal (universal language) dari ∑ adalah bahasa yang terdiri dari semua untai berdasarkan suatu abjad ∑. Notasi : ∑* Contoh : ∑ = {1}, maka ∑* = {ε,1,11,111,1111, …} Untuk abjad apa saja, ∑* bersifat tak berhingga karena abjad-abjadnya tidak kosong.

OPERASI – OPERASI PADA UNTAI 1. Panjang (length) dari untai

Notasi : |w| Contoh : ∑ = {1,2} w1 = 111 maka | w1| = 3 w2 = 121 maka | w2| = 3 w3 = 121212 maka |w3| = 6

2. Perangkaian (Concatenation)

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

⎩⎨⎧

>

==

0n jika,ww

0n jika ,εw" 1-n

3. Eksponensiasi (Exponentiation) Misalkan w merupakan sebuah untai atau kata, maka :

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

OPERASI – OPERASI PADA BAHASA 1. Perangkaian (Concatenation)

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

⎩⎨⎧

>

==

0n jika,AA

0n jika ,ε A" 1-n

2. Eksponensiasi (Exponentiation) Misalkan A merupakan suatu bahasa berdasarkan abjad ∑ :

Contoh : Jika A = {ab} berdasarkan abjad Inggris tersebut didapatkan : Ao = {ε} A1 = A = {ab} A2 = A.A1 = {abab} A3 = A.A2 = {ababab}

Page 3: Bahasa Kompilasi

3

0n

3. Gabungan (Union) Misalkan A dan B adalah bahasa-bahasa berdasarkan suatu abjad ∑, maka union dari A dan B (A ∪ B) terdiri dari semua kata yang muncul sekurang-kurangnya sekali dalam A dan B. A ∪ B = {x|x ∈ A atau x ∈ B}

4. Irisan (Intersection) Misalkan A dan B adalah bahasa-bahasa berdasarkan suatu abjad ∑, maka intersection dari A dan B (A ∩ B) terdiri dari untai-untai yang muncul baik di A maupun di B sekaligus.

A ∩ B = {x|x ∈ A dan x ∈ B}

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

5. Sub Bahasa

Misalkan A dan B adalah bahasa-bahasa berdasarkan suatu abjad ∑ dan jika semua untai di A juga merupakan untai di B, maka A disebut sebuah sub bahasa dari B. Notasi A ⊆ B Contoh : Jika A = {a,aa,aaa} dan B = {a,aa,aaa,aaaa,aaaaa}, maka A ⊆ B

6. Equal (Sama)

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

7. Star Closure dan Plus Closure

Jika A adalah sebuah bahasa berdasarkan suatu abjad ∑, didefinisikan :

U∞

==

0*

n

nAA

• Star Closure dari A* :

• Plus Closure dari A+ :

U∞

=

+ =1n

nAA Contoh :

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

U=* nAA = A ∞

=

0 ∪ A1 ∪ A2 ∪ …. = {ε} ∪ {a} ∪ {aa} ∪ … = {ε, a, aa, …}

= A1 ∪ A2 ∪ A3 ∪ …. U∞

=

+ =1n

nAA = {a} ∪ {aa} ∪ {aaa} ∪ … = {a, aa, aaa, …}

Page 4: Bahasa Kompilasi

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.

a d a

ud

• Input pada mesin otomata dianggap sebagai bahasa yang harus dikenali oleh mesin. Selanjutnya mesin otomata membuat keputusan yang mengindikasikan apakah input ini diterima atau tidak, sehingga mesin otomata dapat dipakai untuk menghasilkan bahasa yang aturannya ditentukan oleh bahasa tersebut.

Contoh : Sebuah mesin otomata sederhana Bila mesin mendapat untai / string input : ada diterima adu diterima add ditolak

q1 q2 q3

q5

q4

q0

• 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 = q0State akhir = {q3,q4} Himpunan untai input = {a,d,u}

VENDING MACHINE 5

5 5

5

5

10 10

10

10 25

q5

q20 q25

q15

q10

q0

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)}

Page 5: Bahasa Kompilasi

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

0 0

1

1

• FSA tidak memiliki tempat penyimpanan sehingga kemampuan mengingatnya terbatas.

Contoh : vending machine, pengecek pariti ganjil

Keterangan :

Even/ Genap

Odd/ Ganjil

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

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

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

• Dari gambar diatas maka :

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

δ 0 1

Even Even Odd Odd Odd Even

Karena mesin diatas merupakan pengecek pariti ganjil, maka himpunan state akhir yang menyatakan input diterima oleh mesin adalah {Odd} - Jika mesin mendapat input 1101 urutan state menjadi : Even 1 Odd 1 Even 0 Even 1 Odd, maka diterima oleh mesin 4. Jika mesin mendapat input 101 urutan state menjadi : Even 1 Odd 0 Odd 1 Even, maka ditolak oleh mesin

• FSA dibagi 2 yaitu :

1. DFA (Deterministic Finite Automata) = otomata berhingga yang pasti (tetap/tertentu) 2. NDFA (Non-Deterministic Finite Automata) = otomata berhingga yang tidak pasti

Page 6: Bahasa Kompilasi

6

DFA (DETERMINISTIC FINITE AUTOMATA) = dari suatu state ada tepat satu state berikutnya untuk setiap simbol masukan yang diterima Mesin DFA a a

b b b a Konfigurasi DFA diatas secara formal dinyatakan :

Q = {q0,q1,q2} ∑ = {a,b} S = q0F = {q2} Fungsi transisi : δ (q0,a) = q0 δ (q0,b) = q1

δ (q1,a) = q1

δ (q1,b) = 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) = q2Karena q2 merupakan state terakhir maka ‘abb’ berada dalam L(M)

Bila diinputkan string ‘baba’ pada mesin tersebut maka : δ (q0,baba) = δ (q1,aba) = δ (q1,ba) = δ (q2,a) = q1Karena q1 tidak termasuk state terakhir maka ‘baba’ tidak berada dalam L(M)

Contoh soal :

b

a , b

1. Diberikan mesin DFA sebagai berikut :

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

a

Buat tabel transisi dari mesin DFA diatas. Penyelesaian :

δ a b q0 q1 q1q1 q1 q0

q1q0

q0 q1 q2

δ a b q0 q0 q1q1 q1 q2q2 q1 q2

Page 7: Bahasa Kompilasi

7

2. Diberikan tabel transisi seperti berikut ini :

δ a b q0 q0 q1q1 q0 q0

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

a

a,b

b

b

a

a

b

a

a b

ba

a

a,b

a,b a

a

b

a

NDFA (NON DETERMINISTIC FINITE AUTOMATA) • Untuk setiap state tidak selalu tepat ada satu state berikutnya untuk setiap simbol input yang ada • Dari suatu state bisa terdapat 0,1 atau lebih busur keluar (transisi) berlabel simbol input yang sama • Perbedaan DFA dan NDFA ada pada fungsi transisinya

DFA setiap rancangan state input selalu tepat ada satu state berikutnya NFA untuk setiap pasangan state input, bisa memiliki 0 (nol) atau lebih pilihan untuk state

berikutnya Contoh :

q0 q1

q0 q1

q0 q1

q2

q0 q1

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

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

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

q0 q1

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

Page 8: Bahasa Kompilasi

8

Keterangan : Suatu string diterima oleh DFA bila terdapat suatu urutan transisi sehubungan dengan input

string tersebut dari state awal sampai dengan state akhir. Untuk NFA harus dicoba semua kemungkinan yang ada sampai terdapat satu yang

mencapai state akhir. Suatu string x dinyatakan diterima oleh bahasa NFA, M= (Q, ∑, δ, S, F) bila

{x | δ (S,x) memuat sebuah state di dalam F} SOAL

1. Gambarlah diagram transisi untuk NFA berikut ini : Q = {q0,q1,q2,q3,q4} ∑ = {0,1} S = q0F = {q2 ,q4} Fungsi transisi dari NFA tersebut :

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

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

a. 001 b. 10010 c. 111000

PENYELESAIAN 1. 0,1

0

0,1

0

1

q0 q3

q1

q4

1

q2

0,1

Page 9: Bahasa Kompilasi

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}

Page 10: Bahasa Kompilasi

10

BAHASA – BAHASA REGULER DAN EKSPRESI-EKSPRESI REGULER 1. Bahasa – Bahasa Reguler

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

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

2. Ekspresi Reguler

Ekspresi reguler merupakan penyederhanaan dari bahasa – bahasa reguler

Bahasa Reguler Ekspresi Reguler {a} a {b} b {ab} ab

{a,b} = {a}∪ {b} a ∪ b {a}* a* {a}+ a+

∅ ∅ {ε} ε

Teorema Misalkan r,s, dan t merupakan ekspresi – ekspresi reguler atas Σ abjad yang sama, maka :

a) r ∪ s = s ∪ r b) r ∪ ∅ = r = ∅ ∪ r c) r ∪ r = r d) (r ∪ s) ∪ t = r ∪ (s ∪ t) e) r ε = εr = r f) (rs)t = r(st) g) r∅ = ∅r = ∅ h) r (s ∪ t) = rs ∪ rt dan (r ∪ s) t = rt ∪ st i) r* = r** = r* r* = (ε ∪ r)* = r*(r ∪ ε) = (r ∪ ε) r* = ε ∪ r r*

Arti dan Notasi Ekspresi Reguler Notasi *, +, + atau ∪, ⋅ Arti : * yaitu karakter asterik (penutup bintang atau star closure) artinya bisa tidak muncul, bisa juga

muncul berhingga kali (0 s/d n). + yaitu penutup plus atau plus closure artinya minimal muncul satu kali (1 s/d n) + atau ∪ yaitu union atau gabungan ⋅ berarti concatenation (perangkaian), biasanya bisa dihilangkan, misal a . b bisa ditulis ab.

Page 11: Bahasa Kompilasi

11

Contoh Ekspresi Reguler (ER) ER = 010*

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

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

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

ER = a+d

String yang dibangkitkan / muncul = ad, aad, aaad

ER = a*∪ b* (∪ berarti atau) String yang dibangkitkan / muncul = ε, a, b, aa, bb, aaa, bbb

ER = a ∪ b

String yang dibangkitkan / muncul = a, b

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

ER = 01* + 0 atau 01* ∪ 0

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

Hubungan ER dan FSA

a b q1 q2q01.

NFA dengan ER : ab a 2.

b

b

a a,b

b

a

NFA dengan ER : a*b

5. atau

NFA dengan ER : a ∪ b

q0

q1q0

q1

q1q0

4. NFA dengan ER : a ∪ b

q1

q1q0

Page 12: Bahasa Kompilasi

12

0

0 1

0 0,1

0

0,1

0

1

0

5. NFA dengan ER : 010* 6. NFA dengan ER : 0 (0∪1) 7. NFA dengan ER : 0 (1∪ 0)* 8.

q0 q2q1

q0 q2q1

q0 q1

q1 q2q0 NFA dengan ER : 01*0

Page 13: Bahasa Kompilasi

13

EKUIVALENSI FINITE AUTOMATA • Finite Automata dikatakan ekuivalen apabila menerima bahasa yang sama. • Dari sebuah mesin NFA dapat dibuat mesin DFA yang ekuivalen yaitu mampu menerima bahasa

yang sama.

0,1 Contoh : DFA NFA0,1

0

0,1

1

0 q1

q2

q1 q0q0

Kedua mesin diatas bisa menerima bahasa yang sama, yaitu dalam ekspresi regular 0 (0 ∪ 1)* Konstruksi mesin DFA dari NFA : NFA

0 1

0,1

1

1

0

1

0

0

1

Tabel fungsi transisi dari NFA tersebut :

q0 q1

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

• Langkah selanjutnya membuat state-state baru deng• Dimulai dari q0 yang memperoleh input 0 dan 1

{q1}

{q0,q1}

{q0}

• Kemudian dilanjutkan dari q1 bila memperoleh inp

{q1}

{q0,q1}

{q0}

Q = {q0,q1} ∑ = {0,1} S = q0F = {q1}

an mengikuti transisi yang ada.

ut 0 dan 1

Page 14: Bahasa Kompilasi

14

0 1

1

0

0,1

• Telusuri juga state-state baru yang terbentuk

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

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

DFA yang terbentuk 0,1

0

1

1

0

0

1

0,1

0,1

0

1

0,1

• Menentukan state akhir dari DFA Karena himpunan state akhir pada NFA adalah {q1} maka state akhir pada DFA yang baru terbentuk adalah semua state yang mengandung {q1}

{q1} {q0}

{q0,q1}

{q1} {q0}

{q0,q1}

{q1}

{q0,q1}

∅ {q0}

• Selanjutnya DFA bisa dikonstruksikan seperti berikut :

Page 15: Bahasa Kompilasi

15

1

0

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

0,1

0

1

0,1

q1

q2

q3 q0

Fungsi transisi mesin DFA

δ 0 1 q0 q2 q1q1 q3 q2q2 q2 q2q3 q3 q3

Bukti ekuivalen : string 001 diterima di mesin NFA dan mesin DFA diatas

Page 16: Bahasa Kompilasi

16

ATURAN PRODUKSI UNTUK SUATU FINITE STATE AUTOMATA ATURAN PRODUKSI BAHASA REGULER • Sebuah automata berhingga menspesifikasikan sebuah bahasa sebagai himpunan semua untai yang

menggerakkan dari state awal ke salah satu state yang diterimanya (himpunan state akhir) • FSA berikut menerima ekspresi regular :

a (a*∪b*)b a

a

b

ε b

b ε

q2

q0 q1

q3

Gambar 1

q4

• Selain dengan ekspresi reguler, dapat dikonstruksi aturan-aturan produksi untuk suatu tata bahasa

reguler. • Aturan produksi untuk bahasa reguler

α β dibaca α menghasilkan β

α : simbol variabel β : maksimal memiliki sebuah simbol variabel yang terletak di paling kanan bila ada. α atau β bisa berupa simbol terminal atau simbol nonterminal/variabel. Simbol variabel/nonterminal : simbol yang masih bisa diturunkan, biasanya dinyatakan huruf besar,

misal A,B,C Simbol terminal : simbol yang sudah tidak bisa diturunkan lagi, biasanya dinyatakan dengan

huruf kecil, misal a,b,c • Suatu tata bahasa (grammar) didefinisikan dengan 4 tupel yaitu G = V, T, P, S dimana :

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

MENGKONSTRUKSI ATURAN PRODUKSI DARI SUATU FINITE AUTOMATA • Dalam mengkontruksi aturan produksi tata bahasa reguler dari suatu finite state automata, yang

perlu diperhatikan adalah state-state yang menjadi state akhir • Mesin FSA diatas memiliki simbol input ‘a’ dan ‘b’, simbol a dan b akan menjadi simbol terminal

pada aturan produksi yang akan dibentuk • Misal ditentukan simbol awal S.

Identikkan S dengan state awal qo. Dari qo mendapat input a menjadi q1

Aturan produksi ditulis : S Ae Dimana E diidentikkan dengan q1 Dari q1 mendapat transisi ε (tanpa menerima input) ke q2 dan q3.

Aturan produksi ditulis : E A dimana A diidentikan dengan q2 E B dimana B diidentikan dengan q3

Page 17: Bahasa Kompilasi

17

Dari q2 mendapat input a tetap ke q2 dan dari q3 mendapat input b tetap ke q3 Aturan produksi ditulis : A Aa B Bb

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

B b

Jadi secara keseluruhan aturan produksi untuk mesin FSA diatas ditulis seperti berikut : S Ae E A | B A Aa | b B Bb | b Tanda ‘ | ’ berarti atau

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

a

a b b

b

b

b

a

• Misal

Dari mesin diatas dapat dikonstruksi aturan produksi : T = {a,b} S = S S Aa | Bb identikkan S untuk q0, A untuk q1, B untuk q4 A Bc identikkan C untuk q2 C As dari q2 mendapat input a ke q0

dari q3 tidak ada transisi keluar dan bukan state akhir maka transisi ke q3 diabaikan / tidak ditulis

B Bd identikan D untuk q5 D Bs dari q5 mendapat input b ke q0 dari q6 tidak ada transisi keluar dan bukan state akhir maka transisi ke q6

diabaikan / tidak ditulis

Pada mesin ini q0 sebagai state akhir memiliki transisi-transisi keluar, maka untuk menandakannya sebagai state akhir aturan produksi ditulis : S ε Anda bedakan mesin ini dengan mesin gambar 1 dimana q4 sebagai state akhir tidak

memiliki transisi keluar

Jadi secara formal tata bahasa yang diperoleh dari mesin FSA diatas adalah : V = {S,A,B,C,D}

q0 q2q1

Gambar 2

q3

q4

q6q5

Page 18: Bahasa Kompilasi

18

T = {a,b} P = {S Aa | Bb | ε, A Bc, B Bd, C As, D Bs} Aturan produksi diatas bisa disederhanakan sehingga merduksi jumlah simbol variabel yang diperlukan menjadi : P = {S Aa | Bb | ε, A baS, B bbS}

FSA UNTUK SUATU TATA BAHASA REGULER

b

a

a

a b

b

a

b

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

Pada gambar 3 :

S berkorelasi dengan q0, A dengan q4, B dengan q1 S ε menandakan q0 termasuk state akhir

b

a

b

b b

ε a

a

• Contoh lain, misal tata bahasa reguler dengan aturan produksi : S abA | B | baB | ε A Bs | b B As S berkorelasi dengan q0, A dengan q2, B dengan q4 S ε menandakan q0 termasuk state akhir Dari S B maka dibuat transisi ε dari q0 ke q4 Dari A b ditentukan state q3 termasuk state akhir

q0 q2q1

q4

q5 q6

Gambar 3

q0 q2q1

q4Gambar 4

q3

q5

q3

Page 19: Bahasa Kompilasi

19

a

b c

b a

• Contoh lain, misal tata bahasa reguler dengan aturan produksi : S As | Bb | b B Cc C As S berkorelasi dengan q0, B dengan q1, C dengan q2 S b maka dibuat state akhir q3

q0 q2q1

q3 Gambar 5

Page 20: Bahasa Kompilasi

20

POHON PENURUNAN 1. CONTEXT FREE GRAMMAR (CFG)

• Pada tata bahasa bebas konteks / Context Free Grammar (CFG) tidak terdapat pembatasan hasil produksinya. Beda halnya dengan tata bahasa reguler yang ada pembatasan pada ruas kanan atau hasil produksinya.

• Contoh aturan produksi yang termasuk tata bahasa reguler : S abA | baB A Bs B As Bagian yang belum terturunkan selalu terjadi pada ujung.

• Contoh aturan produksi yang termasuk CFG : B CdeFg C BcDe Bagian yang belum terturunkan bisa terjadi dimana saja.

• CFG merupakan suatu cara yang menunjukkan bagaimana menghasilkan untai-untai dalam

sebuah bahasa • CFG menjadi dasar dalam pembentukan suatu parser (proses analisis sintaksis) dimana bagian

sintaks dalam suatu kompilator kebanyakan didefinisikan dalam CFG

2. PARSING • Pohon penurunan (derivation tree / parse tree) berguna untuk menggambarkan bagaimana

memperoleh suatu string (untai) dengan cara menurunkan simbol-simbol variabel menjadi simbol-simbol terminal

• Setiap simbol variabel akan diturunkan menjadi terminal, sampai tidak ada yang belum tergantikan.

• Misal terdapat CFG dengan aturan produksi (dengan simbol awal S) : S AB A Aa | a B Bb | b Akan digambarkan pohon penurunan untuk memperoleh untai ‘aabbb’. Pada pohon tersebut simbol awal S akan menjadi akar (root). Setiap kali penurunan dipilih aturan produksi yang menuju ke solusi. Simbol-simbol variabel akan menjadi simpul-simpul yang mempunyai anak. Simpul-simpul yang tidak mempunyai anak akan menjadi simbol terminal, seperti gambar berikut :

S

A B

a A b B

b B

b

a

• Proses penurunan / parsing dapat dilakukan dengan 2 cara :

- Penurunan terkiri (leftmost derivation) Simbol variabel terkiri yang diperluas terlebih dulu

- Penurunan terkanan (rightmost derivation) Simbol variabel terkanan yang diperluas terlebih dulu

Page 21: Bahasa Kompilasi

21

• Contoh : Diberikan CFG : (‘ ’ dibaca ‘menurunkan’) S Aas | a A SbA | ba Untuk memperoleh untai ‘aabbaa’ dari CFG : - Penurunan terkiri (leftmost derivation)

S Aas aSbAS aabAS aabbaS aabbaa

- Penurunan terkanan (rightmost derivation) Simbol variabel terkanan yang diperluas terlebih dulu S Aas aAa aSbAa aSbbaa aabbaa

Proses penurunannya berbeda tetapi akan diperoleh pohon yang sama : S

S b

a S

b a

a

a

A

S A b

S

a B

a B B

a B B

b b S A b

B a a

b

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

• Contoh : CFG

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

Berikut pohon penurunan untuk memperoleh string ‘aaabbabbba’ 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

Page 22: Bahasa Kompilasi

22

Untuk memperoleh untai ‘a’ bisa dengan 2 penurunan, yaitu : - S A a - S B a

• Misal : CFG S SbS | ScS |a Untuk memperoleh untai ‘abaca’ bisa dengan 2 cara, yaitu :

S

S S b

a

S c S a

- S SbS SbScS SbSca Sbaca abaca

S

a

- S ScS SbScS abScS abacS abaca

S

S S

a

c

b S a S

a

Page 23: Bahasa Kompilasi

23

PENYEDERHANAAN CFG

1. TUJUAN PENYEDERHANAAN

• Melakukan pembatasan sehingga tidak menghasilkan pohon penurunan yang memiliki kerumitan yang tidak perlu atau aturan produksi yang tidak berarti.

• Contoh : S AB | a A a Kelemahan CFG diatas, aturan produksi S AB tidak berarti karena B tidak memiliki penurunan. Untuk CFG berikut : S A A B B C C D D a | A Memiliki kelemahan terlalu panjang jalannya padahal berujung pada S a, produksi D A juga menyebabkan kerumitan.

• Suatu CFG dapat disederhanakan dengan melakukan :

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

2. PENGHILANGAN PRODUKSI USELESS

• Produksi useless didefinisikan sebagai : - Produksi yang memuat simbol variabel yang tidak memiliki penurunan yang akan

menghasilkan terminal-terminal seluruhnya (disebut ‘menuju terminal’). Produksi ini tidak berguna karena bila diturunkan tidak akan pernah selesai masih ada simbol variabel yang tersisa.

- Produksi yang tidak akan pernah dicapai dengan penurunan apapun dari simbol awal sehingga produksi itu redundance (berlebih)

• Contoh terdapat CFG :

S aSa | Abd | Bde A Ada B BBB | a Maka : 1. Simbol variabel A tidak memiliki penurunan yang menuju terminal, sehingga bisa

dihilangkan 2. Konsekuensi no. (1), aturan produksi S Abd tidak memiliki penurunan maka CFG setelah

disederhanakan menjadi : S aSa | Bde B BBB | a

• Contoh terdapat CFG :

S Aa | B A ab | D B b | E C bb E aEa Maka : 1. Pada aturan produksi A D, simbol variabel D tidak memiliki penurunan 2. Pada aturan produksi C bb, bila dicoba melakukan penurunan dari simbol awal S tidak

akan pernah mencapai C. 3. Simbol variabel E tidak memiliki aturan produksi yang menuju terminal

Page 24: Bahasa Kompilasi

24

4. Konsekuensi no (3) aturan produksi B E, simbol variabel E tidak memiliki penurunan Sehingga dari CFG diatas, produksi yang useless : A D C bb E aEa B E Maka CFG setelah disederhanakan menjadi : S Aa | B A ab B b

• Contoh CFG : S aAb | Ceb A Dbe | eeC B ff C ae D h Maka : 1. Pada aturan produksi S Ceb, A Dbe (E tidak memiliki penurunan) 2. Aturan produksi D h redundan Sehingga : S aAb A eeC B ff C ae Dari sisa CFG diatas B ff juga redundan, sehingga hasil penyederhanaan menjadi : S aAb A eeC C ae

• Contoh CFG :

S Ab A bcD | Dac B e | Ab C bCb | adF | ab F Cfb Maka : 1. Pada aturan produksi A bcD, variabel D tidak memiliki penurunan 2. Konsekuensi no (1), simbol variabel A tidak memiliki penurunan yang menuju terminal

sehingga tersisa hanya A Dac 3. Konsekuensi no (2), B Ab tidak memiliki penurunan 4. Simbol variabel F tidak memiliki penurunan yang menuju terminal 5. Konsekuensi no (4), C adF tidak memiliki penurunan Setelah disederhanakan menjadi : S Ab B e

• Contoh CFG :

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

Page 25: Bahasa Kompilasi

25

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

• Contoh CFG :

S Abc | ab A AAA | ε Maka : S Abc | ab A AAA | ε Hasil tetap karena A ε diperhitungkan.

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

2. PENGHILANGAN PRODUKSI UNIT

• Produksi unit adalah produksi dimana ruas kiri dan kanan aturan produksi hanya berupa satu simbol variabel, misalkan A B, C D

• Keberadaan produksi unit membuat tata bahasa memiliki kerumitan yang tidak perlu atau menambah panjang penurunan.

• Penyederhanaan ini dilakukan dengan melakukan penggantian aturan produksi unit • Contoh CFG :

S Sb S C C D C ef D dd

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

Sehingga aturan produksi setelah penyederhanaan : S Sb S dd | ef C dd C ef D dd

• Contoh CFG

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

Page 26: Bahasa Kompilasi

26

Penggantian yang dilakukan : C D menjadi C b B C menjadi B b | ab karena B b sudah ada maka cukup tulis B ab A B menjadi A ab | b S A menjadi S ab | b

Sehingga aturan produksi setelah penyederhanaan : S ab | b S Aa A ab | b B ab B b C b C ab D b

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

Penggantian yang dilakukan : D E menjadi D gh C C dihapus S D menjadi S gh | SABC Sehingga aturan produksi setelah penyederhanaan : S Cba | gh | SABC A bbC B Sc | ddd C Ea | f D gh | SABC E gh

3. PENGHILANGAN PRODUKSI ε

• Produksi ε adalah produksi dalam bentuk α ε atau bisa dianggap sebagai produksi kosong (empty).

• Penghilangan ε dilakukan dengan penggantian produksi yang memuat variabel yang bisa menuju produksi ε atau disebut nullable.

• Contoh : S bcAd A ε Pada kasus diatas A nullable, serta A ε satu-satunya produksi dari A, maka variabel A bisa ditiadakan . Hasil penyederhanaan CFG menjadi : S bcd Tetapi bila kasusnya : S bcAd A bd | ε Pada kasus diatas A nullable tapi A ε bukan satu-satunya produksi dari A, maka hasil penyederhanaan : S bcAd | bcd A bd

Page 27: Bahasa Kompilasi

27

• Contoh CFG :

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

• Contoh CFG : S Da | Bd A bc A ε B C Variabel yang nullable adalah variabel A. A ε bukan penurunan satu-satunya dari A (terdapat A bc), maka S Da menjadi S Da | d dan A ε dihapus. Setelah penyederhanaan : S Da | d | Bd A bc B c

• Contoh CFG : S AaCD A CD | AB B b | ε C d | ε D ε Variabel yang nullable adalah variabel B,C,D. Dari A CD, D hanya memiliki penurunan D ε,maka D ε dihapus sehingga S AaCD menjadi S AaC A CD menjadi A C Variabel B dan C memiliki penurunan ε meskipun bukan satu-satunya penurunan maka dilakukan penggantian : A AB menjadi A AB | A | B S AaC menjadi S AaC | Ac | Aa | a B ε dan C ε dihapus Setelah penyederhanaan : S AaC | Ac | Aa | a A C | AB | A | B B b C d

• Contoh CFG : S AB A abB | aCa | ε B Ba | BB | ε C ε Variabel yang nullable adalah A,B,C. Dari S AB, maka S juga nullable. Lakukan penggantian : A aCa menjadi A aa

Page 28: Bahasa Kompilasi

28

B Ba menjadi B Ba | b B BB menjadi B BB | B A abB menjadi A abB | ab S AB menjadi S AB | A | B | ε C ε, B ε, A ε dihapus Perhatikan : Untuk penggantian S AB, S ε tetap dipertahankan karena S merupakan simbol awal. Ini merupakan satu-satunya perkecualian produksi ε yang tidak dihapus yaitu produksi ε yang dihasilkan oleh simbol awal. Hasil akhir penyedernaan : S AB | A | B | ε A abB | ab | aa B Ba | b | BB | B

• Contoh CFG : S aAb A aAb | ε

Hasil penyederhanaan : S aAb | ab A aAb | ab

• Contoh CFG :

S ABaC A BC B b | ε C D | ε D d

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

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

bersama pada suatu CFG yang nantinya menyiapkan CFG tersebut untuk diubah ke dalam bentuk normal Chomsky (dibahas bab selanjutnya).

• Hal yang memerlukan perhatian adalah penghilangan suatu tipe produksi bisa menghasilkan produksi yang lain, hal ini didasari kenyataan bahwa penghilangan suatu tipe produksi bisa menghasilkan produksi tipe yang lain, hal ini didasari kenyataan bahwa penghilangan produksi ε bisa menghasilkan produksi unit.

• Tapi perhatikan juga bahwa penghilangan produksi unit tidak menghasilkan produksi ε dan penghilangan produksi useless tidak menghasilkan produksi unit maupun produksi ε.

• Maka untuk menghapus semua produksi yang tidak diinginkan tersebut dengan melakukan urutan sebagai berikut : 1. Hilangkan produksi ε 2. Hilangkan produksi unit 3. Hilangkan produksi useless

p

CFG

• Hasil Conto

Penghilanganproduksi ε

yang diperoleh adalah th :

Penghilanganproduksi unit

ata bahasa yang sudah be

Penghilangan roduksi useless

bas dari ketiga jenis p

CFG yang sudahdisederhanakan

roduksi tersebut.

Page 29: Bahasa Kompilasi

29

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

Lakukan penghilangan produksi ε, sehingga aturan produksi menjadi : S A | AA | C | bd A Bb B B | AB | d C de

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

Penghilangan produksi unit bisa menghasilkan produksi useless sehingga lakukan penghilangan produksi useless : S Bb | AA | de | bd A Bb B AB | d Hasil akhir aturan produksi diatas tidak lagi memiliki produksi ε, produksi unit, produksi useless.

Page 30: Bahasa Kompilasi

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

• Contoh : Berikut ini CFG yang sudah mengalami penyederhanaan S Ba | Ab A Baa | As | a B Abb | Bs | b

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

B b Dilakukan penggantian aturan produksi yang belum bentuk normal Chomsky : S Ba menjadi S P1A S Ab menjadi S P2B A Baa menjadi A P1AA menjadi A P1P3 A As menjadi A P2S B Abb menjadi B P2BB menjadi B P2P4B Bs menjadi B P1S Sehingga terbentuk aturan produksi dan simbol variabel baru : P1 b P2 a P3 AA P4 BB Hasil akhir aturan produksi dalam bentuk normal Chomsky : A a B b S P1A S P2B A P1P3A P2S B P2 P4B P1S

CFG yang sudah disederhanakan

Penggantian simbol terminal pada aturan produksi yang ruas kanan > 1

Buat variabel dan aturan produksi baru bila perlu

CNF

Penggantian aturan produksi yang simbol variabel > 2

Page 31: Bahasa Kompilasi

31

P1 b P2 a P3 AA P4 BB

• Contoh : Berikut ini CFG yang sudah mengalami penyederhanaan

S Ab | CA A a | bc B BC | Ab C Ab | b Aturan produksi yang sudah dalam bentuk normal Chomsky : S CA A a B BC C b Penggantian aturan produksi yang belum dalam bentuk normal Chomsky : S Ab menjadi S P1B A bc menjadi S P2P3 B Ab menjadi B AP2 C Ab menjadi C P1B Terbentuk aturan produksi dan simbol variabel baru : P1 a P2 b P3 c Hasil akhir aturan produksi dalam bentuk normal Chomsky : S CA A a B BC C b S P1B S P2P3 B AP2C P1B P1 a P2 b P3 c

• Contoh CFG :

S Aab | ch | CD A dbE | Eec B ff | DD C ADB | As D i E jd Aturan produksi yang sudah dalam bentuk normal Chomsky : S CD B DD D i Penggantian aturan produksi : S Aab menjadi S P1P2 S ch menjadi S P3P4

Page 32: Bahasa Kompilasi

32

A dbE menjadi A P5P6 A Eec menjadi A P8P9 B ff menjadi B P10P10 C ADB menjadi C AP11 C As menjadi C P1S E Jd menjadi E P12D Terbentuk aturan produksi baru : P1 a P2 AB P3 c P4 h P5 d P6 P7E P7 b P8 e P9 EC P10 f P11 DB P12 j Hasil akhir dalam bentuk normal Chomsky : S CD B DD D i S P1P2S P3P4 A P5P6 A P8P9 B P10P10 C AP11 C P1S E P12D P1 a P2 AB P3 c P4 h P5 d P6 P7E P7 b P8 e P9 EC P10 f P11 DB P12 j

Page 33: Bahasa Kompilasi

33

PUSHDOWN AUTOMATA (PDA) • PDA merupakan mesin otomata dan CFG. Bila sebuah FSA mempunyai kemampuan “memori”

yang terbatas, pada PDA didefinisikan sebuah tempat penyimpanan yang tidak terbatas berupa stack / tumpukan

• Stack = kumpulan dari elemen-elemen sejenis dengan sifat penambahan elemen dan pengambilan elemen melalui suatu tempat yang disebut top of stack (puncak stack).

• Pengambilan elemen dan stack dinyatakan dengan operasi pop, sedangkan memasukkan elemen ke dalam stack dengan operasi push.

• Setiap elemen stack bisa memuat 1 simbol, yang disebut simbol stack. • Contoh sebuah stack :

Bila dilakukan operasi pop, maka kondisi stack menjadi : Bila dilakukan operasi push B, maka kondisi stack menjadi :

F

C

A

F

C

F

C

B

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

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

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

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

- Memakai suatu simbol input Bergantung pada simbol input, simbol pada top stack dan state terdapat sejumlah pilihan yang mungkin. Setiap pilihan terdiri dari state berikutnya dan simbol-simbol untuk mengganti simbol pada top stack. Penggantian simbol pada top stack bisa berupa push untuk satu atau beberapa simbol, bisa berupa pop untuk simbol kosong.

- Dengan transisi ε Mirip yang pertama tetapi dilakukan tanpa membaca simbol. Transisi ini memungkinkan PDA memanipulasi isi stack atau berpindah state tanpa membaca simbol.

• Contoh PDA : Q = {q1, q2} Σ = {a, b} Γ = {A, B, Z} S = q1 F = {q2} Z = Z

Page 34: Bahasa Kompilasi

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 :

Z

1. Konfigu∆(q1,a, Konfigu

2. MembacFungsi tKonfigu

3. MembacFungsi tKonfigu

4. MembacFungsi tKonfigu

5. Semua iFungsi tKonfigu

State q2

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

Z

A

arar

arar

arar

nrar

b

input ‘b’ nsisinya ∆(q1,b,A) = {(q1,ε)}

asi mesin menjadi state q1, top stack dipop

Z

input ‘b’ nsisinya ∆(q1,b, Z) = {(q1,BZ)}

asi mesin menjadi state q1, B dipush

Z

B

input ‘a’ nsisinya ∆(q1,a, B) = {(q1, ε)}

asi mesin menjadi state q1, top stack dipop

Z

put telah selesai dibaca nsisinya ∆(q1, ε, Z) = {(q2, Z)}

asi mesin menjadi state q2

Z

erada dalam F (final state) maka ‘abba’ diterima oleh PDA tersebut.
Page 35: Bahasa Kompilasi

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 :

Z

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

Z

B

2. MembacaFungsi traKonfigur

3. MembacaFungsi traKonfigur

4. Tanpa meFungsi traKonfigurStack kos

Semua input oleh PDA ter

input ‘2’ nsisinya ∆(q1,2,B) = {(q2,B)}

asi mesin menjadi state q2, stack tetap

a

B

a

Z

input ‘0’ nsisinya ∆(q2,0,B) = {(q2,ε)} si mesin menjadi state q2, B dipop

Z

mbaca input ‘ε’ nsisinya ∆(q2,ε, Z) = {(q2, ε)} si mesin menjadi state q2, Z dipop

ong.

telah selesai dibaca, stack kosong berada dalam F (final state) maka ‘020’ diterima sebut.

Page 36: Bahasa Kompilasi

36

MESIN TURING • Stack (tumpukan) yang terdapat pada PDA memiliki keterbatasan kemampuan akses, yaitu hanya

mengakses data yang terdapat pada top / puncak dari stack. • Untuk melakukan akses pada bagian yang lebih rendah dari puncak stack, harus memindahkan

bagian di atasnya (pop), yang mana akan menyebabkan bagian tersebut hilang. • Pada mesin Turing, memori berupa suatu pita yang pada dasarnya berupa array (deretan) sel-sel

penyimpanan. Setiap sel mampu menyimpan sebuah simbol tunggal. • Pita tersebut tidak mempunyai sel pertama dan sel terakhir. Pita dapat memuat informasi dalam

jumlah tak terbatas, dan dapat diakses bagian manapun dari pita dengan urutan bagaimanapun. • Terdapat sebuah head yang menunjukkan posisi yang diakses pada pita. Head dapat bergerak ke

kanan atau ke kiri untuk membaca input dari pita dan sekaligus juga bisa melakukan penulisan pada pita/mengubah isi pita.

• Mesin Turing bisa dianalogikan seperti komputer sederhana, dengan sejumlah state sebagai memori, pita sebagai secondary storage, fungsi transisi sebagai program.

• Sebuah mesin Turing secara formal dinyatakan dalam 7 tupel, yaitu M = (Q, Σ, Γ, δ, S, F, b) dimana : Q = himpunan state Σ = himpunan simbol input Γ = simbol pada pita (meliputi pula blank) δ = fungsi transisi S = state awal, S ∈ Q F = himpunan state akhir, F⊆ Q b = simbol kosong (blank) bukan bagian dari Σ, b ∉Σ Bagian dari pita yang belum ditulisi dianggap berisi simbol b (blank)

• Contoh : Misal terdapat mesin Turing : Q = {q1,q2} Σ = {a,b} Γ = {a,b, b) F = {q2} S = {q1} Fungsi transisinya : Pergerakan mesin Turing : R = right(kanan), L = left (kiri) δ (q1,a) = (q1,a,R) pada state q1, head menunjuk karakter ‘a’ pada pita, menjadi state q1, head

bergerak ke kanan δ (q1,b) = (q1,a,R) pada state q1, head menunjuk karakter ‘b’ pada pita, menjadi state q1, head

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

head bergerak ke kiri

Perhatian : pada mesin Turing

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

Jadi berdasarkan fungsi transisi diatas, maka mesin Turing beroperasi seperti berikut : Head ditunjukkan dengan 1. Misal pita yang akan dibaca : ‘abbaa’

a b b a a

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

Page 37: Bahasa Kompilasi

37

2. a b b a a

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

a a b a a

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

4.

a a a a a

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

5.

a a a a a

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

6.

a a a a a b

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

7.

a a a a a b

state q2 Tidak ada transisi lagi dari state q2, mesin Turing akan berhenti (halt state)

Karena state q2 termasuk state akhir berarti input tersebut diterima

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

Fungsi transisinya dalam bentuk tabel sebagai berikut :

δ 0 1 X Y bq0 (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 - - - -

Page 38: Bahasa Kompilasi

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

Page 39: Bahasa Kompilasi

39

13. X X Y Y

state q3 14.

X X Y Y b

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

DESKRIPSI SEKETIKA PADA MESIN TURING • Tahapan transisi nomor (1) sampai (14) pada contoh diatas dapat dinyatakan dalam notasi yang

disebut deskripsi seketika (instantaneous description). • Deskripsi seketika diperlukan untuk menyatakan secara formal konfigurasi mesin Turing pada

suatu saat. • Perubahan dari suatu kondisi ke berikutnya dipisahkan dengan tanda ‘ | ‘

Untuk simbol head ditulis dengan garis bawah ‘_’ • Jadi tahapan no. 1 sampai 14 dapat dinyatakan sebagai berikut :

(q0,0011) | (q1,X011) (q1,X011) (q2,X0Y1) (q2,X0Y1) (q0,X0Y1) (q1,XXY1) (q1,XXY1) (q2,XXYY) (q2,XXYY) (q0,XXYY) (q3,XXYY) (q3,XXYY b) (q4,XXYY b)

• Misal bila mendapat input 011 : (q0,011) (q1,X11) (q2,XY1) (q0,XY1) (q3,XY1) Tidak ada transisi (q3,1) maka mesin berhenti dan karena q3 tidak termasuk state akhir berarti input tersebut ditolak.

Page 40: Bahasa Kompilasi

40

TEKNIK KOMPILASI BAHASA PEMROGRAMAN Penggolongan bahasa pemrograman berdasarkan tingkat ketergantungannya dengan mesin :

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

2. Bahasa assembly

Merupakan bentuk simbolik dari bahasa mesin, dianggap sebagai bahasa pemrograman yang pertama kali berbentuk string dan lebih mudah dimengerti manusia

Contoh : LR 3,5 komputer menyalin isi general register 5 ke general register 3

3. Bahasa Tingkat Tinggi (High Level Language) / user oriented Merupakan bahasa pemrograman yang lebih dekat ke bahasa manusia, contoh : bahasa Pascal, C, PL/I, Fortran, COBOL. Bahasa ini memberikan fasilitas yang lebih banyak, kontrol program yang terstruktur, kalang, block, prosedur. Tujuan utamanya adalah memudahkan pemakainya dalam membuat program dan kemampuannya dalam mengatasi kerumitan (kompleksitas). Contoh : dalam bahasa Pascal X := Y + Z;

Perintah tersebut kemudian diterjemahkan dalam bahasa assemby untuk mesin IBM/370 L 3,Y Load Y ke register 3 A 3,Z Add Z ST 3,X Simpan hasilnya ke X

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

4. Bahasa yang problem oriented

Bahasa ini memungkinkan penyelesaian untuk suatu masalah atau aplikasi yang spesifik. Contoh : SQL untuk aplikasi database, COGO untuk aplikasi teknik sipil, dll Bahasa problem oriented kadang digolongkan ke dalam bahasa tingkat tinggi.

TRANSLATOR

• Translator (penerjemah) = melakukan pengubahan source code / source program (program sumber) ke dalam target code / object code / object program (program objek).

• Source code ditulis dalam bahasa sumber, object code berupa bahasa pemrograman lain / bahasa mesin pada suatu komputer.

• Jadi penerjemah membaca suatu program yang ditulis dalam bahasa sumber dan menerjemahkan bahasa sumber ke dalam suatu bahasa lain.

• Saat melakukan proses penerjemahan, penerjemah akan melaporkan adanya keanehan/kesalahan yang mungkin diketemukan.

penerjemah

error messages

Program sumber Program objek

Page 41: Bahasa Kompilasi

41

• Ada beberapa macam translator, yaitu : 1. Assembler

Source code adalah bahasa assembly, object code adalah bahasa mesin contoh : Turbo Assembler, Macro Assembler

Assembler Objek code berupa file .EXE / .COM

Source code berupa file .ASM

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 Compile time = saat pengubahan source code ke object code Run time = saat eksekusi

Run time

Compiler Objek code Eksekusi komputer

Compile time

Data

Source code 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

Interpreter Source code Hasil

Run time

• Dalam matakuliah ini translator yang dibahas adalah kompilator TAHAP – TAHAP KOMPILASI

• Tahap-tahap yang harus dilalui pada saat mengkompilasi program, yaitu : 1. Lexical analysis 2. Syntactic analysis 3. Semantic analysis 4. Intermediate code generation

Tahap analisis (front end) = bertugas melakukan dekomposisi program sumber menjadi bagian-bagian dasarnya

Tahap sintesis (back end) = bertugas melakukan pembangkitan dan optimasi program objek

5. Code optimization 6. Object code generation

• Skema blok kompilator

Lexical analyzer (scanner)

Syntactic analyzer (parser)

Semanticanalyzer

Intermediate code generation

Code optimization

Object code

generation

Object code Source code

Error handler

Symbol Table Management

Page 42: Bahasa Kompilasi

42

Keterangan : - Lexical analyzer(scanner)

Berfungsi memecah teks program sumber menjadi bagian-bagian kecil yang mempunyai satu arti yang disebut token, seperti : konstanta, nama variabel, keyword, operator

- Syntax analyzer(parser) Berfungsi mengambil program sumber (sudah dalam bentuk barisan token) dan menentukan kedudukan masing-masing token berdasarkan aturan sintaksnya memeriksa kebenaran dan urutan kemunculan token

- Semantic analyzer Berfungsi menentukan validitas semantiks/keberartian program sumber. Biasanya bagian ini digabung dengan intermediate code generator.

- Intermediate code generator Berfungsi membangkitkan kode antara

- Code optimation Berfungsi mengefisienkan kode antara yang dibentuk

- Code generator Berfungsi membangkitkan kode program target dalam bahasa target yang ekivalen dengan bahasa sumber

- Symbol table management Berfungsi mengelola tabel simbol selama proses kompilasi. Tabel simbol adalah struktur data yang memuat rekord untuk tiap identifier dengan atribut-atribut identifier itu.

- Error handler Berfungsi menangani kesalahan yang berlangsung selama proses kompilasi

• Contoh : pernyataan pemberian nilai (assignment) :

position := initial + rate * 60 - Lexical analysis

Mengelompokkan pernyataan tersebut menjadi token-token sebagai berikut : 1. Token identifier position 2. Token simbol assignment := 3. Token identifier initial 4. Token tanda plus + 5. Token identifier rate 6. Token tanda perkalian * 7. Token konstanta angka 60 Ketika identifier pada program sumber ditemukan lexical analyzer, identifier dimasukkan ke tabel simbol.

position := initial + rate * 60 diubah menjadi

id1 := id2 + id3 * 60

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

assignment statement

identifier := expression

position expression + expression

identifier

initial

expression expression *

identifier

rate

konstanta angka

60

Page 43: Bahasa Kompilasi

43

:=

id1 +

id2 *

id3 60

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

Karena misal adanya pernyataan deklarasi di awal :

var position, initial, rate : real

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

:=

id1 +

id2 *

id3 inttoreal(60)

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

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

- Code Optimization

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

Temp1 := id3 * 60.0 Id1 := id1 + temp1

- Code Generator

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

MOVF id3, R2 MULF #60.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1

Page 44: Bahasa Kompilasi

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.