Anda di halaman 1dari 16

MAKALAH

TEKNIK KOMPILASI
(Tahap Intermediate Code Generator)

Di susun Oleh Kelompok 5:

WIDY ASTUTI

14-650-033

NOVIANTI RUSMADI

14-650-022

IRVAN S.K

14-650-031

KELAS : A

PROGRAM STUDI TEKNIK INFORMATIKA


FAKULTAS TEKNIK
UNIVERSITAS DAYANU IKHSANUDDIN
BAUBAU
2016

KATA PENGANTAR
Syukur alhamdulillah, segala puja dan puji hanya milik allah. Syukur
alhamdulillah atas rahmat dan hidayahnya sehingga kami dapat menyelesaikan
makalah ini dengan tema TEKNIK KOMPILASI semoga allah melimpahkan
solawat serta salam kepada nabi muhammad saw seluruh keluarga dan para
sahabat amin.
Makalah ini banyak kekurangan dan ke tidak sempurnaan baik dari segi
pembahasan, bahasa, maupun literatur yang di gunakan. Oleh karena itu besar
harapan kami mendapatkan kritikan dan masukan yang sifatnya membangun
sehingga kami dapat memperbaiki semua kekurangan pada pembuatan makalah
berikutnya, akhir kata dari kami sangat berharap makalah ini dapat menjadi
sumbangan kecil yang dapat meperkaya wawasan para pembaca amin..

DAFTAR ISI
HALAMAN JUDUL...............................................................................
KATA PENGANTAR ............................................................................
DAFTAR ISI...........................................................................................

BAB I PENDAHULUAN .......................................................................


A. Latar belakang.............................................................................
B. Tujuan penulisan .........................................................................
C. Rumusan masalah .......................................................................

BAB II PEMBAHASAN ........................................................................


A. Sejarah Kompilasi .......................................................................
B. Pengertian Teknik Kompilasi......................................................
1.

Proses Analisis Leksikal.......................................................

2.

Proses Analisis Sintaks.........................................................

3.

Proses Analisis Semantik .....................................................

C. Intermediate Code Generator ......................................................

BAB III PENUTUP ................................................................................


A. Kesimpulan .................................................................................
B. Saran............................................................................................

DAFTAR PUSTAKA .............................................................................

BAB 1
PENDAHULUAN

A. Latar Belakang
Teknik Kompilasi merupakan teknik untuk melakukan pembacaan suatu
source program yang ditulis dalam bahasa sumber, misalnya Pascal, kemudian
diterjemahkan ke dalam suatu bahasa lain yang disebut bahasa sasaran atau
bentuk yang dapat dieksekusi secara langsung dari sistem operasi yang tersedia
dalam suatu komputer. Teknik tersebut diimplementasikan dalam suatu perangkat
lunak (software) yang disebut Compiler.
Istilah Compiler muncul karena dulu ada program yang menggunakan
subrutin-subrutin atau pustaka-pustaka untuk keperluan yang sangat khusus yang
dikumpulkan menjadi satu sehingga diistilahkan compiled.
Kompilator pertama yang dibuat adalah kompilator untuk bahasa FORTRAN
yang pada saat itu dikembangkan dengan memakan sejumlah tenaga ahli yang
setara dengan pekerjaan yang dilakukan oleh 18 orang. Dengan adanya program
bantu dan tata cara pembentukan yang sistematis dan tertata dengan baik serta
pendefinisian struktur bahasa yang cermat, maka suatu kompilator untuk bahasa
yang terstruktur seperti PASCAL atau C dapat dikembangkan.
Proses kompilasi dari suatu kompilator pada dasarnya dapat dibagi ke dalam 2
bagian utama yaitu bagian analisis dan bagian sintesis.

B. Tujuan Penulisan
Tujuan dalam penulisan makalah ini adalah untuk mengetahui tentang
tahap Intermidate Code Generator.

C. Rumusan Masalah
1. Sejarah singkat teknik kompilasi
2. Pengertian teknik kompilasi
3. Intermediate Code Generator

BAB 11
PEMBAHASAN

