Teknik Kompilasi oleh:
Andri Sukmaindrayana, Su kmaindrayana, ST., ST., M.Kom.
STMIK DCI Referensi: U t d i r a r t a t m o , F i r a r , “ T e k n i k K o m p i l a s i ”, ”, J & J L e a r n i n g , Yo g y a k a r t a , 2 0 0 1 .
BAB 1 – Pendahuluan
1. Bahasa Pemrograman Bahasa Pemrograman berdasarkan tingkat ketergantungannya dengan mesin meliputi : 1. Ba Bah has asa a Me Mesi sin n Merupakan bentuk terendah dari bahasa komputer. Setiap instruksi dalam program direpresentasikan dengan kode numerik, yang secara fisik berupa deretan 0 dan 1. 2. Ba Baha hasa sa assembly Merupakan bentuk simbolik dari bahasa mesin.
1. Bahasa Pemrograman Bahasa Pemrograman berdasarkan tingkat ketergantungannya dengan mesin meliputi : 1. Ba Bah has asa a Me Mesi sin n Merupakan bentuk terendah dari bahasa komputer. Setiap instruksi dalam program direpresentasikan dengan kode numerik, yang secara fisik berupa deretan 0 dan 1. 2. Ba Baha hasa sa assembly Merupakan bentuk simbolik dari bahasa mesin.
3. Ba Baha hasa sa Tin ingk gkat at Tin ingg ggii (user oriented) Merupakan bahasa pemrograman yang lebih dekat dengan bahasa manusia, memberikan fasilitas yang lebih banyak, terstruktur, terstruktur, kalang (nested) kalang (nested),, blok dan prosedur.. prosedur Contohnya : Pascal, BASIC. 4. Ba Baha hasa sa Problem Oriented Diguna Dig unakan kan dal dalam am pen penyele yelesai saian an unt untuk uk sua suatu tu mas masala alah h ata atau u apl aplika ikasi si yan yang g spesif spe sifik. ik. Con Contoh tohnya nya : SQL (Structur (Structured ed Query Lang Language uage)) untuk untuk aplik aplikasi asi database.
2. Tra ransl nslat ator or Sebuah Sebu ah tr tran ansl slat ator or me mend ndap apat at In Inpu putt be beru rupa pa pr prog ogra ram m su sumb mber er da dan n mengkonversikannya ke dalam program objek. ◦
◦
Program Sumber di tulis dengan menggunakan bahasa Sumber Program Objek ditulis dengan menggunakan bahasa Objek
Jenis Jen is Tra ransl nslat ator or (1) a. Assembler - Source Code adalah Code adalah bahasa Assembly bahasa Assembly.. - Object Code adalah Code adalah bahasa mesin Contoh : Turbo Assembler
Jenis Translator (2) b. Kompilator ( Compiler ) - Source Code adalah bahasa tingkat tinggi ( Misal : Bahasa Pascal ) - Objeck Code adalah bahasa mesin atau bahasa Assembly Contoh : Turbo Pascal
Jenis Translator (3) c. Interpreter - Source Code dan data diproses pada saat yang sama - Objeck Code tidak di hasilkan, hanya dalam bentuk Internal saja Contoh : BASICA
3. Manfaat Translator (1)
Dengan bahasa mesin adalah bahasa bentuk bahasa terendah komputer, berhubungan langsung dengan bagian bagian komputer seperti bits, register & sangat primitive
Jawaban atas pertanyaan ini akan membingungkan bagi programmer yang membuat program dengan bahasa mesin.
3. Manfaat Translator (2)
Bahasa mesin adalah tidak lebih dari urutan 0 dan 1
Instruksi dalam bahasa mesin bisa saja dibentuk menjadi micro-code, semacam prosedur dalam bahasa mesin
Bagaimana dengan orang tidak mengerti bahasa mesin
Teknik Kompilasi oleh:
Andri Sukmaindrayana, ST., M.Kom.
STMIK DCI Referensi: U t d i r a r t a t m o , F i r a r , “ T e k n i k K o m p i l a s i ”, J & J L e a r n i n g , Yo g y a k a r t a , 2 0 0 1 .
BAB 2 – Kompilator (1)
1. Model Kompilator
Proses kompilasi dikelompokkan ke dalam dua kelompok besar : 1. Analisa, program sumber dipecah-pecah dan dibentuk menjadi bentuk antara (inter-mediate representation) 2. Sintesa, membangun program sasaran yang diinginkan dari bentuk antara
a. Penganalisa Leksikal (1) - Scanner Membaca program sumber, karakter demi karakter. Sederetan (satu atau lebih) karakter dikelompokkan menjadi satu kesatuan mengacu kepada pola kesatuan kelompok karakter (token) yang ditentukan dalam bahasa sumber . Kelompok karakter yang membentuk sebuah token dinamakan lexeme untuk token tersebut. Setiap token yang dihasilkan disimpan di dalam tabel simbol . Sederetan karakter yang tidak mengikuti pola token akan dilaporkan sebagai token tak dikenal (unidentified token)
a. Penganalisa Leksikal (2) - Data Input : Program Sumber - Fungsi : Mimisahkan program sumber yang masuk ke dalam bagian bagian yang disebut besaran leksik/ token. Seperti : Konstanta, Nama Variable, KeyWord, Operator, Label dll. Contoh : PERIKSA : IF A > B THEN X = Y ;
a. Penganalisa Leksikal (3) Token nya : PERIKSA : IF A > B THEN X = Y ; Data Output
disebut dengan token disebut dengan token disebut dengan token disebut dengan token disebut dengan token disebut dengan token disebut dengan token disebut dengan token disebut dengan token disebut dengan token disebut dengan token Tok
LABEL OPERATOR KEYWORD VARIABLE OPERATOR VARIABLE KEYWORD VARIABLE OPERATOR VARIABLE OPERATOR
b. Penganalisa Sintaks (1) - Parser Memeriksa kesesuaian pola deretan token dengan aturan sintaks yang ditentukan dalam bahasa sumber . Sederetan token yang tidak mengikuti aturan sintaks akan dilaporkan sebagai kesalahan sintaks ( sintax error ). Secara logika deretan token yang bersesuaian dengan sintaks tertentu akan dinyatakan sebagai pohon parsing ( parse tree).
b. Penganalisa Sintaks (2) - Data Input : Token - Fungsi : Menentukan struktur dari program berdasarkan token – token yang ada. Mengolompokan token menjadi elemen – elemen yang lebih besar. Seperti : Ekpresi, statement, procedure dll. Contoh : Suatu Ekpresi : Data Output
(A+ B ) * ( C + D)
: Pohon Sintaks, dimana daunnya adalah Token dan setiap simpul daun adalah tipe kelas sintaks.
Teknik Kompilasi oleh:
Andri Sukmaindrayana, ST., M.Kom.
STMIK DCI Referensi: U t d i r a r t a t m o , F i r a r , “ T e k n i k K o m p i l a s i ”, J & J L e a r n i n g , Yo g y a k a r t a , 2 0 0 1 .
BAB 3 – Kompilator (2)
c. Penganalisa Semantik (1) Memeriksa token dan ekspresi dari batasan-batasan yang ditetapkan. Batasan-batasan tersebut misalnya : a. b. c. d.
panjang maksimum token identifier adalah 8 karakter, panjang maksimum ekspresi tunggal adalah 80 karakter, nilai bilangan bulat adalah -32768 s/d 32767, operasi aritmatika harus melibatkan operan-operan yang bertipe sama
c. Penganalisa Semantik (2) Data Input : Pohon Sintaks Fungsi : Menentukan arti dari program sumber Contoh : Pohon Sintaks dari : ( A + B ) * ( C + D ) Maka akan dilakukan : Apakah 2 Operand telah di deklarasikan Apakah 2 Operand memiliki tipe sama Apakah 2 Operand sudah mempunyai harga Dst.
c. Penganalisa Semantik (3) Data Ouput : Bentuk Antara Contoh : Bentuk Antara dari hasil : ( A + B ) * ( C + D ) Dalam QUADRAPLE, sbb : ( + , A, B, T1 ) ( +, C, D, T2 ) ( *, T1, T2, T3 ) Dalam Notasi Polish : Bentuk Infix : ( A + B ) * ( C + D ) di ubah menjadi Bentuk : a. Sufix / Postfix b. Prefix
: AB + CD + * : * + AB + CD
d. Generator Kode (1) – Intermediate Code Membangkitkan kode antara (intermediate code) berdasar-kan pohon parsing. Pohon parse selanjutnya diterjemahkan oleh suatu penerjemah yang dinamakan penerjemah berdasarkan sintak ( syntaxdirected translator ). Hasil penerjemahan ini biasanya merupakan perintah tiga alamat (three-address code) yang merupakan representasi program untuk suatu mesin abstrak . Perintah tiga alamat bisa berbentuk quadruples (op, arg1, arg2, result ), tripels (op, arg1, arg2). Ekspresi dengan satu argumen dinyatakan dengan menetapkan arg2 dengan - (strip, dash)
d. Generator Kode (2) Data Input : Bentuk Antara Fungsi : Mengubah Bentuk Antara ke dalam bahasa Assembly atau bahasa mesin Contoh : Bentuk Antara dari : ( A + B ) * ( C + D ) Diubah ke dalam bahasa Assembly, menjadi :
d. Generator Kode (3) LDA ADD STO LDA ADD STO LDA MUL STO
A B T1 C D T2 T1 T2 T3
Data Output
Keterangan :
LDA
= Load (Memanggil)
ADD
= Pertambahan
STO
= Menyimpan
MUL
= Mengalikan
: Bahasa Assembly atau Bahasa Mesin
e. Optimasi Kode (1) Melakukan optimasi (penghematan space dan waktu komputasi), jika mungkin, terhadap kode antara.
e. Optimasi Kode (2) Data Input : Program dalam Bahasa Assembly atau Bahasa Mesin Fungsi : Menghasilkan Program Objeck yang Ekivalen tetapi lebih Efisien Contoh
: LDA ADD STO LDA ADD MUL STO
A B T1 C D T1 T2
Catatan :
-Statement :
STO
T2
LDA
T1
-Dihilangkan, langsung dikalikan dan disimpan MUL T1 STO
T2
Teknik Kompilasi oleh:
Andri Sukmaindrayana, ST., M.Kom.
STMIK DCI Referensi: U t d i r a r t a t m o , F i r a r , “ T e k n i k K o m p i l a s i ”, J & J L e a r n i n g , Yo g y a k a r t a , 2 0 0 1 .
BAB 4 – Scanner
Scanner
Scanner dengan melihat text input karakter demi karakter memisah-misahkan program sumber ke dalam bagian-bagian yang disebut besaran leksik/token, yang merepresentasikan nama Variabel, Operator, Label dsb, yang membentuk sebuah program.
Interaksi dengan Parser bisa dilakukan dengan 2 cara : 1. Scanner akan memproses program sumber sebagai suatu tahapan yang khusus sebelum dilakukan proses parsing. Jadi token disimpan dalam sebuah file atau tabel besar. 2. Interaksi antara parser dan scanner setiap saat. Scanner akan dipanggil oleh parser apabila token selanjutnya dibutuhkan oleh parser.
Besaran pembangun besaran leksik/token : (1) 1. Identifier Bisa berupa Keyword atau Nama; Nama biasanya di deklarasikan sendiri oleh pemakai, seperti : Nama (Program, Procedure, Var, Type, Constanta).
Contoh Keyword: No.
Nama Keyword
No.
Nama Keyword
1
And
26
2
Array
27
3
Asm
28
4
Begin
29
Function
5 6
Case Const
30 31
Goto If
7
Constructor
32
Implementation
8
Destructor
33
9
Div
34
Insherited
10
Do
35
Inline
11
Downto
36
Interface
12
Else
37
Label
13 14
Export Nil
38 39
Library Mod
15
Not
40
String
16
Object
41
Then
17
Of
42
18
Or
43
Type
19 20
Packed Procedure
44 45
Unit Until
21
Program
46
Uses
22
Record
47
23
Repeat
48
While
24
Set
49
25
shl
50
Shr
File For
In
To
Var With Xor
Besaran pembangun besaran leksik/token : (2) 2. Konstanta Bisa berupa konstata Integer, Real, Boolean, Charakter, String dsb. Contoh :
N : = R + 5 + 10 Kata : = Kata1 + ‘ Makan ‘
A : = 0.333 Selesai : = True
Konstanta nya adalah : 5, 10, ‘ Makan ‘, 0.333, True.
Besaran pembangun besaran leksik/token : (3) 3. Operator dan Delimiter : Operator Aritmatika : Operator Relasional
+ , - , * , / < , = , >
Delimiter berguna sebagai pemisah/pembatas, misal : a. ( ) , . ; : yaitu : kurung buka/tutup, koma, titik, titik koma, titik dua b. White – space adalah pemisah yang diabaikan di program, misal : spasi, enter (Carrige Return), ganti baris (Line Feed), akhir file (End Of File)
Contoh : Source Program Program Latihan; Var X : Integer; Begin X:=X+3; End.
Besaran Leksik/Tokennya : Program, Coba, Var, X, :, Integer, Begin, X, : = , +, 3 ; End, .
Teknik Kompilasi oleh:
Andri Sukmaindrayana, ST., M.Kom.
STMIK DCI Referensi: U t d i r a r t a t m o , F i r a r , “ T e k n i k K o m p i l a s i ”, J & J L e a r n i n g , Yo g y a k a r t a , 2 0 0 1 .
BAB 5 – Pembuatan Compiler
a. Bahasa Mesin
Sangat sukar dan sangat sedikit kemungkinannya untuk membuat compiler dengan bahasa ini, karena manusia susah mempelajari bahasa mesin;
Sangat tergantung pada mesin;
Bahasa Mesin kemungkinan pembuatan Assembler.
digunakan
pada
saat
b. Assembly
Hasil dari program mempunyai Ukuran yang relatif kecil;
Sulit dimengerti karena statement/perintahnya singkatsingkat, butuh usaha yang besar untuk membuat;
Fasilitas yang dimiliki terbatas.
c. Bahasa Tingkat Tinggi (High Level Language)
Lebih mudah dipelajari;
Fasilitas yang dimiliki lebih baik (banyak);
Memiliki ukuran yang relatif besar, misal membuat compiler pascal dengan menggunakan bahasa C;
Untuk mesin yang berbeda perlu dikembangkan tahapan-tahapan tambahan;
Misal membuat compiler C pada Dos bedasarkan compiler C pada unix.
d. BootStrap Untuk membangun sesuatu yang besar, dibangun/dibuat dulu bagian intinya (niklaus Wirth - saat membuat pascal compiler). P2 P1
PO dibuat dengan assembly,
Po
P1 dibuat dari P0, dan
P2 dibuat dari P1, jadi compiler untuk bahasa P dapat dibuat tidak harus dengan menggunakan assembly secara keseluruhan
Contoh dari source program ke dalam kode mesin IF COUNT =10 GOTO DONE ELSE GOTO AGAIN ENDIF
Compare A to B If equal go to C Go to D
Actual machine code 10010101001010001010100 10101010010101001001010 10100101010001010010010
Compare 3477 2883 If = go to 23883 Go to 23343
Teknik Kompilasi oleh:
Andri Sukmaindrayana, ST., M.Kom.
STMIK DCI Referensi: U t d i r a r t a t m o , F i r a r , “ T e k n i k K o m p i l a s i ”, J & J L e a r n i n g , Yo g y a k a r t a , 2 0 0 1 .
BAB 6 – Bahasa Sumber
Definisi (1) Bahasa adalah kumpulan kalimat. Kalimat adalah rangkaian kata. Kata adalah unit terkecil komponen bahasa yang tidak bisa dipisah pisahkan lagi. Kalimat-kalimat : ‘Seekor kucing memakan seekor tikus.’ dan ‘ Budi menendang sebuah bola.’ adalah dua contoh kalimat lengkap Bahasa Indonesia.
Definisi (2) ‘ A cat eats a mouse’ dan ‘ Budi kick a ball.’ adalah dua contoh
kalimat lengkap Bahasa Inggeris. ‘if a2 < 9.0 then b2 := a2+a3; ’ dan ‘ for i := start to finish do A[i] := B[i]*sin(i*pi/16.0). ’
adalah dua contoh kalimat lengkap dalam Bahasa Pemrograman Pascal. Dalam bahasa pemrograman kalimat lebih dikenal sebagai ekspresi sedangkan kata sebagai token
Bahasa Tingkat Tinggi ( Pemrograman ) (1)
Bahasa yang lebih dikenal oleh manusia, maksudnya adalah statement yang digunakan menggunakan bahasa yang dipakai oleh manusia (inggris),
Bahasa pemrograman didefinisikan dengan menentukan bentuk programnya (sintak) dan arti programnya (semantik)
Memberikan fasilitas yang lebih banyak, seperti struktur kontrol program yang terstruktur, blok-blok serta prosedur dan fungsifungsi
Bahasa Tingkat Tinggi ( Pemrograman ) (2)
Progam mudah untuk di koreksi (debug)
Tidak tergantung pada salah satu mesin
Kontrol struktur seperti : kondisi (if .. Then.. Else ), perulangan (For, while ), Struktur blok (begin.. End { .. } )
Tingkatan Bahasa Pemrograman
Tujuan Perancangan Bahasa Pemrograman (1)
Komunikasi dengan manusia Pencegahan dan deteksi kesalahan Usability Efektifitas pemrograman Compilability (mengurangi kompleksitas,mis:penggunaan bracket) Efisiensi dengan meminimalisir ketidakcocokan antara hardware dengan bahasa
Tujuan Perancangan Bahasa Pemrograman (2)
Machine independent Simplicity :penyederhanaan komponen bahasa program Orthogonality : kumpulan primitive yang dikombinasikan dengan berbagai cara dalam membangun kontrol dan struktur data dalam bahasa program
Teknik Kompilasi oleh:
Andri Sukmaindrayana, ST., M.Kom.
STMIK DCI Referensi: U t d i r a r t a t m o , F i r a r , “ T e k n i k K o m p i l a s i ”, J & J L e a r n i n g , Yo g y a k a r t a , 2 0 0 1 .
BAB 7 – Notasi Bahasa
Konsep & Notasi Bahasa (1) •
Teknik Kompilasi merupakan kelanjutan dari konsep-konsep yang telah kita pelajari dalam teori bahasa dan automata
•
Thn 56-59 Noam chomsky melakukan penggolongan tingkatan dalam bahasa, yaitu menjadi 4 class
•
Penggolongan tingkatan itu disebut dengan hirarki Comsky
Konsep & Notasi Bahasa (2) •
1959 Backus memperkenalkan notasi formal baru untuk syntax bahasa yang lebih spesifik
•
Peter Nour (1960) merevisi metode dari syntax. Sekarang dikenal dengan BNF (backus Nour Form)
Konsep & Notasi Bahasa (3) •
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
Konsep & Notasi Bahasa (4) •
Syntax : suatu aturan yang memberitahu apakah sesuatu kalimat (string) adalah valid dalam program atau tidak
•
Semantic : suatu aturan-aturan yang memberikan arti kepada program
Konsep & Notasi Bahasa (5) Penggolongan Chomsky Bahasa
Tipe 3 Atau Regular
Tipe 2 Atau Contex Free Tipe 1 Atau Contex Sensitive Tipe 0 Atau Unrestricted/
Mesin Automata
Aturan Produksi
Finite state automata (FSA) meliputi; deterministic Finite Automata (DFA) & Non Deterministic Finite Automata (NFA) Push Down Automata
adalah simbol variabel maksimal memiliki sebuah simbol variabel yang bila ada terletak diposisi paling kanan adalah simbol variabel
Linier Bounded Automata
| | <= | |
Mesin Turing
Tidak ada Batasan