Anda di halaman 1dari 54

Teknik Kompilasi

oleh:
Andri Sukmaindrayana, ST., M.Kom.

STMIK DCI
Referensi:
U t d i ra r t a t m o , F i ra r, Te k n i k Ko m p i l a s i , J & J L e a r n i n g , Yo g ya k a r t a , 2 0 0 1 .

BAB 1 Pendahuluan
1. Bahasa Pemrograman
Bahasa Pemrograman berdasarkan tingkat ketergantungannya dengan
mesin meliputi :
1. Bahasa Mesin
Merupakan bentuk terendah dari bahasa komputer. Setiap instruksi dalam
program direpresentasikan dengan kode numerik, yang secara fisik berupa
deretan 0 dan 1.

2. Bahasa assembly
Merupakan bentuk simbolik dari bahasa mesin.
3. Bahasa Tingkat Tinggi (user oriented)
Merupakan bahasa pemrograman yang lebih dekat dengan bahasa manusia,
memberikan fasilitas yang lebih banyak, terstruktur, kalang (nested), blok dan
prosedur.
Contohnya : Pascal, BASIC.

4. Bahasa Problem Oriented


Digunakan dalam penyelesaian untuk suatu masalah atau aplikasi yang
spesifik. Contohnya : SQL (Structured Query Language) untuk aplikasi
database.
2. Translator
Sebuah translator mendapat Input berupa program sumber dan
mengkonversikannya ke dalam program objek.

Program Sumber di tulis dengan menggunakan bahasa Sumber


Program Objek ditulis dengan menggunakan bahasa Objek
Jenis Translator (1)
a. Assembler
- Source Code adalah bahasa Assembly.
- Object 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 ra r t a t m o , F i ra r, Te k n i k Ko m p i l a s i , J & J L e a r n i n g , Yo g ya 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 disebut dengan token LABEL
: disebut dengan token OPERATOR
IF disebut dengan token KEYWORD
A disebut dengan token VARIABLE
> disebut dengan token OPERATOR
B disebut dengan token VARIABLE
THEN disebut dengan token KEYWORD
X disebut dengan token VARIABLE
= disebut dengan token OPERATOR
Y disebut dengan token VARIABLE
; disebut dengan token OPERATOR
Data Output : Token
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 : (A+ B) *( C+D )

Data Output : 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 ra r t a t m o , F i ra r, Te k n i k Ko m p i l a s i , J & J L e a r n i n g , Yo g ya 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. panjang maksimum token identifier adalah 8 karakter,


b. panjang maksimum ekspresi tunggal adalah 80 karakter,
c. nilai bilangan bulat adalah -32768 s/d 32767,
d. operasi aritmatika harus melibatkan operan-operan yang bertipe
sama
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 : AB + CD + *
b. Prefix : * + 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 (syntax-
directed 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 A
Keterangan :
ADD B
STO T1
LDA C LDA = Load (Memanggil)
ADD D ADD = Pertambahan
STO T2 STO = Menyimpan
LDA T1 MUL = Mengalikan
MUL T2
STO T3

Data Output : 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 :
Catatan :
LDA A
-Statement : STO T2
ADD B
STO T1 LDA T1
LDA C -Dihilangkan, langsung dikalikan dan disimpan
ADD D MUL T1
MUL T1
STO T2 STO T2
Teknik Kompilasi
oleh:
Andri Sukmaindrayana, ST., M.Kom.

STMIK DCI
Referensi:
U t d i ra r t a t m o , F i ra r, Te k n i k Ko m p i l a s i , J & J L e a r n i n g , Yo g ya 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 Shr
2 Array 27 File
3 Asm 28 For
4 Begin 29 Function
5 Case 30 Goto
6 Const 31 If
7 Constructor 32 Implementation
8 Destructor 33 In
9 Div 34 Insherited
10 Do 35 Inline
11 Downto 36 Interface
12 Else 37 Label
13 Export 38 Library
14 Nil 39 Mod
15 Not 40 String
16 Object 41 Then
17 Of 42 To
18 Or 43 Type
19 Packed 44 Unit
20 Procedure 45 Until
21 Program 46 Uses
22 Record 47 Var
23 Repeat 48 While
24 Set 49 With
25 shl 50 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; Besaran Leksik/Tokennya :


Var
X : Integer;
Begin Program, Coba, Var, X, :, Integer,
X:=X+3; Begin, X, : = , +, 3 ; End, .
End.
Teknik Kompilasi
oleh:
Andri Sukmaindrayana, ST., M.Kom.

STMIK DCI
Referensi:
U t d i ra r t a t m o , F i ra r, Te k n i k Ko m p i l a s i , J & J L e a r n i n g , Yo g ya 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 digunakan pada saat


pembuatan Assembler.
b. Assembly
Hasil dari program mempunyai Ukuran yang relatif kecil;

Sulit dimengerti karena statement/perintahnya singkat-


singkat, 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 Compare A to B Compare 3477 2883


GOTO DONE If equal go to C If = go to 23883
ELSE Go to D Go to 23343
GOTO AGAIN
ENDIF

Actual machine code

10010101001010001010100
10101010010101001001010
10100101010001010010010
Teknik Kompilasi
oleh:
Andri Sukmaindrayana, ST., M.Kom.

STMIK DCI
Referensi:
U t d i ra r t a t m o , F i ra r, Te k n i k Ko m p i l a s i , J & J L e a r n i n g , Yo g ya 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 fungsi-
fungsi
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 ra r t a t m o , F i ra r, Te k n i k Ko m p i l a s i , J & J L e a r n i n g , Yo g ya 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 Mesin Automata Aturan Produksi
Tipe 3 Finite state automata (FSA) adalah simbol variabel
Atau meliputi; deterministic maksimal memiliki sebuah
Regular Finite Automata (DFA) & simbol variabel yang bila ada
Non Deterministic Finite terletak diposisi paling kanan
Automata (NFA)
Tipe 2 Push Down Automata adalah simbol variabel
Atau
Contex Free
Tipe 1 Atau Linier Bounded Automata || <= ||
Contex Sensitive

Tipe 0 Mesin Turing Tidak ada Batasan


Atau
Unrestricted/
Phase Structure/
natural language
Keterangan
menyatakan simbol simbol yang berada di ruas kiri aturan
produksi
menyatakan simbol simbol yang berada di ruas kanan aturan
produksi
Simbol-simbol terdiri dari simbol terminal dan non
terminal/variabel (masih bisa diturunkan lagi)
Simbol terminal biasanya dinyatakan dengan huruf kecil,
sementara non terminal dengan huruf besar

Anda mungkin juga menyukai