A. Sejarah Kompilasi
Sejarah perkembangan suatu kompilator sudah dimulai sejak lama, yaitu
pada saat mulai ditemukannya komputer pada awal 1950-an. Sejak waktu
tersebut teknik dan cara pembentukan suatu kompilator telah berkembang dengan
sangat pesat dan pembentukkan suatu kompilator dapat dilakukan makin mudah.
Demikian pula program bantu (tools) untuk membuat suatu kompilator sudah
dapat diperoleh sehingga pembentukan suatu kompilator dapat dilakukan dengan
cepat.
Kompilator pertama yang dibuat adalah kompilator untuk bahasa FORTRAN
yang pada saat itu dikembangkan dengan memakan sejumlah tenaga ahli yang
setara dengan pekerjaan yang dilakukan oleh 18 orang. Dengan adanya program
bantu dan tata cara pembentukan yang sistematis dan tertata dengan baik serta
pendefinisian struktur bahasa yang cermat, maka suatu kompilator untuk bahasa
yang terstruktur seperti PASCAL atau C dapat dikembangkan.
Proses kompilasi dari suatu kompilator pada dasarnya dapat dibagi ke dalam 2
bagian utama yaitu bagian analisis dan bagian sintesis. Tahap analisis program
yang ditulis dalam bahasa sumber dibagi dan dipecah ke dalam beberapa bagian
yang kemudian akan dipresentasikan ke dalam suatu bentuk antara dari program
sumber.
Operasi-operasi yang dilakukan oleh program sumber ditentukan dan dicatat
dalam suatu struktur pohon (tree) yang disebut dengan nama pohon sintaks (sintax
tree) Dalam hal ini setiap nodal pada tree tersebut menyatakan suatu operasi,
sedangkan anak dari nodal (titik) tersebut memberikan argumen yang diperlukan

B. Pengertian Teknik Kompilasi


Teknik adalah metode atau cara dan Kompilasi adalah Proses
mengabungkan serta menterjermahkan sesuatu (source program) menjadi bentuk
lain.
Teknik Kompilasi merupakan Teknik dalam melakukan pembacaan suatu
program yang ditulis dalam bahasa sumber, kemudian diterjemahkan ke dalam
suatu bahasa lain yang disebut bahasa sasaran. Dalam melakukan proses
penerjemahan tersebut, sudah barang tentu kompilator akan melaporkan adanya
keanehan-keanehan atau kesalahan yang mungkin ditemukannya. Proses
penerjemahan

yang

dilakukan

oleh

kompilator

ini

disebut

proseskompilasi (compiling).
Bila

dipandang

sepintas

lalu,

maka

akan

timbul

beranekaragam

kompilator yang dapat dibuat antara lain sebagai berikut :


1. Bahasa Sumber seperti bahasa FORTRAN, PASCAL, C dan juga bahasabahasa lainnya yang sifat dan pemakaiannya agak spesifik atau khusus,
seperti bahasa untuk program DBASE, SPSS dan lain sebagainya.
2. Bahasa Sasaran dapat berupa bahasa sumber lain seperti C, FORTRAN
dan lain sebagainya atau Bahasa Mesin (Machine Language) yang
digunakan oleh suatu prosessor mikro atau sumber komputer besar
maupunkomputer super
Secara umum proses dalam tahap analis terdiri dari 3 bagian utama, yaitu :
1. Proses analisis leksikal
2. Proses analisis sintaktik
3. Proses analisis semantik
Tahap sintesis yang berikutnya program sasaran dibentuk berdasarkan
representasi antara yang dihasilkan pada tahap analisis.
Untuk tahap sintetis terdiri dari 2 bagian utama, yaitu

1. Proses yang menghasilkan kode (code generator)


2. Proses optimasi kode (code optimizer)
1. Proses Analisis Leksikal
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).

2.

Proses Analisis Sintaks


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).

3. Proses Analisis semantik


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. Intermediate Code Generator


Proses kompilasi dari suatu kompilator pada dasarnya dapat dibagi ke
dalam 2 bagian utama yaitu bagian analisis dan bagian sintesis.Pada saat proses
compiler ada tahap di mana pembentukan program sasaran dibentuk berdasarkan
reprensentasi antara yang dihasilkan pada tahap analisis,tahap yang di maksud
adalah tahap sintesis dimana tahapa sintesis terbagi dalam 3 bagian yaitu :
intermediate code generator
code optimizer
code generator.
Tahap Sintesis adalah membangun program sasaran yang diinginkan dari
bentuk antara . Pada bagian ini kita akan menjelaskan sedikit tentang bagian
pertama

