Anda di halaman 1dari 28

COMPILER

1.Marlintika 2. Rifky Hariesugama 3.Syarlaili Humairoh


4.Syahroni Hidayat 5.Yogi Permana
What is Compiler ?
Compilation is a process that translates a program in one
language (the source language) into an equivalent program in
another language (the object or target language).

Adalah sebuah program yang membaca suatu program yang ditulis
dalam suatu bahasa sumber (source language) dan
menterjemahkannya ke dalam suatu bahasa sasaran (target
language).



An important part of any compiler is the detection and reporting of
errors (Gambar tersebut adalah ilustrasi sebuah penterjemah compiler menterjemahkan
source code menjadi object file)

Translator : Compiler
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)

Jika source language adalah high level language, seperti cobol, pascal, fortran
maka object language adalah low-level language atau mesin language.
Translator seperti ini disebut COMPILER

Commonly, the source language is a high-level programming language (i.e. a
problem-oriented language), and the target language is a machine language or
assembly language (i.e. a machine-oriented language)

Gambar penterjemah sebuah compiler
Compiler pada umumnya
Compiler membaca sebuah source code dalam bentuk teks,
menyatukan karakter-karakter yang berhubungan menjadi token,
lalu memeriksa apakah token-token tersebut
memenuhi grammar, setelah itu compiler akan memeriksa
semantik input, dan membuat output dalam sebuah bahasa (yang
umumnya adalah assembly). Jika outputnya adalah assembly maka
proses berikutnya adalahassembling yang dilakukan
dengan assembler untuk menghasilkan bahasa mesin. Proses
terakhir untuk membuat executable filedilakukan oleh linker.

Compiler pada umumnya
Intinya kompiler menerjemahkan bahasa pemograman tingkat
tinggi yang diketik oleh editor program tersebut ke bahasa yang
dipahami oleh komputer yakni bahasa mesin. Karena komputer
hanya memahami bahasa mesin. Jadi, ketika software kompiler
rampung menerjemahkan ke bahasa mesin dengan menjadikan file
bahasa tingkat tinggi menjadi file exe, com, dll, dst, maka user
bisa testing program tsb secara mandiri untuk mengeksekusi
program tersebut, tanpa perlu adanya bahasa pemograman tingkat
tinggi di komputernya lagi.
Tahap Kompilasi
1. Pertama source code (program yang ditulis) dibaca kememori computer).
2. Source code tersebut diubah menjadi objek code (bahasa Assembly).
3. Objek code di hubungkan dengan liberary yang dibutuhkan untuk membentuk
file yang bisa dieksekusi.

Komplier memerlukan waktu untuk membuat suatu program dapat di eksekusi
oleh computer, program yang dieksekusi oleh compiler adalah dapat berjalan
lebih cepat dibanding program yang diperoduksi oleh interpreter, disamping itu
juga bersifat independen.
The Phases of a Compiler
The process of compilation is split up into six phases, each of
which interacts with a symbol table manager and an error
handler. This is called the analysis/synthesis model of
compilation.
1. analisa : program sumber dipecah-pecah dan dibentuk menjadi
bentuk antara (inter-mediate representation)
2. sintesa : membangun program sasaran yang diinginkan dari
bentuk antara
SOURCE PROGRAM
LEXICAL ANALYSIS
(SCANNER)
SYNTAX ANALYSIS
(PARSER)
INTERMEDIATE CODE
CODE OPTIMATION
CODE GENERATION
OBJECT CODE
T
A
B
L
E

M
A
N
A
G
E
M
E
N
T
E
R
R
O
R

H
A
N
D
L
I
N
G
SEMANTIC ANALYSER
Lexical Analysis (Scanner)
Sering juga disebut dengan Scanner (Pemindai)
Tugas LA ini untuk mendekomposisi program sumber menjadi
bagian bagian kecil.
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. Setiap token yang dihasilkan
disimpan di dalam tabel simbol. Sederetan karakter yang tidak
mengikuti pola token akan dilaporkan sebagai token tak dikenal
(unidentified token)

Syntax Analyzer
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)
Syntax Analyzer
Bertugas memeriksa kebenaran dari urutan dari token token yang terbentuk oleh LA
Pengelompokan token token kedalam class syntax (bentuk syntax) seperti procedure, statement,
dan expression
Grammar : Sekumpulan aturan aturan untuk mendefinisikan bahasa sumber.
Grammar dipakai oleh syntax analyzer untuk menentukan struktur dari program sumber.
Proses deteksinya (pengenalan token) disebut dengan Parsing. Maka Syntax Analyzer (SA) sering
disebut PARSER.
Pohon sintaks yang dihasilkan digunakan untuk Semantics Analyser yang bertugas untuk menentukan
maksud dari program sumber, misalnya operator penjumlahan maka semantics analyzer akan
mengambil aksi apa yang harus dilakukan.
Terdapat statement : ( A + B ) * ( C + D )
Akan menghasilkan bentuk sintaksis : <factor>, <term> & <expression>

