KOMPILASI
PERTEMUAN 1
PROGRAM STUDI SISTEM KOMPUTER
TL110
FREDY SUSANTO, M.KOM., CCNA., MTCNA
■ Modern Compiler Design, Dick Grune, Henri E. Bal, Et all, John Wiley
& Son, 2000
Bahasan Materi Kuliah
■ Beberapa translator
■ Struktur Compiler
■ Lexical Analysis
■ Analysis Syntax
■ Analysis Semantics
■ Error Handling
■ Optimation
■ Tabel informasi
ARTI KATA TEKNIK KOMPILASI
■ Teknik :
❑ Metode atau Cara
■ Kompilasi :
❑ Proses mengabungkan serta menterjermahkan
sesuatu (source program) menjadi bentuk lain
■ Compile :
❑ To translate a program written in a high-level
programming language into machine language.
Translator : Compiler & Interpreter
Translator :
■ Adalah suatu program dimana mengambil input
sebuah program yang ditulis pada satu bahasa
program (source language) ke bahasa lain (The
object on target language)
Object code
Assemble
*.asm *.exe
r
/*.com
2. Compiler
Source code adalah bahasa tingkat tinggi, object code
adalah bahasa mesin atau bahasa assembly. Source
code dan data diproses berbeda
Data
Compil Executi
Source Hasil
er on
code
Object Code
3. Interpreter
Interpreter tidak menghasilkan bentuk object code, tetapi
hasil translasinya hanya dalam bentuk internal, dimana
program induk harus selalu ada-berbeda dengan compiler
Source code
Translato Hasil
r
Data
S
oTranslator : Compiler & Interpreter
u
C
r
o
c
m
e OBJECT
p
P PROGRA
i M
r
l
o
e
g
r
r
a
m ERROR
MESSAGES
COMPILER vs INTERPRETER
Bahasa mesin
Assembly
■ Hasil dari program mempunyai Ukuran yang
relatif kecil
BootStrap
P2
P1
P
o
10010101001010001010100
10101010010101001001010
10100101010001010010010
BAHASA SUMBER
DEFINISI “bahasa sumber”
■ 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. ‘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 )
■ 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
■ 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
Sumber perancangan bahasa
■Operator binding
■ Alokasi storage
■ Lingkup variabel
Struktur I/O
■ Format free
langsung ditampilkan sehingga mudah
bagi user untuk memeriksa kebenaran
program. Contoh pada VB.
■ Formatted
output ditampilkan secara terformat,
seperti di C : printf(), delphi/VB : format()
ANDAIKAN......
■ TASSKAF. Bahasa TASSKAF ini merupakan subset dari Java. Dapat disusun
suatu program ke byte code yang dapat dijalankan di Java Virtual Machine
(JVM).
Pada site tersebut juga tersedia informasi materi kuliah dengan LEX, YACC
http://rw4.cs.uni-sb.de/~martin/COMP/TK/
■ GENTLE. Gentle ini merupakan perangkat bantu (toolkit) modern untuk menulis
compiler dan mengimplemntasikannya pada bahasa tertentu. Perangkat bantu ini
mendukung semua proses translasi, dari definisi tree sintaks abstrak, pater
matching, smart traversal dan lain sebagainya. Toolkit ini telah digunakan secara
luas di riest dan industri .http://www.first.gmd.de/gentle/
15 TH
?
IDE SISTEM PEMBELAJARAN
CERDAS
What’s
a Surprise?
Top Topic
Skripsi with
Compiler technique
KONSEP
dan NOTASI BAHASA
Konsep dan Notasi bahasa
Kemungkinan2 yang
Terjadi diperlihatkan gambar :
Review Mesin Automata 🡪 Misal : FSA
FSA State Diagram nya adalah :
Contoh lain : FSA
Konsep dan Notasi bahasa
Penggolongan Chomsky
Bahasa Mesin Automata Aturan Produksi
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
Aturan Produksi
■ Tipe O / Unrestricted: Tidak Ada batasan pada aturan produksi
Abc → De
■ Tipe 1 / Context sensitive: Panjang string ruas kiri harus lebih kecil atau sama
dengan ruas kanan
Ab → DeF
CD → eF
■ Tipe 2 / Context free grammar: Ruas kiri haruslah tepat satu simbol variable
B → CDeFg
D → BcDe
■ Tipe 3 / Regular: Ruas kanan hanya memiliki maksimal 1 simbol non terminal
dan diletakkan paling kanan sendiri
A→e
A → efg
A → efgH
C→D
Aturan produksi yang tidak legal !!!
Unrestricted
Context Sensitive
Context free
Regular
Regular
Contoh Tata Bahasa Sederhana
Begin
A := 1;
B := A + 2
END
Diagram State
PL huruf
ID
US +
Huruf, Digit
S
Digit
MI - IN
NU
S Blank T Digit
Notasi BNF (Backus-Nour Form)
■ Aturan Produksi bisa dinyatakan dengan notasi BNF
■ BNF menggunakan abstraksi untuk struktur syntax
::= sama identik dengan simbol →
| sama dengan atau
<> pengapit simbol non terminal
{} Pengulangan dari 0 sampai n kali
Misalkan aturan produksi sbb:
E → T | T+E | T-E
T→a
Notasi BNFnya adalah
E ::= <T> | <T> + <E> | <T> - <E>
T ::= a
Diagram Syntax
Misalnya
E T
E → T | T+E | T-E
+
-
BNF: <Block> ::= BEGIN <statement> { SEMICOL <statement>}
END
Statemen E
BE
t N
GIN
D
;
Kualitas dari Compiler
■ Waktu yang dibutuhkan untuk kompilasi;
tergantung dari
✔ Algoritma compiler
Object code
Keterangan
■ Lexical Analyzer = scanner, Syntax Analyzer, dan Intermediate Code
merupakan fungsi Analisis dalam compiler, yang bertugas
mendekomposisi program sumber menjadi bagian-bagian kecil
■ Mentransformasikan ke token-token
■ Menangani kesalahan
■ Token : separates characters of the source language into group that logically
belong together
■ Misalnya : konstanta, nama variabel ataupun operator dan delimiter (atau sering
identifier → fahrenheit
operator → :=
integer → 32
operator penjumlahan → +
Identifier → celcius
operator perkalian → *
real / float → 1.8
Lexical Analysis - Contoh 2
● Kondisi 3 ● B 1
● THEN 21
● : 26
● C 1
● IF 20 ● D 1
● A 1 ● ; 27
● > 15
■ Misalnya: S → AB
A → aA | a
B → bB | B
A → SbA | ba
Parsing atau Proses Penurunan
Misalnya: S -> aB | bA
A -> a | aS |bAA
B -> b | bS | aBB
■ Algoritma ini membuat pohon parsing secara top-down, yaitu dengan cara
mencoba segala kemungkinan untuk setiap simbol non-terminal
S → aAd | aB
A→b|c
B → ccd | ddc
a A d a A d
b
Terjadi kegagalan (iii), dilakukan back track
(iv) S (v) S (vi) S
a A d a B a B
c c c d
Terjadi kegagalan lagi (iv), dilakukan back-track
Parsing: Brute force
Kelemahan dari metode-metode brute-force
lokasi backtrack
harus diubah dulu sehingga tidak rekursif kiri, Karena rekursif kiri akan
1. E → T | T + E | T - E
T→F|F*T|F/T
F→i
accept (diterima)
Brute force : Contoh
2. E → T | E+T | E-T
T → F | T* F | T / F
F→i
accept (diterima)
■ Meskipun ada rekursif kiri, tetapi tidak diletakkan sebagai aturan yang paling
kiri
3. E → E+T | E-T | T
T → T* F | T / F | F
F→i
Rekursif kiri, program akan mengalami loop
Brute force : Aturan produksi
Aturan Produksi yang rekursif memiliki ruas kanan (hasil produksi)
yang memuat simbol variabel pada ruas kiri
Sebuah produksi dalam bentuk
A → βA merupakan produksi rekursif kanan
β = berupa kumpulan simbol variabel dan
terminal
contoh: S → d S
B → ad B
bentuk produksi yang rekursif kiri
A →Aβ merupakan produksi rekursif Kiri
contoh:
S→Sd
B → B ad
Aturan produksi : Brute force
■ Pisahkan Aturan produksi yang rekursif kiri dan yang tidak; misalnya
Aturan produksi yang rekursif kiri
A → A α1 | A α2 | ... | A αn
1. A → β1 Z | β2 Z | ... | βn Z
2 Z → α1 | α2 | ... | αn
3 Z → α1 Z | α2 Z | ... | αn Z
Aturan produksi : Brute force
■ Pergantian dilakukan untuk setiap aturan produksi dengan simbol
ruas kiri yang sama, bisa muncul variabel Z1, Z2 dst, sesuai
dengan variabel yang menghasilkan rekurisif kiri
dari situ didapat untuk Ruas Kiri untuk S: β1 = aSc, β2 = dd, β3=
ff
Aturan produksi : Brute force
■ Langkah berikutnya adalah penggantian yang rekursif kiri
S → Sab | Sbd, dapat digantikan dengan
1. S → aScZ1 | ddZ1 | ffZ1
2. Z1 → ab | bd
3. Z1 → abZ1 | bdZ1
aturan produksi maka produksi rekursif kiri diletakkan pada bagian belakang
atau terkanan, hal ini untuk menghindari looping pada awal proses parsing
sehingga butuh waktu yang cukup lama serta memerlukan memori yang
■ Metode ini digunakan untuk aturan produksi yang memiliki alternatif yang
sedikit
Parsing: Recursive Descent Parser
Parsing dengan Recursive Descent Parser
■ Dengan cara penurunan secara recursif untuk semua variabel dari awal sampai ketemu
terminal
■ Beda dengan turing yang selalu maju dan mundur dalam melakukan parsing
Aturan Produksi memakai Recursif
Descent :
■ Semua simbol variabel dijadikan prosedur/fungsi
■ Jika ketemu simbol terminal pada aturan produksi ,
maka panggil prosedurnya
■ Penelusuran bersifat top down mengikuti sintaks
sesuai pola pada diagram sintaks
■ Fungsi/prosedur ditulis untuk setiap non terminal dari
suatu produksi. Setiap fungsi/prosedur akan
melemparkan nilai benar atau salah bergantung
pada apakah fungsi tersebut mengenali substring
yang diterima sebagai ekspansi dari non terminal.
Contoh :
Grammar dengan BNF :
<program> ::= t_PROG t_ID t_SEMICOL <block> t_DOT
<block> ::= t_BEGIN <statement> {t_SEMICOL <statement>}
t_END
<statement> ::= t_ID t_ASS <simple exp> |
t_IF <exp> t_THEN <statement>|
t_IF <exp> t_THEN <statement> t_ELSE
<statement>
<exp> ::= <simple_exp> t_EQ <simple exp> |
<simple_exp> t_LT <simple_exp>|
<simple_exp> t_GT <simple_exp>
Dst…….
Penggalan program untuk grammar
tsb
Semantics Analyser
■ Memeriksa tipe
Melakukan pemeriksaan terhadap kesesuaian tipe dalam statement - statement
yang ada, Misalnya bila terdapat suatu operasi, diperiksa tipe operand nya
Semantics Analyser
Contohnya;
■ expresi yang mengikut IF berarti tipenya boolean, akan diperiksa tipe
identifier dan tipe ekspresinya
■ Bila ada operasi antara dua operand maka tipe operand pertama harus
bisa dioperasikan dengan operand yang kedua
Ada dua macam intermediate code yaitu Notasi Postfix dan N-Tuple
Notasi POSTFIX
<Operand> <Operand> < Operator>
Misalnya :
( a +b ) * ( c+d )
maka Notasi postfixnya
ab+ cd+ *
Semua instruksi kontrol program yang ada diubah menjadi notasi postfix, misalnya
IF <expr> THEN <stmt1> ELSE <stmt2>
POSTFIX
Instruksi : a:= 1
WHILE a < 5 DO
a := a + 1
Dalam bentuk Postfix
10 a 18 a
11 1 19 a
12 := 20 1
13 a 21 +
14 5 22 :=
15 < 23 13
16 25 24 BR
17 BZ 25
TRIPLES NOTATION
Notasi pada triple dengan format
<operator> <operand> <operand>
Contoh:
A := D * C + B / E
Jika dibuat intermidiate code triple:
1. * , D, C
2. /, B, E
3. +, (1), (2)
4. :=, A, (3)
Result atau hasil adalah temporary variable yang dapat ditempatkan pada memory
atau register . Problemnya adalah bagaimana mengelola temporary variable
seminimal mungkin
Contoh:
A := D * C + B / E
hasil dari code generator akan diterima oleh code optimation , Misalnya
untuk kode assembly diatas dioptimasikan menjadi:
LDA A
ADD B
STO T1
LDA C
ADD D
MUL T1
STO T2
Perjalanan sebuah intruksi
<assign>
Id1 := <Expr>
LDA A
Source ADD Y
Token-token Code
Program Id2 + Id1 STO X
Analisis Id1:=Id2+Id1 Generator
X =Y+X Analisis
dan Analisis
Leksikal Sintaksis sematiks
Tabel
Simbol
Error Handling
■ Kesalahan Program
■ Penanganan Kesalahan
■ Reaksi Compiler Pada kesalahan
■ Error Recovery
■ Error repair
Kesalahan Program
✔ Kesalahan Sintaks
■ misalnya dalam operasi aritmatika dengan tanda kurung yang
jumlahnya kurang, contoh
■ A:= X + (B * (C+D)
✔ Kesalahan Semantics
Error Handling - Kesalahan Program
✔ Kesalahan Semantics
■ Tipe data yang salah
Contoh : int c;
c = 1.5 * 0.78
● Unit Deletion
■ Menghapus keseluruhan suatu unit sintaksik (misalnya : <block>, <exp>,
<statement> dan sebagainya
■ Mempermudah untuk melakukan error repairing
Error Handling - Error Recovery
✔ Mekanisme Ad Hoc
● Tergantung pada sipembuat compiler
● Contoh lain
Procedure Increment ;
begin
x := X + 1
end;
end;
■ Dependensi Optimasi
■ Optimasi Lokal
■ Optimasi Global
■ Dependensi Optimasi
bertujuan untuk menghasilkan kode program yang berukuran lebih kecil dan lebih cepat
● Machine Dependent Optimizer
● Machine Independent Optimizer (Optimasi lokal dan Optimasi global)
Teknik Optimasi : Optimasi Lokal
Optimasi Lokal : adalah optimasi yang dilakukan hanya pada suatu blok dari
source code, dengan cara:
✔ Folding
menganti konstata atau ekpresi yang bisa dievaluasi pada saat compile time dengan
nilai komputasinya. Misalnya:
A := 2 + 3 + B bisa diganti dengan A:= 5 + B
5 dapat mengantikan ekspresi 2 + 3
✔ Redundant-Subexpression Elimination
hasilnya digunakan lagi dari pada dilakukan computasi ulang, contoh:
A:= B + C
X := Y + B + C
Teknik Optimasi : Optimasi Lokal
FOR I:= 1 to 10 DO X := 5
BEGIN FOR I:= 1 to 10 DO
X := 5 BEGIN
A := A + 1 A := A + 1
END: END:
Teknik Optimasi : Optimasi Lokal
✔ Strength Reduction
✔ Bagi Programmer
❑ Unreachable/dead code: Kode yang tidak pernah dieksekusi
❑ misalnya :
X := 5;
IF X = 0 THEN
A := A + 1
Instruksi
A := A + 1 tidak pernah dikerjakan
Teknik Optimasi : Optimasi
❑ Unused parameter GLobal
: parameter yang tidak pernah
digunakan dalam procedure
■ Misalnya :
Program pendek;
var a, b: integer
begin
a := 5;
end;
✔ Bagi Compiler
❑ Meningkatkan efisiensi eksekusi program
❑ Menghilangkan useless code/kode yang tidak terpakai
var A, B, C, D, E, I, J, X, Y : integer;
begin
B := 5;
A := 10 - B / 4 * 3 + 2;
C := A + B;
Y := 10;
D := A + B – E;
for I := 1 to 85 do
begin
X := X + 1;
B := B – X;
Y := 7;
end
While Y< 5 do
E := E – B;
end
Tabel Informasi
Dua fungsi penting Tabel Informasi
● Tipe identifier
● Object time address
● Dimensi dari identifier yang
bersangkutan
● Nomor baris variabel yang
dideklarasikan
● Nomor baris variabel yang
direferensikan
● Field link
Tabel Informasi - Implementasi
Ada beberapa jenis Tabel Informasi
program
● Tabel blok: mencatat varibel-variabel yang ada pada blok yang sama
● Tipe dari identifier yang bersangkutan; seperti Integer (bilangan bulat), Char,
boolean , array, record, file
● level dari identifier (depth of block); hal ini menyangkut letak identifier dalam
program, konsepnya sama dengan pembentukan tree, misalnya main program
level 0
Tabel Informasi - Identifier
0 A
1 B
2 X
3 Z
4 C
Tabel Informasi - contoh
TabId: Array [0..tabmax] of record
nama : String;
link : integer;
Obj : object;
Tipe : Types;
ref : Integer;
normal : Boolean;
Level : 0.. Maxlevel;
address : Integer;
End
Dimana
objek =(konstant, variabel, prosedur, fungsi)
Types = (notipe, int, reals, booleans, chars, arrays, record
Tabel Informasi - Array
Tabel Array
dipergunakan untuk menyimpan informasi suatu identifier yang bertipe array,
tabel ini memilik field:
● No. Urut suatu array dalam tabel
● Tipe dari indeks array yang bersangkutan
● Tipe element array
● Referensi dari elemen array
● Index batas atas dan bawah array
● Jumlah elemen array
● Ukuran total array (total = atas - bawah + 1) x elemen size
● Elemen size
Tabel Informasi - Block
Tabel Blok
Dipergunakan untuk menyimpan informasi blok-
blok yang ada pada tabel utama. Berisikan
field
● no urut blok
● batas awal blok
● batas akhir blok
● ukuran parameter/parameter size
● ukuran variabel/ variabel size
● last variabel
● last parameter
Tabel Informasi - Block
Contoh
Program A
Var B : Integer;
Procedure X (Z:char);
Var C : Integer;
begin
....
Untuk Blok A Blok B
last variable =2 4
Variable size = 2 (dianggap int 2 byte) 2
Last parameter = 0 (tanpa parameter) 3
parameter size =0 1 (char butuh
1 byte)
Tabel Informasi - Implementasi
Tabel Real
Dipergunakan untuk menyimpan nilai dari suatu identifier yang bertipe real
(pecahan). Elemen-elemen dari tabel ini adalah sebagai berikut;
■ NO urut elemen
■ Nilai real suatu variabel real yang mengacu ke indeks tabel ini
Pemikirannya disini setiap tipe yang memiliki oleh suatu bahasa akan
memiliki tabelnya sendiri
Tabel Informasi - Implementasi
Tabel String
❑ no Urut elemen
❑ Karakter-karakter yang merupakan konstanta
Tabel Informasi - Implementasi
Tabel Display
menyimpan informasi-informasi mengenai blok-blok yang lagi aktif.
Elemen-elemen yang terdapat dalam tabel ini adalah:
❑ No Urut tabel
❑ Blok yang aktif