dari

tahap

sintesis

yaitu

intermediate

code

generator,yaitu

membangkitkan kode antara (intermediate code) berdasarkan 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 adalah adalah sebuah representasi yang disiapkan untuk
mesin abstrak tertentu.Di mana intermediatae tersebut harus memiliki dua sifat
yang harus terpenuhi yaitu:
1. Dapat dihasilkan dengan mudah
2. Mudah ditranslasikan menjadi program sasaran(target program)
Representasi kode antara biasanya berbentuk perintah tiga alamat (threeaddress code), baik berbentuk quadruples ataupun triples.Jika kita ingin
mengambil sedikit contoh tentang cara kerja intermediate maka kita bisa melihat
bagaimana intermediate bekerja dalam mengcompile sebuah bahasa pemrograman
yang sederhana,dimana Tahap-tahap compiler yang dianalisa meliputi tahap
scanner, parser, constrainer dan tahap code generator. Scanner mengambil
karakter-karakter input dan mengelompokkannya menjadi token-token.Parser

pada compiler ini merupakan program-driven parser yang mewujudkan grammar


dalam bentuk algoritma, bersifat top-down dan termasuk recursive-descent parser
untuk grammar LL(1). Constrainer memeriksa aturan pendeklarasian variabel,
sedangkan tahap intermediate code generator menghasilkan bentuk positifinya
yang memudahkan proses pembentukan kode output pada tahap code generator.
Bentuk

dari

intermediate

code

generator

tergantung

bagaimana

pemrosesan yang dilakukan selama tahap sintesis,


temp1 := inttoreal(60)
temp2 := id3 * temp1
temp3 := id2 + temp2
id1 := temp3
Implementasi dari bentuk intermediate code generator dapat kita lihat
seperti contoh berikut:
Syntax-Directed Translation
Bagian yang akan menghasilkan intermediate form dari source code.
Fungsinya untuk menentukan maksud dari suatu source code. Meskipun secara
konseptual sintaks dari suatu program dipisahkan dari semantiknya, mereka
bekerja sama secara dekat. Keluaran dari bagian ini akan diberikan ke code
genereator.
Kode-antara (intermediate code) dibentuk dari sebuah kalimat x dalam
bahasa context free. Kalimat x ini adalah keluaran dari parser. Syntax-directed
transalation adalah suatu urutan proses yang mentranslasikan parse tree menjadi
kode-antara. Tahap pertama dari pembentukan kode antara adalah evaluasi atribut
setiap token dalam kalimat x. Yang dapat menjadi atribut setiap token adalah
semua informasi yang disimpan di dalam tabel symbol. Evaluasi dimulai dari
parse tree. Kumpulan aturan yang menetapkan aturanaturan semantik untuk setiap
produksinya dinamakan syntax-directed definition. syntax-directed translation
yang mentranslasikan ekspresi intinya menjadi ekspresi positfinya. Ekspresi
intinya ini dapat dilihat sebagai sebuah kalimat yang dihasilkan oleh parser.

Contoh 1:
Diketahui :
1. kalimat x : 9 5 + 2
2. grammar Q = {E . E + T.E T.T, T . 0.1.3..9}
3. syntax-directed definition :
Produksi Aturan Semantik
E . E 1 + T E := E 1 .t T.t +
E . E 1 T E := E 1 .t T.t -
E . T E := T.t
E . 0 E := 0
E . 1 E := 1

E . 9 E := 9
catatan :
1. Lambang menyatakan concatenation.
2. Mengingat catatan 1, aturan semantik kedua produksi pertama adalah
concate dua operan diikuti sebuah operator.
Langkah-langkah translasi
1. Pembentukan parse tree
2. Pembentukan annonated parse tree :
E E = 95-2+
E + T E.t = 95- + T.t = 2
E T 2 E.t = 9 T.t = 5 2
T 5 T.t = 9 5
99
Translation Scheme
Translation scheme adalah grammar context free dimana sebuah frase
yang disebut semantic actions disertakan di sisi kanan setiap produksinya.
Semantic actions ini adalah sebuah nilai sebagai hasil evaluasi atribut pada sebuah
node. Dalam translation schemes, frase yang menyatakan action diapit dengan