Example of Syntax Tree
<expression>

<term>

<term> * <factor>

<factor> ( <expression> )

( <expression> ) <expression> + <term>

<Expression> + <term> <term> <factor>
<term> <factor> <factor> D
<factor> B C
A

Semantic Analyser
Proses ini merupakan proses kelanjutan dari proses kompilasi sebelumnya, yaitu
analisa leksikal (scanning) dan analisa sintaks (parsing)
Bagian terkahir dari tahapan analisis adalah analisis semantik
Memanfaatkan pohon sintaks yang dihasilkan dari parsing
Proses analisa sintaks dan analisa semantik merupakan dua proses yang sangat
erat kaitannya dan sulit dipisahkan.
Contoh : A:= ( A + B) * ( C +D)
Parser hanya akan mengenali simbol simbol :=, +, dan *, parser tidak
mengetahui makna dari simbol simbol tersebut.
Untuk mengenali makna dari simbol simbol tersebut, compiler memanggil
routine semantics.

Semantic Analyser
Tugasnya adalah 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

Semantic Analyser
Untuk mengetahui makna, maka routine ini akan memeriksa :
Apakah variable yanga da telah didefinisikan sebelumnya
Apakah variable variable tersebut tipenya sama
Apakah operand yang akan dioperasikan tersebut ada nilainya, dst
Menggunakan tabel simbol
Pemeriksaan bisa dilakukan pada tabel identifier, tabel display dan tabel
block

intermediate code (Pembangkit Kode Antara)
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)

intermediate Code (Pembangkit Kode Antara)
Syntax-Directed Code Generation. In essence, code is generated
by recursively walking through a parse (or syntax) tree, and hence
the process is referred to as syntax-directed code generation. For
example, consider the code fragment:
z := x * y + x
and its syntax tree (with lexemes replacing tokens)
Code Optimation
melakukan optimasi (penghematan space dan waktu komputasi), jika mungkin,
terhadap kode antara.

An optimiser attempts to improve the time and space requirements of a
program. There are many ways in which code can be optimised, but most are
expensive in terms of time and space to implement.Common optimisations
include:
removing redundant identifiers,
removing unreachable sections of code,
identifying common subexpressions,
unfolding loops and
eliminating procedures.

Example. Consider the TAC code:
Consider the TAC code:
temp1 := x
temp2 := temp1
if temp1 = temp2 goto 200
temp3 := temp1 * y
goto 300
200 temp3 := z
300 temp4 := temp2 + temp3
Removing redundant identifiers
(just temp2) gives
temp1 := x
if temp1 = temp1 goto 200
temp3 := temp1 * y
goto 300
200 temp3 := z
300 temp4 := temp1 + temp3
Removing redundant code
gives
temp1 := x
200 temp3 := z
300 temp4 := temp1 + temp3
Code Generation
The final phase of the compiler is to generate code for a specific
machine. In this phase we consider:
memory management,
register assignment and
machine-specific optimisation.
The output from this phase is usually assembly language or
relocatable machine code.

Penggunaan Otomata

Manfaat otomata sebagai pengenal (RECOGNIZER) digunakan untuk
pengenalan string-string suatu bahasa yang sebagai masukan dari otomata,ini
biasanya digunakan di tahap-tahapan awal pada proses kompilasi seperti
pada tahap Lexical Analyzer = Scanner, Syntax Analyzer ,Semantic Analyser
karena pada tahapan ini berhubungan langsung dengan bahasa dan
mendekomposisi program sumber menjadi bagian bagian kecil.
Fungsi automata sebagai pembangkit (GENERATOR) berfungsi pada tahapan
intermediate code (representasi program untuk suatu mesin abstrak), Code
generation dan code optimazation adalah merupakan fungsi synthesis yang
berfungsi melakukan pembangkitan/pembuatan dan optimasi program
(object program)

Example
View dari programmer
Mesin View
Keterangan
id adalah token untuk identifier. Tiga lexeme untuk token ini adalah
position, initial, dan rate.
penganalisa semantik secara logika membangkitkan pohon parse.
penganalisa semantik mendeteksi mismatch type. Perbaikan dilakukan
dengan memang-gil procedure inttoreal yang mengkonversi integer ke
real.
quadruples dari : temp2 := id3 * temp1 adalah (*,id3,temp1,temp2), id1
:= temp3 adalah (assign,temp3,-,id1), temp1 := inttoreal(60) adalah
(inttoreal,60,-,temp1).
pembangkit kode dalam contoh ini menghasilkan kode dalam bahasa
mesin.

Anda mungkin juga menyukai