tugas rangkuman Teknik kompilasi.docx
Transcript of tugas rangkuman Teknik kompilasi.docx
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
1/63
i
Rangkuman Tehnik Kompilasi
Dosen : Nahot Frastian S.Kom
Mata Kuliah : Tehnik Kompilasi
Disusun Oleh : Khusnan Hidayat Aji R 201043501534
Kelas : R6P
Program Studi : Teknik Informatika
Universitas Indraprasta
2013
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
2/63
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
3/63
3
Kelebihan :
1. Eksekusi cepat
2. Masih bisa dipelajari daripada bahasa mesin
3. File hasil sangat kecil.
Kekurangan :
1. Tetap sulit dipelajari
2. Program sangat panjang.
1.3 Bahasa Tingkat Tinggi (High Level Language) / User Oriented
Bahasa ini lebih dekat dengan bahasa manusia. Bahasa ini juga
memberikan banyak sekali fasilitas kemudahan pembuatan program, misalnya:
variabel, tipe data, konstanta, struktur kontrol, loop, fungsi, prosedur dan lain-lain.
Contoh: Pascal,dephi dll
Keuntungan :
1.Mudah dipelajari
2.Mendekati permasalahan yang akan dipecahkan
3.Kode program pendek
Kerugian :
1. Eksekusi lambat
1.4 Bahasa yang berorientasi pada masalah spesifik (specific problem oriented).
Bahasa ini adalah bahasa yang digunakan langsung untuk memecahkan suatu masalah
tertentu.
Contoh : SQL untuk aplikasi database dll
2.Translator
Translator (penerjemah) melakukan pengubahansource 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 computer.
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
4/63
4
Gambar 1.1. Alur kerja Translator
Ada beberapa macam translator, yaitu :
a.Assembler
Source code adalah bahasa assembly, object code adalah bahasa mesin
contoh : Turbo Assembler, Macro Assembler
Gambar 1.2. Alur kerja Assembler
b.Interpreter
Input berupa source code yaitu bahasa scripting seperti PHP, Basic, Perl, Javascript, ASP,Java bytecode, Basic, Matlab, Matematica, Ruby.
Interpreter tidak menghasilkan object code.Hanya menghasilkan translasi internal. Input
dapat berasal dari source code maupun dari inputan program dari user.Source code dan inputan
data user diproses pada saat yang bersamaan.
Pada interpreter, program tidak harus dianalisis seluruhnya dulu, tapi bersamaan dengan
jalannya program.
Keuntungan : mudah bagi user, debuging cepat
Kekurangan : eksekusi program lambat, tidak langsung menjadi program executable.
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
5/63
5
Gambar 1.3. Alur kerja Intepreter
c. Compiler
Istilah compilermuncul karena dulu ada program yang menggunakan subrutin-subrutin atau
pustaka-pustaka untuk keperluan yang sangat khusus yang dikumpulkan menjadi satu sehingga
diistilahkan compiled.
Input berupa source code program seperti Pascal, C, C++. Object code adalah bahasa
assembly. Source code dan data input diproses pada saat yang berbeda.
Compile time adalah saat pengubahan dari source code menjadi object code. Runtime adalah
saat eksekusi object code dan mungkin menerima input data dari user. Output : bahasa assembly.
Kemudian oleh linker dihasilkan file EXE.
Kekurangan : debugging lebih lambat
Keuntungan : eksekusi program lebih cepat, menghasilkan file executable yang berdiri sendiri.
Gambar 1.4. Alur kerja Compiler
3.Tahaptahap Kompilasi
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
6/63
6
Kompilator (compiler) adalah sebuahprogram yang membaca suatu program yang ditulis
dalam suatu bahasa sumber (source language) dan menterjemah-kannya ke dalam suatu bahasa
sasaran (target language).
Proses kompilasi dikelompokan ke dalam dua kelompok besar:
1.Tahap Analisa (Front-end)
Menganalisis source code dan memecahnya menjadi bagian-bagian dasarnya. Menghasilkan
kode level menengah dari source code input yang ada.
2.Tahap Sintesa (Back-end)
Membangun program sasaran yang diinginkan dari bentuk antara.
Tahap-tahap yang harus dilalui pada saat mengkompilasi program, yaitu:
a. Analisa Leksikal
b. Analisa Sintaks Tahap analisa (front-end)
c. Analisa Semantik
d. Pembangkit Kode Antara
e. Code optimization Tahap sintesa (back-end)
f. Object code generation
Gambar 1.5. Skema blok kompilator
Keterangan :
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
7/63
7
- Analisa Leksikal (scanner)
Berfungsi memecah teks program sumber menjadi bagian-bagian kecil yang mempunyai
satu arti yang disebut token, seperti : konstanta, nama variabel, keyword, operator.
- Analisa Sintaks(parser)
Berfungsi mengambil program sumber (sudah dalam bentuk barisan token) dan menentukan
kedudukan masing-masing token berdasarkan aturan sintaksnya dan memeriksa kebenaran
dan urutan kemunculan token.
- Analisa Semantik
Berfungsi menentukan validitas semantiks/keberartian program sumber.Biasanya bagian ini
digabung denganPembangkit kode antara(intermediate code generator).
- Pembangkit Kode Antara
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 record untuk tiap identifier dengan atribut-atribut identifier itu.
- Penangan Kesalahan (Error handler)
Berfungsi menangani kesalahan yang berlangsung selama proses kompilasi.
Contoh :
pernyataan pemberian nilai (assignment) :
position := initial + rate * 60
4.Model Kompilator
Pekerjaan untuk membuat sebuah kompilator untuk suatu bahasa sumber sangat rumit.
Kerumitan serta sifat dari proses kompilasi tergantung pada tingkat keluasan dari bahasa sumber.
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
8/63
8
Kerumitan Kompilator dapatt dikurangi jika perancang bahasa pemrograman
mempertimbangkan bermacammacam factor perancangan.
Bagianbagian sebuah Kompilator :
4.1Analisis
a. Mengenali masukan (Scanner)
b. Memeriksa kebenaran tata bahasa masukan (Parser)
c. Menangkap makna masukan (pengenal semantic)
4.2Sintesis
a. Pembangkit Kode
b. Pengoptimal Kode
Semua bagian tersebut dalam operasinya didukung dan merefer ke tabel symbol
ANALISIS SINTESIS
Scanner : memecah program sumber menjadi besaran leksik/token.
Parser : memeriksa urutan kemunculan token.
Analisis Semantik : biasanya digabungkan dengan intermediate code generator (bagian yang
berfungsi membangkitkan kode antara).
Program Sumber Program Objek
Penganalisis Leksikal
(Scanner)
Penganalisis
Syntax
(Parser)
Penganalisis
Semantik
Pengoptimal Code
(Optimizer)
Pembangkit Kode
(Code Generator)
TABEL SIMBOL
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
9/63
9
Code Generator : membangkitkan kode objek.
Code Optimizer : memperkecil hasil dan mempercepat proses.
Tabel Simbol : menyimpan semua informasi yang berhubungan dengan kompilasi.
Token : besaran pembangun bahasa/representasi dari besaran leksik
5.Mutu Kompilator
5.1 Kecepatan dan waktu proses kompilasi, Tergantung pada :
a. Penulisan algoritma kompilator, yaitu algoritma yang digunakan untuk menuliskan program
kompilator tersebut.
b. Kompilator pengkompilasi, sebuah program khusus yang menghasilkan kompilator tersebut.
5.2Mutu program objek yakni ukuran dan kecepatan eksekusi dari program objek, Tergantung
pada :
Fungsi translasi yang digunakan (cara untuk melakukan perubahan dari source code ke object
code).
5.3 Integrated Environment, yaitu fasilitas-fasilitas terintegrasi yang dimiliki oleh kompilator
tersebut. Misalnya untuk melakukan editing, debugging, maupun testing.
6.Pembuatan Kompilator
Dapat dilakukan dengan :
6.1Bahasa mesin :
a. Sangat sukar dan sangat sedikit kemungkinannya untuk membuat compiler dengan
bahasa ini, karena manusia susah mempelajari bahasa mesin,
b. Sangat tergantung pada mesin,
c. Bahasa Mesin kemungkinan digunakan pada saat pembuatan Assembler
6.2Bahasa assembly :
a. Hasil dari program mempunyai Ukuran yang relatif kecil
b. Sulit dimengerti karena statement/perintahnya singkat-singkat, butuh usaha yang besar
untuk membuat
c. Fasilitas yang dimiliki terbatas
6.3Bahasa tingkat tinggi.
a. Lebih mudah dipelajari
b. Fasilitas yang dimiliki lebih baik (banyak)
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
10/63
10
c. Memiliki ukuran yang relatif besar, misal membuat compiler pascal dengan
menggunakan bahasa C
d. Untuk mesin yang berbeda perlu dikembangkan tahapan-tahapan tambahan.
e. Misal membuat compiler C pada Dos bedasarkan compiler C pada unix
6.4Bootstrap (diperkenalkan oleh Wirth).
Ide : kita bisa membangun sesuatu yang besar dengan dimulai dari bagian intinya.
PO dibuat dengan assembly,
P1 dibuat dari P0, dan
P2 dibuat dari P1, jadi compiler untuk bahasa P dapat dibuat tidak harus dengan menggunakan
assembly secara keseluruhan
BAB II
Konsep dan Notasi Bahasa
Teori Bahasa
Bahasa adalah kumpulan kalimat.Kalimat adalah rangkaian kata.Kata adalah komponen
terkecil kalimat yang tidak bisa dipisahkan lagi.
Contoh :
Si Kucing kecil menendang bola besar = Bhs Indonesia
The little cat kicks a big ball = Bhs Inggris
for i := start to finish do A[i] := B[i]*sin(i*pi/16.0) = Bhs Pascal
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
11/63
11
1.Istilah Dalam Bahasa
Tata bahasa (grammar) adalah sekumpulan dari himpunan variabel-variabel, simbol-simbol
terminal, simbol non-terminal, simbol awal yang dibatasi oleh aturan-aturan produksi
Aturan produksi adalah pusat dari tata bahasa yang menspesifikasikan bagaimana suatu tata
bahasa melakukan transformasi suatu string ke bentuk lainnya
Syntax : suatu aturan yang memberitahu apakah sesuatu kalimat (string) adalah valid dalam
program atau tidak
Semantic :suatu aturan-aturan yang memberikan arti kepada program
Pengertian dasar
a. Setiap anggota alfabet, dinamakan sebagai simbol terminal atau token
b. Himpunan simbol terminal dinyatakan sebagai VN, sedangkan himpunan simbol
nonterminal dinyatakan sebagai VT.
c. Simbol-simbol berikut adalah simbol terminal :
i. Huruf kecil awal alfabet, misal x, y, z.
ii. Simbol operator, misal +, -, dan xKonsep dan notasi bahasa 2
iii.Simbol tanda baca, misal (,), dan ;
iv. String yang tercetak tebal, misal, if, then, dan else
d. Simbol-simbol berikut adalah simbol non terminal
i. Huruf besar awal alfabet, misal X, Y, Z.
ii. Huruf S sebagai simbol awal
iii. String yang tercetak miring, misal expr danstmt
e. Huruf besar akhir alfabet melambangkan simbol terminal atau non terminal, misal X, Y,
Z
f. Huruf kecil akhir alfabet melambangkan string yang tersusun atas simbol-simbolterminal,
misalnya : x, y, z.
g. Sebuah produksi dilambangkan sebagai a b, artinya : dalam sebuah derivasi
dapatdilakukan penggantian simbol a dengan simbol b.
h. Simbol a dalam produksi berbentuk a b disebut ruas kiri produksi sedangkan simbol
bdisebut ruas kanan produksi.Pengertian terminal berasal dari kata terminate (berakhir),
maksudnya derivasi berakhir jika sentensial yang dihasilkan adalah sebuah kalimat (yang
tersusun atas simbol-simbol terminal itu).
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
12/63
12
i. Pengertian non terminal berasal dari kata not terminate (belum/tidak berakhir),
maksudnyaKonsep dan notasi bahasa 3derivasi belum/tidak berakhir jika sentensial yang
dihasilkan mengandung simbol nonterminal.
j. String adalah deretan terbatas (finite) simbol-simbol. Sebagai contoh, jika a, b, dan c
adalahtiga buah simbol maka abcb adalah sebuah string yang dibangun dari ketiga
symbol tersebut.
k.
didefinisikansebagai cacahan (banyaknya) simbol yang menyusun string tersebut.
l. String hampa adalah sebuah string dengan nol buah simbol. String hampa
sebagai simbolhampa karena keduanya tersusun dari nol buah simbol.
2.Hierarki Chomsky
a. Tata Bahasa Sederhana :
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
13/63
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
14/63
14
4.Diagram Syntax
Diagram sintaks merupakan alat bantu dalam pembentukan parser / analisis sintaks. Notasi
yang terdapat dalam diagram sintaks :
a. Empat persegi panjang melambangkan simbol variabel / non terminal.
b. Bulatan melambangkan simbol terminal
Misalnya : -E
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
15/63
15
BAB III
BAHASA REGULER
A. TATA BAHASA REGULER
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.
Tata bahasa (grammar) adalah sekumpulan dari himpunan variabel-variabel,
simbol-simbol terminal, simbol non-terminal, simbol awal yang dibatasi
oleh aturan-aturan produksi.
B. HIRARKI TATA BAHASA
Menurut Noam Chomsky (1950), Tata-bahasa formal dapat dikelompokkan
menjadi 4 tingkatan (hierarchi), biasa disebut hierarki tata-bahasa menurut Chomsky.
Pengelompokan tata-bahasa menurut Chomsky ini ditentukan oleh aturan produksi yang
dimiliki oleh grammar, yaitu tata-bahasa Tipe-0, Tipe-1, Tipe-2 danTipe-3.
Andaikan aturan produksi dalam suatu grammar G dituliskan sebagai :
dengan masing-masing dan adalah string-string yang dapat terdiri dari simbol Non
terminal atau pun simbol terminal, atau : , ( N)*
maka masing-masing kelas tata-bahasa dibatasi sebagai berikut:
1. Tata-bahasa Tipe 0 (Non-restricted Grammar):
Tata-bahasa tipe-0, atau biasa disebut sebagai non-restricted grammar adalah tata
bahasa yang paling luas, juga biasa disebut PHRASE STRUCTURED GRAMMAR.
Tata-bahasa Tipe-0 adalah tata-bahasa yang memiliki aturan produksi :
dengan batasan :
: minimal terdiri dari 1 simbol Non terminal , atau {( N)* N (N)*}
: tidak dibatasi, atau : {( N)*
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
16/63
16
2. Tata-bahasa Tipe 1 (Context Sensitive Grammar):
Tata-bahasa tipe-1, adalah tata-bahasa tipe-0 yang memiliki aturan produksi :
dengan tambahan batasan :
| | < | | jika tidak dalam bentuk S
yaitu panjang string lebih kecil atau sama dengan panjang string
3. Tata-bahasa Tipe 2 (Context -Free Grammar):
Tata-bahasa tipe-2, adalah tata-bahasa tipe-1 yang memiliki aturan produksi :
dengan tambahan batasan :
: HANYA terdiri dari 1 simbol Non terminal saja, atau N
: tidak dibatasi, atau : {( N)*
4. Tata-bahasa Tipe 3 ( Regular Grammar):
Tata-bahasa tipe-3, adalah tata-bahasa tipe-2 yang memiliki aturan produksi :
dengan tambahan batasan :
: HANYA terdiri dari 1 simbol Non terminal saja, atau N
: dalam bentuk salah satu diantara : a, aB, atau dimana a adalah simbol terminal
dan B adalah simbol Non terminal.
C. EKSPRESI REGULER
Sebelum memasuki bahasan tentang ekspresi regular dan bahasa regular, dapat
dinyatakan suatu kenyataan berikut. Jika adalah suatu himpunan abjad (yang tentu saja
jumlahnya terhingga), maka :
1. * = himpunan seluruh string yang dapat disusun dari abjad dalam (seperti yang
telah disampaikan dalam bab II) adalah berjumlah TAK HINGGA (countably
inifinite).
2. Kumpulan dari semua bahasa yang dapat dibangkitkan dari abjad dalam berjumlah
tak terhitung (uncountably) Selanjutnya ekspresi regular dapat didefinisikan secara
rekursif dari definisi-definisiberikut :
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
17/63
17
Definisi Ekspresi Regular :
1. = {} = (himpunan kosong) adalah sebuah ekspresi regular
2. { } =string kosong adalah ekspresi regular
3.
Untuk setiap a , maka a adalah ekspresi regular4. Jika a dan b adalah ekspresi regular maka ab , ab dan a* adalah ekspresiregular.
Dari definisi tentang ekspresi regular selanjutnya dapat dituliskan beberapa akibat
logis, berdasarkan aturan-aturan dalam teori himpunan, sebagai berikut :
Jika a,b,c adalah ekspresi regular dalam
1. ab = ba
2. a = a
3. a a = a
4. (a b) c = a (b c)
5. a = a = a
a = a =
7. (ab) c = a (bc)
8. A (b c) = ab ac = dan (a b) c = ac bc
9. a* = a** = a*a* = ( a)* = a*(a ) = (a ) a* = aa*
10. aa* = a*a
D. TATA BAHASA REGULER
Seperti telah dituliskan dalam bab sebelumnya, bahasa regular merupakan kelas
bahasa yang dibangkitkan oleh tata bahasa regular. Tata bahasa ini memiliki aturan
produksi dengan batasan :
: HANYA terdiri dari 1 simbol Non terminal saja, atau N
: dalam bentuk salah satu diantara : a, aB, atau
Contoh 3.3:
Tentukan bahasa yang dihasilkan oleh tata bahasa regular berikut :G(, N, S, P) ; dimana
={ a,b } N = { A, B} danP ={ SaS ; SaB ; SA ; Bb; BbB; B ; Aa}
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
18/63
18
Jawab :
Untuk menurunkan bahasa dari suatu grammar yang diketahui, maka seluruh
kemungkinan penurunan yang dapat dilakukan oleh grammar tersebut harus dilakukan.
String-string yang dihasilkan dihimpun membentuk suatu bahasa dari grammar tersebut.
Untuk mempermudah pelacakan, tetapkan cacah aturan produksi yang ada , dalam
grammar tersebut ada 7 aturan produksi, yaitu :
1. SaS ;
2. SaB ;
3. SA ;
4. Bb;
5. BbB;
6. B ;
7. Aa
E. AHD, AHN, dan AHN_
1. AH didefinisikan sebagai pasangan 5 tupel : (K, VT
, M, S, Z).
K : himpunan hingga stata,
VT
: himpunan hingga simbol input (alfabet)
M : fungsi transisi, menggambarkan transisi stata AH akibat pembacaan simbol input.
Fungsi transisi ini biasanya diberikan dalam bentuk tabel.
S K : stata awal
Z K : himpunan stata penerima.
2. Ada dua jenis automata hingga : deterministik (AHD, DFA = deterministic finite
automata) dan non deterministik (AHN, NFA = non deterministik finite automata).
- AHD : transisi stata AH akibat pembacaan sebuah simbol bersifat tertentu.
M(AHD) : K V T K
- AHN : transisi stata AH akibat pembacaan sebuah simbol bersifat tak tentu.
M(AHN) : K VT
K
2
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
19/63
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
20/63
20
q 3 {q 3 } {q 3 } {q 3 , q 4 }
q 4
Ilustrasi graf untuk AHN F adalah sebagai berikut :
Contoh kalimat yang diterima AHN di atas : aa, bb, cc, aaa, abb, bcc, cbb
Contoh kalimat yang tidak diterima AHN di atas : a, b, c, ab, ba, ac, bc
Fungsi transisi M sebuah AHN dapat diperluas sebagai berikut :
1. M(q, ) = {q} untuk setiap q K
2. M(q, t T) = M(p i , T) dimana t V T , T adalah V T *, dan M(q, t) = {p i }
3. M({q 1 , q 2 , , q n }, x) = M(q i ,x), untuk x V T *
Sebuah kalimat di terima AHN jika :
a. salah satu tracing-nya berakhir di stata penerima, atau
b. himpunan stata setelah membaca string tersebut mengandung stata penerima
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
21/63
21
BAB IV
ANALISA LEKSIKAL
Bahasa Sumber
Bahasa adalah kumpulan kalimat. Kalimat adalah rangkaian kata. Kata adalah unitterkecil komponen bahasa yang tidak bisa dipisah-pisahkan lagi. Dalam bahasa pemrograman
kalimat lebih dikenal sebagai ekspresi sedangkan kata sebagai token.
Perancangan sebuah bahasa harus memperhatikan tiga aspek berikut :
1. spesifikasi leksikal,
2. spesifikasi sintaks
3. aturan-aturan semantik
Dalam spesifikasi leksikal biasanya digunakan grammar regular (GR) dalam bentuk ekspresi
regular (ER). Sebagai contoh pola token identifier ditentukan oleh grammar regular berikut
:\
IaAbAzAabz,
AaAbAzA0A1A9Aabz01
yang ekuivalen dengan ekspresi regular berikut :
I = (abz)( abz019)* = huruf(hurufangka)*
Dalam spesifikasi sintaks biasanya digunakan context free grammar (CFG). Sebagai contoh
ekspresi if-then E adalah :
E if L then, L IOA, I = huruf(hurufangka)*, O =, A 019.
Analisa Leksikal (Scanner)
Dalam kaitan ini aliran karakter yang membentuk program sumber dibaca dari kiri ke
kanan dan dikelompokkan dalam apa yang disebut token yaitu barisan dari karakter yang dalam
suatu kesatuan mempunyai suatu arti tersendiri. Analisa ini melakukan penerjemahan
masukan menjadi bentuk yang lebih berguna untuk tahap-tahap kompilasi berikutnya.
Analisa Leksikal merupakan antarmuka antara kode program sumber dan analisa sintaktik
(parser). Scanner melakukan pemeriksaan karakter per karakter pada teks masukan,
memecah sumber program menjadi bagian-bagian disebut Token. Analisa Leksikal
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
22/63
22
mengerjakan pengelompokkan urutan-urutan karakter ke dalam komponen pokok: identifier,
delimeter, simbol-simbol operator,angka, keyword, noise word,blank, komentar, dan
seterusnya menghasilkan suatu Token Leksikal yang akan digunakan pada Analisa Sintaktik.
Model dasar untuk membentuk suatu Analisa Leksikal adalah Finite- State Automata.
Dua aspek penting pembuatan Analisa Leksikal adalah :
- Menentukan token-token bahasa.
- Mengenali token-token bahasa dari program sumber.
Token-token dihasilkan dengan cara memisahkan program sumber tersebut
dilewatkan ke parser. Analisa Leksikal harus mengirim token ke parser. Untuk mengirim token,
scanner harus mengisolasi barisan karakter pada teks sumber yang merupakan 1 token
valid. Scanner juga menyingkirkan informasi seperti komentar, blank, batas-batas baris dan
lain-lain yang tidak penting (tidak mempunyai arti) bagi parsing dan Code Generator.
Analisa Sintaktik dapat memasukkan string ke tabel simbol, mengidentifikasi sebagai
Type atau typedef, sehingga analisa leksikal dapat memeriksa tabel simbol untuk menentukan
apakah lexeme adalah tipe token atau identifier.
Tugas Analisa leksikal
Tugastugas analisa leksikal antara lain :
a. Melakukan pembacaan kode sumber dengan merunut karakter demi karakter.
b. Mengenali besaran leksik (identifier, keywords, dan konstanta).
c. Mentransformasi menjadi sebuah token dan menentukan jenis tokennya.
d. Mengirimkan token.
e. Membuang atau mengabaikan white-space dan komentar dalam program.
f. Menangani kesalahan.
g. Menangani tabel simbol.
Tahap Pelaksanaan Analisa Leksikal
- Pada single one pass
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
23/63
23
Terjadi interaksi antara scanner dan parser. Scanner dipanggil saat parser memerlukan token
berikutnya.
- Pada separate pass / multi pass
Scanner memproses secara terpisah, dilakukan sebelum parsing. Hasil scanner
disimpan dalam file. Dari file tersebut, parsing melakukan kegiatannya.
Implementasi Analisa Leksikal
a. Pengenalan Token
- Scanner harus dapat mengenali token
- Terlebih dahulu dideskripsikan token-token yang harus dikenali
b. Pendeskripsian Token
- Menggunakan reguler grammar. Menspesifikasikan aturan-aturan pembangkit token-
token dengan kelemahan reguler grammar menspesifikasikan token berbentuk pembangkit,
sedang scanner perlu bentuk pengenalan.
- Menggunakan ekspresi grammar. Menspesifikasikan token-token dengan ekspresi reguler.
- Model matematis yang dapat memodelkan pengenalan adalah finite-state acceptor
(FSA) atau finite automata.
c. Implementasi Analisa Leksikal sebagai Finite Automata
Pada pemodelan analisa leksikal sebagai pengenal yang menerapkan finite automata, analisa
leksikal tidak cuma hanya melakukan mengatakan YA atau TIDAK.
d. Penanganan Kesalahan di Analisa Leksikal
Hanya sedikit kesalahan yang diidentifikasi di analisa leksikal secara mandiri karena analisa
leksikal benar-benar merupakan pandangan sangat lokal terhadap program sumber. Bila
ditemui situasi dimana analisa leksikal tidak mampu melanjutkan proses karena tidak ada pola
token yang cocok, maka terdapat beragam alternatif pemulihan, yaitu:
- Panic mode dengan menghapus karakter-karakter berikutnya sampai analisa leksikal
menemukan token yang terdefinisi bagus
- Menyisipkan karakter yang hilang
- Mengganti karakter yang salah dengan karakter yang benar
- Mentransposisikan 2 karakter yang bersebelahan.
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
24/63
24
Input Buffering
Perancangan analisa leksikal seharusnya dapat membuat buffering masukkan yang
membantu mempercepat proses pembacaan dari file serta mempunyai fleksibelitas yang
tinggi agar analisa leksikal tidak bergantung platform sehingga mempunyai portabilitas
yang tinggi.
Membangun Analisa Leksikal
Scanner diimplementasikan dengan Automata Hingga Deterministik (AHD). Pada
kuliah Teori Bahasa dan Automata (atau Pengantar Automata, Bahasa Formal, dan
Kompilasi) telah dipelajari siklus transformasi : GR ER AHN AHD GR.
Token
Token merupakan unit atau elemen dasar bahasa komputer (seperti 'kata' di bahasa
manusia), dimana unit tersebut tidak terbagi lagi. Token merupakan bagian hasil dari pemecahan
sumber program yaitu penerjemahan lexeme pada saat melakukan scanner.
Token mereprentasikan nama :
identifier -> nama variabel, fungsi, tipe atau nama yang didefinisikan pemakai.
Keyword
literal string
operator
label
simbol tanda -> tanda kurung, koma, titik koma.
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
25/63
25
BAB V
TATA BAHASA KONTEKS FREE
Bahasa merupakan himpunan kalimat (baik terhingga maupun tak terhingga).Bahasa
dapat disajikan dengan menyebut kalimatnya satu persatu.Untuk bahasa tak hingga, penyebutan
seperti itu tidak mungkin. Chomsky mengelompokkan Grammar menjadi 4 kelompok :
1. Tipe nol : UnRestricted Grammar (Tata Bahasa Tidak Terbatasi)
2. Tipe satu : Context Sensitive Grammar (Tata Bahasa Tergantung Konteks)
3. Tipe dua : Context Free Grammar ( Tata Bahasa Bebas konteks)
4. Tipe tiga : Regular Grammar
Regular Grammar merupakan subset dari Context Free Grammar.
Context Free Grammar merupakan subset dari Context Sensitive Grammar.
Context Sensitive Grammar merupakan subset dari UnRestricted Grammar.
1. Tata Bahasa Bebas Konteks/Context Free
TBBK (tata bahasa bebas konteks) adalah sekumpulan simbol-simbol variabel (non-
terminal), yang masing-masing merepresentasikan bahasa.Bahasa yang direpresentasikan dengan
simbol-simbol non terminal tersebut diproses secara rekursif dengan suatu aturan-aturan yang
disebut aturan produksi.
Tata bahasa bebas konteks (tipe 2) memiliki elemen:
Terminal : simbol dasar yang tidak dapat diturunkan lagi. Terminal disebut juga token.
Non terminal : variabel sintaktik yang masih dapat diturunkan lagi.
TBBK (Tata Bahasa Bebas Konteks)
Contoh TBBK untuk pasangan kurung yang selalu berpasangan:
S => R
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
26/63
26
R => {}
R => (R)
R => RR
Contoh TBBK untuk palindrom:
S => R
R => {} a b
R =>aRa bRb
Contoh TBBK:
S => aS
S =>bT
T => a
Maka misalkan untuk string aabamaka TBBK diatas dapat diturunkan menjadi :
S> aS
S => aaS
S => aabT
S => aaba
Artinya string aabacocok dan diterima oleh TBBK diatas.
a. Tata Bahasa Konteks Free dan hubungannya dengan Parcer atau ebagai
Penganalisa Syntax
CFG menjadi dasar dalam pembentukan suatu parser/proses analisis sintaksis.
Parser adalah sebuah program, biasanya bagian dari sebuah compiler ,yang menerima input
dalam bentuk instruksi program sumber secara sekuensial,perintah-perintah online yang
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
27/63
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
28/63
28
diperluas terlebih
dahulu.
Misal : Tata bahasa sbb :
S aAS | a
A SbA | ba
Untuk memperoleh untai aabbaa dari tata bahasa diatas dilakukan dengan cara :
Penurunan terkiri: S => aAS => aSbAS => aabAS => aabbaS => aabbaa
Penurunan terkanan : S => aAS => aAa => aSbAa => aAbbaa => aabbaa
AMBIGUITAS
Ambiguitas terjadi bila terdapat lebih dari satu pohon penurunan yang berbeda untuk
memperoleh suatu untai.Definisi Syntax itu sendiri dalam suatu bahasa pemrograman adalah satu
himpunan peraturan yang menjelaskan bagaimana simbol-simbol bahasa dapat dirangkai
bersama untuk membentuk pernyataan(statement)yang berarti.
b. Derivasi dan Pohon Derivasi
Dalam ilmu linguistik, derivasi adalah adalah proses pembentukan kata yang
menghasilkan leksem baru (menghasilkan kata-kata yang berbeda dari paradigma yang berbeda);
Pembentukan derivasi bersifat tidak dapat diramalkan. Konsep derivasi berkaitan dengan kaidah
sintaktik, tidak otomatis, tidak sistematik, bersifat optional/sporadis, serta mengubah identitas
leksikal.
Contoh pola derivasi bahasa Inggris dan akhiran mereka:
kata sifat-ke-kata benda: -ness (slow slowness)
kata sifat-ke-kata kerja: -ise (modern modernise) dalam Inggris Britania atau -ize
(archaic archaicize) dalam Inggris Amerika dan ejaan Oxford
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
29/63
29
Pohon derivasi merupakan suatu untai terminal yang tersusun dalam bentuk tree yang
merupakan suatu himpunan produksi dengan cara melakukan sederetan produksi menggunakan
produksi yang ada.
Pohon derivasi ini dapat diterapkan pada suatu ekspresi string ataupun pada ekspresi
aritmatika.
Pohon derivasi pada ekspresi string
Rumus :
Pohon derivasi pada ekspresi aritmatika
Ada beberapa ketentuan yang sering dipakai dalam suatu penyusunan pohon derivasi
untuk ekspresi aritmatika
Rumus :
( ) operand
+ -
* div
Contoh : Si adik kecil menendang bola besar.
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
30/63
30
c. Modifikasi Tata bahasa
Modifikasi Tata Bahasa dilakukan dengan cara Penyederhanaan.Penyederhanaan tata bahasa
bebas konteks bertujuan untuk melakukan pembatasan sehingga tidak menghasilkan pohon
penurunan yang memiliki kerumitan yang tak perlu atau aturan produksi tak berarti.
Missal :
S AB | a
A a
Kelemahanya adalah aturan produksi S AB tidak berarti karena B tidak memiliki penurunan.
Penyederhanaan tata bahasa bebas konteks dapat di lakukan dengan 3 cara :
1. Penghilangan Produksi Useles
Produksi yang memuat simbol variabel yang tidak memiliki penurunan yang akan
menghasilkan terminal-terminal seluruhnya. Produksi yang tidak akan pernah dicapai dengan
penurunan apapun dari simbol awal sehingga produksi itu redundan.
Contoh :
S aSa | Abd | Bde
A Ada
B BBB |a
Langkah penyederhanaannya :
Hilangkan aturan yang tidak menuju terminal.
Hapus anggota S yang mengandung simbol himpunan ke terminal yang tidak berguna
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
31/63
31
Hilangkan Redundan ( Anggota yang tidak ada di S dan Sebaliknya )
Maka, hasil penyederhanaanya adalah sbb :
S aSa | Bde
B BBB | a
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. Keberadaanya membuat tata bahasa memiliki
kerumitan yang tak perlu, maka bisa dihilangkan.
Langkah penyederhanaanya :
Jabarkan masing-masing himpunan
Sederhanakan ruas kiri dan kanan yang hanya berupa variabel simbol sama
Hapus simbol variabel yang tidak berguna / tidak mempunyai turunan
Contoh suatu CFG sbb :
S Sb
S C
C D
C ef
D dd
Jabarkan penurunan masingmasing himpunan :
C D => C dd
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
32/63
32
S C => S dd | ef
Maka hasilnya adalah sbb :
S Sb
S dd | ef
C dd
C ef
D dd
3. Penghilangan Produksi Empty ( )
Definisi produksi empty adalah produksi kosong, (dengan bentuk ) penghilangan dapat
dilakukan dengan penggantian produksi yang memuat variabel yang menuju ke .
Langkah Penyederhanaannya :
Hilangkan simbol yang terdapat empty ( ) dalam himpunan produksi
Simbol variabel tidak di hapus jika terdapat cabang terminal / variabel yang saling berhubungan
Buat himpunan dengan simbol yang dihilangkan dan yang tidak
Contoh :
S bcAd
A e
Maka variabel A bisa di hilangkan, sehingga menjadi :
S bcd
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
33/63
33
Kasus lain :
S bcAd
A bd |
Maka hasilnya akan menjadi :
S bcAd | bcd
A bd
Karena A bukan satu-satunya produksi dari A
Kasus lainya :
S Ab | Cd
A d
C
Hasil penyederhanaan sebagai berikut :
S Ab | d
A d
2. Parcer (Penganalisa Syntax)
a.
Pohon Syntax (syntax tree)menjelaskan mengenai bahasa secara teoritis dan formal, kita lihat terlebih dahulu sebuah
kalimat sehari-hari dalam bahasa Indonesia, yaitu :
Si kucing kecil menendang bola besar
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
34/63
34
Gambar penguraian kalimat di atas membentuk struktur pohon, yang disebut pohon sintaks dari
kalimat.Disini kalimat dibagi-bagi berdasar jenis dan fungsi kata.
Posisi Penganalisa Sintaks (Parser) dalam proses kompilasi adalah sebagai berikut :
- Deretan token : dihasilkan oleh Penganalisa Leksikal (Scanner)
- Pohon parse : suatu pohon dimana akarnya (root) adalah simbol awal grammar
(starting symbol), setiap node dalam (inner node) adalah simbol nonterminal, dan daunnya (leaf)
dibaca dari kiri ke kanan adalah deretan token masukan. Pohon parse ini dibentuk berdasarkan
aturan grammar yang ditetapkan untuk parser.
- Kesalahan sintaks : terjadi jika pola deretan token tidak memenuhi ketentuan pola yang telah
ditentukan grammar untuk parser.
b. Metode Parsing
Parsing adalah proses menganalisa urutan token dengan tujuan untuk menentukan struktur tata
bahasanya dibandingkan dengan tata bahasa normal yang diberikan Proses ini secara formal
disebut analisis sintaks.
Parser adalah sebuah program komputer yang menjalankan tugas ini,Parsing dapat dilakukan
dengan cara :
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
35/63
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
36/63
36
Penurunan untuk string aaabbabba
Proses parsing merupakan tahapan analisis sintaksis yang berguna untuk memeriksa urutan
kemunculan token.Di dalam mengimplementasikan sebuah metode parsing ke dalam program
perlu diperhatikan tiga hal sebagai berikut.
1.Rentang waktu eksekusi.
2.Penanganan kesalahan.
3.Penanganan kode.
Metode parsingbisa digolongkan sebagai berikut.
1.Top Down
Jika dilihat dari terminologi pohon penurunan, metode ini melakukan
proses penelurusan dariroot/puncak menuju keleaf/daun (simbol awalsampai simbol terminal).
Metodetop down
sendiri meliputi:
a.Backtrack/backup : Brute Force.
b.No backtrack : Recursive Descent Parser.
2.Bottom Up
Metode ini melakukan penelurusan darileaf/daun menuju root/puncak.
parsing dengan Brute Force Metode ini memilih aturan produksi mulai dari paling kiri, dan
melakukan expand semua non terminal pada atuan produksi sampai yang tertinggal adalah
simbol terminal.
TBBK Rekursif Kiri
TBBK yang memiliki simbol non terminal di ruas kanan dari simbol non terminal yang ada di
ruas kiri.Simbol non terminal itu terletak di ruas kanan terdepan.
Contoh :
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
37/63
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
38/63
38
S => aAd
S =>abd : gagal, maka dilakukan backtrack
S =>acd : gagal, maka dilakukan backtrack
S => aB
S =>accd : berhasil!
Kelemahan Brutal Force :
1.Mencoba untuk semua aturan produksi yang ada sehingga lambat (rentan
waktu eksekusi tidak jelas).
2.Menyulitkan untuk melakukan pemulihan kesalahan.
3.Memakan banak memori karena perlu mencatatbackuplokasibacktrack
b. Parsing dengan Recursive Descent Parser
Recursive Descent Parser adalah salah satu cara untuk mengaplikasikan bahasa bebas
konteks untuk melakukan analisis sintaksis suatu source code.
Di sini simbol terminal maupun symbol variabelnya sudah bukan sebuah karakter, tetapi
berupa besaran leksi sebagai simbol terminalnya dan besaran sintaks sebagai simbol variabelnya.
Ciri dari recursive descent parser yant menonjol adalah secara rekursive menurunkan
sebuahvariabeldari awal sampai bertemu terminal dan tidak pernah mengambil token secara
mundur serta sangat tergantung pada algoritma scan dalam mengambil token.
Parsing dengan Recursive Descent Parser
a. Salah satu cara untuk meng-aplikasikan bahasa context free
b. Simbol terminal maupun simbol variabelnya sudah bukan sebuah karakter
c. Besaran leksikal sebagai simbol terminalnya, besaran syntax sebagai simbol variablenya
/non terminalnya
d. Dengan cara penurunan secara recursif untuk semua variabel dari awal sampai ketemu
terminal
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
39/63
39
e. Tidak pernah mengambil token secara mumdur (back tracking)
a. Beda dengan turing yang selalu maju dan mundur dalam melakukan parsing
Aturan Produksi memakai Recursif Descent :
1. Semua simbol variabel dijadikan prosedur/fungsi
2.Jika ketemu simbol terminal pada aturan produksi , maka panggil prosedurnya
3. Penelusuran bersifat top down mengikuti sintaks sesuai pola pada diagram sintaks
4. Fungsi/prosedur ditulis untuk setiap non terminal dari suatu produksi.
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
40/63
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
41/63
41
b) Memeriksa tipe. Melakukan pemeriksaan terhadap kesesuaian tipe dalam statement-
statement yang ada. Misalkan bila terdapat suatu operasi, diperiksa tipe operand.
Contohnya bila ekspresi yang mengikuti instruksi IF berarti tipenya boolean, akan
diperiksa tipe identifier dan tipe ekspresi. Bila ada operasi antara dua operand, maka
tipe operand pertama harus bisa dioperasikan dengan operand kedua.
Teknik-teknik pendeskripsian Semantik bahasa pemrograman:
a. Operational Semantic
Pendekatan ini mendefinisikan suatu mesin buatan (abstract) dengan instruksi-
intruksi promitif, tidak perlu realistik, tetapi cukup sederhana supaya tidak muncul
kesalahpahaman. Deskripsi semantik dari bahasa pemrograman menentukan suatu
traslasi ke kode.
b. Denotational Semantic
Pada pendekatan ini, diberikan suatu fungsi yang memetakan program-program
komputer yang ditunjuk kedalam bentuk nilai-nilai abstrak secara matematika
(angka, nilai, kebenaran, fungsi matematika).
c. Axiomatic Semantic
Pendekatan ini mendefinisikan suatu tindakan program yang dibangun dengan
properti logika yang menyimpan status komputer sebelum dan sesudah eksekusi.
d. Algebraic Semantic
Pendekatan ini dipertimbangkan suatu objek komputasi yang menjadi syarat-syarat
dalam aljabar multi-sorted. Program mengimplementasikan fungsi yang dapat
diwujudkan dengan suatu persamaan diantara syarat-syarat tersebut.
e. Structured Operational atau Natural Semantic
Seperti dalam pengambilan keputusan secara alamiah dengan logika. Program diberi
suatu arti dari aturan yang diturunkan yang menggambarkan penilaian gagasan suatu
bahasa.
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
42/63
42
Tugas dari Analisa Semantik:
1. Pohon sintaks yang dihasilkan digunakan untuk semantics analiyser yang bertugas
untuk menentukan maksud dari program sumber, misalnya operator penjumlahan
maka semantics analiyser akan mengambil aksi apa yang harus dilakukan.
2. Terdapat statement: (A+B) * (C+D)
3. Akan menghasilkan bentuk sintaksis.
4. Melakukan pengecekan pada struktur akhir yang telah diperoleh dan diperiksa
kesesuainnya dengan komponen program yang ada.
5. Menghasilkan suatu kode objek yang dapat dieksekusi dalam translasi sederhana,
tetapi biasanya bentuk dari kode objek yang dapat dieksekusi ini merupakan bentuk
internal dari final program eksekusi, yang kemudian dimanipulasi oleh tahap
optimisasi dari translator sebelum akhirnya kode eksekusi benar-benar dihasilkan.
6. Berperan dalam memeriksa kesalahan-kesalahan yang bersifat semantik. Salah satu
peranan analisis semantik yang penting adalah pemeriksaan tipe variabel.
7. Memeriksa keunikan suatu nama.
8. Menganalisis kebenaran source program.
2. KODE ANTARA
Pembentukan kode antara merupakan tahap lanjutan setelah analisis semantik.
Hasil pembentukan kode antara dapat dianggap sebagai program dengan instruksi-instruksi
bahasa mesin abstrak. Bentuk representasi kode antara harus mudah pembuatannya dan
mudah diterjemahkan dalam bahasa tujuan. Salah satu bentuk representasi kode antara
adalah kode tiga alamat. Misalnya, suatu kalimat matematika:= b * c + d memiliki
bentuk kode tiga alamat sebagai berikut :
t1 := b * c t2 := t1 + d a := t2
Representasi kode tiga alamat memiliki bentuk yang menyerupai kode dalam
bahasa Assembly, sehingga memudahkan proses penterjemahannya, jika bahasa tujuan
adalah bahasa Assembly. Bentuk kode tiga alamat di atas memiliki karakteristik:
mengandung paling banyak tiga operand dan dua operator, serta memiliki variabel
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
43/63
43
sementara. Bentuk lain dari representasi kode antara adalah dalam bentuk representasi
grafik, seperti pohon maupun graf. Salah satu manfaat pembentukan kode antara adalah ia
berfungsi sebagai input untuk proses optimisasi.
Kode antara/Intermediate codemerupakan hasil dari tahapan analisis, yang dibuat
oleh kompilator pada saat mentranslasikan program dari bahasa tingkat tinggi. Terdapat
dua macam kode antara, yaitu Notasi Postfix dan N-Tuple. Kegunaan dari kode antara
sebagai berikut:
1. Untuk memperkecil usaha dalam membangun kompilator dari sejumlah bahasa ke
sejumlah mesin.
2. Proses optimasi masih lebih mudah.
3. Bisa melihat program internal yang mudah dimengerti.
Kode antara (intermediate code) adalah sebuah representasi yang disiapkan untuk
mesin abstrak tertentu. Dua sifat yang harus dipenuhi oleh kode antara adalah :
1. Dapat dihasilkan dengan mudah
2. Mudah ditranslasikan menjadi program sasaran (target program).
Contoh Parse tree:
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
44/63
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
45/63
45
Arti dari notasi Postfix di atas adalah sebagai berikut. Jika kondisi ekspresi salah,
maka instruksi akan meloncat ke Label1dan menjalankan statement2. Bila kondisi
ekspresi benar, maka statement1 akan dijalankan lalu meloncat ke Label2. Label1 dan
Label1 dan Label2 sendiri menunjukan posisi tujuan loncatan, untuk Label1 posisinya
tepat sebelum statement2, dan Label2 setelah statement2
Dalam implementasi ke kode antara, label bisa berupa nomor baris instruksi.
Untuk lebih jelasnya bisa dilihat contoh berikut.
IF a > b THEN
c := d
ELSE
c := e
Bila diubah ke dalam Postfix
11. a
12. b
13. >
14. 22 {menunjuk label1}
15. BZ
16. c
17. d
18. :=
19.
20. 25 {menunjuk label2}
21. BR
22. c
23. e
24. :=
25.
Notasi Postfix di atas bisa dipahami sebagai berikut.
1. Bila ekspresi (a > b) salah, maka loncat ke instruksi no.22
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
46/63
46
2. Bila ekspresi (a > b) benar, tidak terjadi loncatan, instruksi berlanjut ke 16 sampai
18, lalu loncat ke 25.
4. NOTASI N-TUPLE
Bila pada Postfix setiap baris instruksi hanya terdiri dari satu tupel, pada notasi N-
tuple setiap baris terdiri dari beberapa tupel. Format umum dari Notasi N-Tuple ada
sebagai berikut:
operator......(N-1) operand
Selanjutnya akan dibahas notasi 3 tupel dan 4 tupel.
1. Notasi 3 Tupel atau Triple Notation
Notasi tripel memiliki format sebagai berikut :
contoh, instuksi :
A := D * C + B / E
Kode antara tripel :
1. *, D,C
2. /, B, E
3. +, (1), (2)
4. :=, A, (3)
Operasi perkalian/pembagian lebih prioritas dibandingkan
penjumlahan/pengurangan
Kekurangan dari notasi tripel adalah sulit pada saat melakukan optimasi, maka
dikembangkan Indirect triples yang memiliki dua list (senarai), yaitu list instruksi
yang berisi notasi tripel dan list eksekusi yang berisi urutan eksekusinya.
Contoh :
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
47/63
47
A:= B+C*D/E
F:= C*D
List Instruksinya:
1. *, C, D
2. /, (1), E
3. +, B, (2)
4. :=, A, (3)
5. :=, F, (1)
List Eksekusinya :
1. 1
2. 2
3. 3
4. 4
5. 1
6. 5
2. Notasi 4 Tupel atau Quadruples Notation
Format notasi kuadrupel :
Hasil adalah temporary variable yang bisa ditempatkan pada memory atau
register. Masalah yang ada bagaimana mengelola temporary variable (hasil)
seminimal mungkin.
Contoh instruksi :
A := D * C + B / E
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
48/63
48
5. PEMBANGKITAN KODE
Hasil dari tahapan analisis akan diterima oleh bagian pembangkitan kode (code
generator). Disini kode antara dari program biasanya ditranslasikan ke bahasa assembly
atau bahasa mesin.
Contoh :
(A+B)*(C+D)
Notasi Kuadrupel :
1. +, A, B, T1
2. +, C, D, T2
3. *, T1, T2, T3
Dapat ditranslasikan ke dalam bahasa Assembly dengan akumulator tunggal :
LDA A {Muat isi A ke akumulator}
ADD B {Tambahkan isi akumulator dengan B}
STO T1 {Simpan isi akumulator ke T1}
LDA C
ADD D
STO T2
LDA T1
MUL T2
STO T3
Keluaran dari code generator akan diterima oleh code optimizer. Misalkan untuk
kode assembly diatas bisa dioptimasi menjadi :
LDA A
ADD B
STO T1
LDA C
ADD D
MUL T1
STO T2
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
49/63
49
Notes :
1. Perintah LDA : Memuat isi dari register/memory ke akumulator (load to
accumulator)
2. Perintah STO : Menyimpan isi akumulator ke register/memory (store from
accumulator)
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
50/63
50
BAB VIII
PENANGANAN KESALAHAN
Sebuah kompilator akan sering menemui program yang mengandung kesalahan,
maka kompilator harus memiliki strategi apa yang harus dilakukan untuk menangani
kesalahan - kesalahan tersebut.
1. KESALAHAN PROGRAM
a. Kesalahan Leksikal
Misalnya kesalahan mengeja keyword,
contoh: THENditulis TEN
b. Kesalahan Sintaks
Misalnya pada operasi aritmatika kekurangan jumlahparanthesis(kurung).
contoh :A:=X+(B*(C+D)
c. Kesalahan Semantik
i. Tipe data yang salah, misal tipe data integerdigunakan untuk variabelstring.
Contoh : Var Siswa : Integer
Siswa := 'Aka' {tipe string}
ii. Variabel belum didefinisikan tetapi digunakan dalam operasi.
Contoh : B := B + 1 {B belum didefinisikan}
2. PENANGANAN KESALAHAN
Prosedur penanganan kesalahan terdiri dari :
1. Mendeteksi kesalahan
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
51/63
51
2. Melaporkan kesalahan
3. Tindak lanjut perbaikan / pemulihan
Pelaporan kesalahan yang dilakukan oleh sebuah kompilator yang menemukan
kesalahan meliputi :
1. Kode kesalahan
2. Pesan kesalahan dalam bahasa natural
3. Nama dan atribut identifier
4. Tipetipe yang terkait bila type checking
Contoh :Error Message : Error162 jumlah: unknown identifier
1. Kode kesalahan = 162
2. Pesan kesalahan = unknown identifier
3. Nama identifier =jumlah.
3. REAKSI KOMPILATOR PADA KESALAHAN
Pada saat kompilator menemukan kesalahan terdapat beberapa tingkatan reaksi
diantaranya adalah :
1. Reaksi yang tidak dapat diterima (tidak melaporkan error)
1) Kompilator crash: berhenti atau hang
2) Looping : kompilator masih berjalan tapi tidak pernah berakhir karena looping
tak berhingga (indefinite/onbounded loop)
3) Menghasilkan program objek yang salah : kompilator melanjutkan proses
sampai selesai tapi program objek yang dihasilkan salah. Ini berbahaya bila
tidak diketahui pemrogram, karena baru akan muncul saat program dieksekusi.
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
52/63
52
2. Reaksi yang benar tapi kurang dapat diterima dan kurang bermanfaat. Kompilator
menemukan kesalahan pertama, melaporkannya, lalu berhenti (halt). Ini bisa muncul
bila pembuat kompilator menganggap jarang terjadi kemunculan error dalam
program sehingga kemampuan kompilator untuk mendeteksi dan melaporkan
kesalahan hanya satu untuk setiap kali kompilasi.
3. Reaksi-reaksi yang dapat diterima:
a. Reaksi yang sudah dapat dilakukan, yaitu kompilator melaporkan kesalahan /
error, dan selanjutnya melakukan:
i. Recovery / pemulihan, lalu melanjutkan menemukan kesalahan / error
yang lain bila masih ada.
ii. Repair / Perbaikan kesalahan, lalu melanjutkan proses translasi dan
menghasilkan program objek yang valid.
b. Reaksi yang belum dapat dilakukan, yaitu kompilator mengkoreksi kesalahan,
lalu menghasilkan program objek sesuai dengan yang diinginkan pemrogram.
Disini komputernya sudah memiliki kecerdasan untuk mengetahui maksud
pemrogram.
4. ERROR RECOVERY
Tujuannya mengembalikan kondisi parser ke kondisi stabil (supaya bisa
melanjutkan prosesparsingke posisi selanjutnya). Strategi yang dilakukan error recovery
sebagai berikut:
1. Mekanisme Ad Hoc
Recovery yang dilakukan tergantung dari pembuat kompilator
sendiri/Spesifik, dan tidak terikat pada suatu aturan tertentu. Cara ini biasa disebut
jugaspecial purpose error recovery.
2. Syntax Directed Recovery
Melakukan recoveryberdasarkansyntax
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
53/63
53
Contoh :
begin
A:=A+1
B:=B+1;
C:=C+1
end;
3. Secondary Error Recovery
Berguna untuk melokalisir kesalahan / error, caranya :
a. Panic mode
Maju terus dan mengabaikan teks sampai bertemu delimeter (misal ;)
contoh :
IF A := 1
Kondisi := true;
Teks diatas terjadi kesalahan karena tidak ada instruksi THEN, kompilator akan
maju terus sampai bertemu ;
b. Unit deletion
Menghapus keseluruhan suatu unit sintaktik (misal:
,, dan sebagainya), efeknya sama
dengan panic mode tetapi unit deletion memelihara kebenaran sintaksis dari
source program dan mempermudah untuk melakukan error repairing lebih
lanjut.
4. Context Sensitive Recovery
Berkaitan dengan semantik,misal bila terdapat variabel yang belum
dideklarasikan(undifined variabel) maka diasumsikan tipenya berdasarkan
kemunculannya.
Contoh : B:= 'nama'
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
54/63
54
Empat strategi pemulihan kesalahan yang sering digunakan adalah :
1. Mode panik (panic mode)
Strategi ini adalah metoda yang paling sederhana. Jika sebuah syntax error
ditemukan, yaitu jika M(A, a) = error untuk suatu token a, maka parser akan
melewatkan (skip) token a dan token-token berikutnya sampai ditemukan sebuah
token penyelaras (syncro- nizing token). Pengertian melewatkan sebuah token adalah
parser membaca token tersebut tetapi tanpa menganalisanya yaitu tanpa
membandingkan dengan simbol top of stack. Token-token penyelaras adalah token-
token yang mempunyai peran yang jelas dalam source program. tugas perancang
kompilator adalah menentukan himpunan token penyelaras ini.
2. Tingkat kombinasi kata-kata (phrase level)
Jika sebuah syntax error ditemukan maka parser akan melakukan
pembetulan lokal kepada prefix dari sisa input dengan suatu string sehingga proses
parsing bisa dilanjutkan. Contoh pembetulan yang lazim dilakukan adalah mengganti
koma dengan titik koma, menghapus titik koma yang berlebihan (seperti titik koma
sebelum token else di dalam Pascal), atau mengisi titik koma yang hilang.
3. Produksi-produksi kesalahan (error production)
Yang dimaksud dengan produksi-produksi kesalahan adalah sekumpulan
produksi yang akan menghasilkan konstruksi yang salah (wrong parse tree, yaitu
parse tree yang mengimplementasikan sebuah statement yang salah).
4. Pembetulan global (global correction)
Misalkan x adalah string input yang salah sedangkan y adalah string input
yang benar. Yang dimaksud dengan pembetulan global adalah sejumlah aksi
penyisipan, penghapusan, atau perubahan terhadap suatu token di dalam string x
sedemikian rupa sehingga x berubah menjadi y.
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
55/63
55
5. ERROR REPAIR
Bertujuan untuk memodifikasi source program dari kesalahan dan membuatnya
valid sehingga memungkinkan kompilator untuk melakukan translasi program yang mana
akan dialirkan ketahapan selanjutnya pada proses kompilasi. Mekanisme error repair
meliputi :
1. Mekanisme Ad Hoc
Tergantung dari pembuat kompilator sendiri / spesifik.
2. Syntax Directed Repair
Menyisipkan simbol terminal yang dianggap hilang atau membuang terminal
penyebab kesalahan..
3. Context Sensitive Repair
Perbaikan dilakukan pada kesalahan :
a. Tipe identifier. Diatasi dengan membangkitkan identifier dummy
b. Tipe konstanta. Diatasi dengan membangkitkan konstanta baru dengan tipe
yang tepat.
4. Spelling repair
Memperbaiki kesalahan pengetikan pada identifier.
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
56/63
56
BAB IX
TEKNIK OPTIMASI
A. TEKNIK OPTIMASI
Bertujuan menghasilkan kode program dengan ukuran yang lebih kecil, sehingga
lebih cepat eksekusinya. Berdasarkan ketergantungan pada mesin :
a. Machine Dependent Optimizer
Kode dioptimasi sehingga lebih efisien pada mesin tertentu.
b. Machine Independent Optimizer
Strategi optimasi yang bisa diaplikasikan tanpa tergantung pada mesin tujuan tempat
kode yang dihasilkan akan dieksekusi nantinya.
1. Optimasi Lokal
Optimasi yang dilakukan hanya pada suatu blok dari source code, dengan
cara :
a. Folding
Nilai konstanta atau ekspresi yang bisa dievaluasi pada saat compile time
diganti dengan nilai komputasinya.
Contoh instruksi : A:=2+3+B, diganti menjadi A:=5+B
b. Redundant Subexpression Elimination
Menggunakan hasil komputasi terdahulu daripada melakukan komputasi
ulang.
Contoh urutan instruksi :
A:=B+C
X:=Y+B+C
c. Optimasi dalam sebuah iterasi
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
57/63
57
Loop Unrolling : menggantikan suatu loop dengan menulis statement dalam
loop beberapa kali. Hal ini didasari pemikiran, sebuah iterasi pada
implementasi level rendah akan memerlukan operasi sebagai berikut.
Inisialisasi / pemberian nilai awal pada variabel loop. Dilakukan sekali
pada saat permulaan eksekusi loop.
Pengujian, apakah variabel loop telah mencapai kondisi terminasi.
Adjustment yaitu penambahan atau pengurangan nilai pada variabel loop
dengan jumlah tertentu.
Operasi yang terjadi pada tubuh perulangan (loop body).
Contoh instruksi :
FOR I:=1 to 2 DO
A[I]:=0; dioptimasi menjadi
A[1] := 0;
A[2] := 0;
d. Strength Reduction
Mengganti suatu operasi dengan jenis operasi lain yang lebih cepat
dieksekusi,Contoh :
Pada beberapa komputer operasi perkalian memerlukan waktu lebih
banyak untuk dieksekusi dari pada operasi penjumlahan, maka penghematan
waktu bisa dilakukan dengan mengganti operasi perkalian tertentu dengan
penjumlahan. Contoh lain :
A := A + 1 Dapat digantikan dengan INC(A)
B.
Optimasi Global
Dilakukan dengan analisis flow, yaitu suatu graph berarah yang menunjukkan jalur yang
mungkin selama eksekusi program. Ada 2 kegunaan optimasi global, yaitu bagi para programmer
dan untuk compiler itu sendiri.
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
58/63
58
Bagi Programmer
Unreachable / dead code : Kode yang tidak pernah dieksekusi
Unused parameter : parameter yang tidak pernah digunakan dalam prosedur
Unused variable : variabel yang tidak pernah digunakan dalam program.
Variable : variabel yang dipakai tanpa nilai awal
Bagi Compiler
Meningkatkan efisiensi eksekusi program
Menghilangkan useless code / kode yang tidak terpakai
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
59/63
59
BAB X
TABEL INFORMASI
A. KEGUNAAN TABEL INFORMASI
Fungsi Tabel Informasi atau Tabel Simbol :
1. Membantu pemeriksaan kebenaran semantik dari program sumber.
2. Membantu dan mempermudah pembuatan intermediate codedan proses pembangkitan
kode.
Untuk mencapai fungsi tersebut dilakukan dengan menambah dan mengambil
atribut variabel yang dipergunakan pada program dari tabel. Atribut, misalnya nama, tipe,
ukuran variabel.
Tabel Simbol berisi daftar dan informasi identifier pokok yang terdapat dalam
program sumber, disebut Tabel Pokok / utama.Tabel Pokok belum mengcover semua
informasi, untuk itu disediakan tabel lagi sebagai pelengkap Tabel Pokok.
Untuk mengacu pada tabel simbol yang bersesuaian dengan suatu indentifier
tertentu, maka pada Tabel Pokok harus disediakan field yang bisa menjembatani identifier
dari Tabel Pokok ke tabel-tabel lain yang bersesuaian. Untuk itu, pemilihan elemen tabel
pada Tabel Pokok maupun tabel lainnya, merupakan sesuatu yang sangat penting.
Elemen pada Tabel Simbol bermacam-macam, tergantung pada jenis bahasanya,
misalnya :
1.No urut identifier: Menentukan nomor urut identifier dalam tabel simbol.
2.Nama identifier : Berisi nama-nama identifier (nama variabel, nama tipe, nama
konstanta, nama procedure, nama fungsi, dll) yang terdapat pada program sumber.
Nama-nama ini akan dijadikan referensi pada waktu analisa semantik, pembuatan
intermediate code, serta pembangkitan kode.
3. Tipe identifier : Berisi keterangan/informasi tipe dari record dan string, maupun
procedure dan function.
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
60/63
60
4. Object time address : address yang mengacu ke alamat tertentu.
5. Dimensi dari identifieryang bersangkutan.
6.Nomor baris variabel dideklarasikan.
7.Nomor baris variabel direferensikan.
8. Field link.
B. IMPLEMENTASI TABEL INFORMASI
Beberapa jenis :
1. Tabel Identifier : Berfungsi menampung semua identifier yang terdapat dalam
program.
2. TabelArray: Berfungsi menampung informasi tambahan untuk sebuah array.
3. Tabel Blok : Mencatat variabel-variabel yang ada pada blok yang sama.
4. Tabel Real : menyimpan elemen tabel bernilai real.
5. Tabel String : Menyimpan informasi string.
6. TabelDisplay: Mencatat blok yang aktif.
C. INTERAKSI ANTAR TABEL
Pertama kali tabel display akan menunjuk blok mana yang sedang aktif. Dari blok
yang aktif ini, akan diketahui identifier-identifier yang termasuk dalam blok tersebut.
Untuk pertama kalinya, yang akan diacu adalah identifier yang paling akhir, kemudian
identifier sebelumnya, dan seterusnya. Informasi suatu identifier ini mungkin belum
lengkap. Untuk itu dari tabel identifier ini mungkin akan dicari kelengkapan informasi dari
suatu identifier ke tabel yang sesuai (tabel real, tabel string, atau tabel array).
D. CONTOH IMPLEMETASI TABEL SIMBOL
1. TABEL IDENTIFIER
Memiliki field :
a.
No urut identifierdalam tabelb. Nama identifier
c. Jenis/obyektif dari identifier : Prosedur, fungsi, tipe, variabel, konstanta
d. Tipe dari identifieryang bersangkutan : integer, char, boolean, array, record, file,
no-type
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
61/63
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
62/63
-
8/10/2019 tugas rangkuman Teknik kompilasi.docx
63/63
Contoh implementasi Tabel Display :
TabDisplay: array [1..tabmax]of integer