kurung kurawal. . Pada syntax-directed translation hasil akhir evaluasi atribut


ditetapkan pada root dari parse tree melalui kunjungan dept-first traversal
sedangkan pada translation scheme hasil tersebut ditetapkan pada setiap node
(termasuk leaf) juga secara dept-first traversal. Contoh sebuah translation scheme
dengan semantic action-nya adalah :
rest . + term {print(+)} rest 1 ,
Pada contoh di atas, aksi {print(+)} akan dilakukan setalah evaluasi terhadap
term selesai dan evaluasi terhadap rest 1 belum dilakukan. Dalam representasi
parse tree, semantic action pada translation scheme digambarkan dengan garis
putus-putus sebagai leaf tambahan.
Dari penjelasan di atas terlihat bahwa translation scheme mirip dengan
syntax-directed translation kecuali dalam prosedur evaluasi nilai atribut pada
setiap nodenya. Pada syntax-directed translation hasil akhir evaluasi atribut
ditetapkan pada root dari parse tree melalui kunjungan dept-first traversal
sedangkan pada translation scheme hasil tersebut ditetapkan pada setiap node
(termasuk leaf) juga secara dept-first traversal. Gramar dan kalimat pada contoh 1
di atas mempunyai translation schemes dan parse tree sebagai berikut:
E
E . E + T {print(+)}
E . E T {print(-)}
E.TET
T . 0 {print(0)}
E . 1 {print(1)}
E {print(-)}2 {print(2)}

T
E . 9 {print(9)} T
5{print(5)}
9 print(9)}
+ {print(+)}

Syntax Tree
Parse tree seringkali disebut sebagai concrete syntax tree. Parse tree tidak
efisien karena mengandung informasi yang berlebihan; sebagai gantinya, kalimat
dinyatakan sebagai abstract syntax tree atau sering disingkat sebagai syntax tree
saja. Dalam syntax tree setiap operator maupun keyword tidak muncul sebagai
leaf.
contoh :
syntax tree untuk kalimat x : 9 5 + 2 dan y : if B then S 1 else S 2 :
+ if-then-else
2
BS1S2
95
Membentuk Syntax Tree Sebuah Ekspresi
Pada pasal ini akan dibentuk sebuah syntax tree dimana setiap node-nya
dinyatakan sebagai data record. Setiap record paling tidak mengandung sebuah
label yang dapat berupa identifier, konstanta, atau operator. Proses pembentukan
ini memerlukan tiga buah function berikut :
1. mknode(op, left, right) : membentuk node operator dengan label op dan
dua field lainnya berupa pointer ke anak kiri dan anak kanan.
2. mkleaf(id, entry) : membentuk node identifier dengan label id dan sebuah
field berupa pointer ke symbol table. Pelacakan identifier pada symbol
table.
3. mkleaf(num, val) : membentuk node konstanta dengan label id dan sebuah
field yang mengandung nilai bilangan.
Contoh:
Diberikan ekspresi : a 4 + c, dengan a dan c adalah identifier.Syntax tree
akan dibentuk secara bottom-up. Berikut ini adalah algoritma pembentukan syntax
tree untuk ekspresi yang diinginkan beserta bentuk syntax tree yang
dihasilkannya:
(1) p1 := mkleaf(id, entrya); dimana :
(2) p2 := mkleaf(num, 4); -p1, p2, p3, p4, p5 : pointer ke node

(3) p3 := mknode(-, p1, p2); -entrya, entryc : pointer ke symbol table


(4) p4 := mkleaf(id, entryc); masing-masing untuk identifier a dan c
(5) p5 := mknode(+, p3, p4);
+
id
id num 4 entry untuk c
entry untuk a
Grammar untuk ekspresi contoh 2 adalah : Q = {E . E + T.E-T.T, T. (E).id.num},
sedangkan syntax directed definition-nya adalah :
Produksi Aturan Semantik
E . E 1 + T E.nptr := mknode(+, E 1 .nptr, T.nptr)
E . E 1 T E.nptr := mknode(-, E 1 .nptr, T.nptr)
E . T E.nptr := T.nptr
E . (E) T.nptr := E.nptr
E . id T.nptr := mkleaf(id, id.entry)
E . num T.nptr := mkleaf(num, num.val)
Pada tabel di atas nptr adalah synthesized attribute, masing-masing untuk
E dan T. Sebuah atribut di sebuah node adalah synthesized attribute jika nilai
atribut pada node tersebut ditentukan dari nilai-nilai atribut anak-anaknya.
Three Address Code
Bentuk umum three address code bagi sebuah pernyataan adalah : x := y
op z, dimana x, y, z adalah nama atau konstanta, sedangkan op adalah operator
aritmatika atau operator logika. Ekspresi panjang seperti v := x + y * z dapat
dinyatakan dengan three address code menjadi : t1 := y * z; t2 := x + t1; v := t2.
Terdapat dua format untuk three address code, yaitu format quadruple (op, arg1,
arg2, result) dan format triple (op, arg1, arg2). Isi dari arg1, arg2, dan result
adalah pointer ke symbol table. Jika isi tersebut adalah temporary identifier, maka
nama tersebut harus dimasukkan ke dalam symbol table begitu nama tersebut
dideklarasikan atau diciptakan.
Contoh:Diberikan pernyataan : a := b * c + b * c.

Rangkaian three address code dari pernyataan ini adalah :


t1 := c; t2 := b * t1; t3 := c; t4 := b * t3; t5 := t2 := t4; a := t5
Pernyataan quadruple dan triple dari pernyataan di atas adalah :
Tabel format quadruple Tabel format truple :
NO

OP arg1 arg2 result

Op arg1 arg2

uminus c t1

uminus c

* b t1 t2

* b (0)

uminus c t3

uminus c

* b t3 t4

(3) * b (2)

+ t2 t4 t5

+ (1) (3)

:= t5 a

:= a (4)

Format quadruple untuk opearor unary seperti - c menyebabkan arg2


tidak digunakan. Format triple digunakan untuk menghindari penggunaan
temporary identifier seperti yang terjadi pada format quadruple. Format triple ini
benar-benar mendayagunakan posisi baris pernyataan. Sebagai contoh, pada baris
kedua dari tabel format triple terlihat bahwa isi arg2 adalah (0), yang tak lain dari
uminus c.

BAB 111
PENUTUP
A. Kesimpulan
Representasi kode antara biasanya berbentuk perintah tiga alamat (threeaddress code), baik berbentuk quadruples ataupun triples.Jika kita ingin
mengambil sedikit contoh tentang cara kerja intermediate maka kita bisa melihat
bagaimana intermediate bekerja dalam mengcompile sebuah bahasa pemrograman
yang sederhana,dimana Tahap-tahap compiler yang dianalisa meliputi tahap
scanner, parser, constrainer dan tahap code generator. Scanner mengambil
karakter-karakter input dan mengelompokkannya menjadi token-token.Parser
pada compiler ini merupakan program-driven parser yang mewujudkan grammar
dalam bentuk algoritma, bersifat top-down dan termasuk recursive-descent parser
untuk grammar LL(1). Constrainer memeriksa aturan pendeklarasian variabel,
sedangkan tahap intermediate code generator menghasilkan bentuk positifinya
yang memudahkan proses pembentukan kode output pada tahap code generator.
Bentuk

dari

intermediate

code

generator

tergantung

bagaimana

pemrosesan yang dilakukan selama tahap sintesis,


temp1 := inttoreal(60)
temp2 := id3 * temp1
temp3 := id2 + temp2
id1 := temp3

B. Saran
Kiranya makalah ini masih jauh dari kata sempurna. Penulis mohon maaf atas
kesalahan dalam penulisan ataupun bila ada kata yang menyinggung.

DAFTAR PUSTAKA

http://dmanty.blogspot.co.id/2011/07/makalah-teknik-kompilasi.html
http://semutuyet.blogspot.co.id/2012/11/makalah-tehnik-kompilasi.html
http://www.tutorialspoint.com/compiler_design/compiler_design_intermediate_code_
generations.htm

http://belajar-program.ueuo.com
http://wikipedia.com
http://nusinau.com

Anda mungkin juga menyukai