Anda di halaman 1dari 48

11

Teknik Kompilasi

4/11/12

Pertemuan 10 Click to edit Master subtitle Intermediate Code Generator (Ekspresi)

style

Aries Yoshan

Sekolah Tinggi Teknik Surabaya

Bacaan

Compilers: Principles, Techniques, and Tools Aho, Sethi, Ullman Bab 7: Run-Time Environments Bab 8: Intermediate Code Generation Bab 2: A Simple One-Pass Compiler

4/11/12

2 2 Sekolah Tinggi Teknik Surabaya

Intermediate Code Generator


Bertugas membangkitkan representasi intermediate yang mewakili program asal. Representasi intermediate dapat dipandang sebagai sebuah program untuk mesin abstrak.

4/11/12

3 3 Sekolah Tinggi Teknik Surabaya

Representasi Intermediate

Syntax tree

Representasi grafis berbentuk tree yang menggambarkan struktur hirarki program asal.

Postfix notation

Notasi yang merupakan hasil penelusuran syntax tree secara postorder.

Three-address code

Bentuk yang sangat mirip dengan kode assembly. Contoh kode assembly: mov ax, 10

4/11/12

4 4 Sekolah Tinggi Teknik Surabaya

Syntax Tree
a = b * -c + b * -c
assign a * b
4/11/12

+ * uminus b c uminus c
5 5

Sekolah Tinggi Teknik Surabaya

Postfix Notation
a = b * -c + b * -c
assign a * b
4/11/12

+ * uminus b c uminus c
6 6

a b c u m i u s * b c u m i u s * + assi n n n g
Sekolah Tinggi Teknik Surabaya

Three-Address Code
a = b * -c + b * -c mov t1, t1 = b t2 = assign mov t2, t2 = c t2 a + uminus t1 = t2 * t2 * * mul t1, t3 = t2 t4 = b uminus b uminus mov t3, t4 = b t4 c c mov t4, t3 = c * t4 uminus t1 = a b c u m i u s * b c u m i u s * + assi n n n t4 g + t3
Sekolah Tinggi Teknik Surabaya

b c t1 b c t3 t1
7 7

4/11/12

Variabel Temporer
mov t1, b mov t2, c uminus t2 mul t1, t2 mov t3, b mov t4, c uminus t4 t1 = t2 = t2 = t2 t1 = * t2 t3 = t4 = t4 = t4 t3 = * t4 t1 = + t3 b c t1 b c t3 t1
8 8

t1, t2, t3, t4 adalah contoh variabel temporer. Diperlukan sebagai penampung sementara.

4/11/12

Sekolah Tinggi Teknik Surabaya

Triplet

Merupakan implementasi threeaddress code yang paling umum. Tersusun atas tiga bagian:

Kode operator (opcode = operator code) Operand pertama Operand kedua

4/11/12

Serupa dengan bahasa assembly.


9 9

opcode operand 1 operand 2

Sekolah Tinggi Teknik Surabaya

Struktur Operand
Seperti halnya bahasa assembly, operand 1 dan operand 2 terdiri dari dua bagian:

Mode pengalamatan Nilai

4/11/12

10 10 Sekolah Tinggi Teknik Surabaya

Struktur Operand dan Triplet


opcode operand 1
mode nilai

operand 2
mode nilai

p ub l c cl i ass O perand { p ub l c i m ode; i nt p ub l c i ni ai i nt l ; .. . } p ub l c cl i ass Tri l { p et p ub l c i op C ode; i nt p ub l c O p erand op erand1, op erand2; i .. . }


Sekolah Tinggi Teknik Surabaya 4/11/12

11 11

Mode Pengalamatan

Mode temporer

nilai menyatakan indeks variabel temporer. nilai = 1 untuk menyatakan t1.

Mode integer

nilai menyatakan bilangan integer.

Mode real

nilai menyatakan indeks yang merujuk ke sebuah tabel real.

4/11/12

Mode string

nilai menyatakan indeks yang merujuk ke sebuah tabel string.

12 12

Sekolah Tinggi Teknik Surabaya

Tipe Boolean

Operand dengan nilai bertipe Boolean dapat direpresentasikan dengan mode integer. Boolean true diwakili oleh nilai = 1. Boolean false diwakili oleh nilai = 0.

4/11/12

13 13 Sekolah Tinggi Teknik Surabaya

Tabel Real dan Tabel String pada struktur operand Field nilai

bertipe int, sehingga untuk menyimpan nilai operand yang bertipe real dan string, harus menggunakan tabel real dan tabel string.

Untuk operand bertipe real, harus menggunakan mode real, dan nilai = indeks pada tabel real. Demikian juga untuk tipe string.
14 14

4/11/12

Sekolah Tinggi Teknik Surabaya

Contoh Triplet
mov t1, 10 = mov temporer 1 integer 10 mov t2, 10.5
Tabel Real = mov temporer 2 real 0Indek Nilai s indeks 0 berisi 10.5 0 10.5 Tabel String mov t3, "stts" = mov temporer 3 string 0 Indek Nilai s indeks 0 berisi "stts" 0 "stts"
15 15 Sekolah Tinggi Teknik Surabaya

4/11/12

Indeks Variabel Temporer pertama akan Variabel temporer

mendapatkan indeks = 1.

tempIndex diinisialisasi 0.

%% stati Tabel i bol tabel i bol = c S m S m new Tabel i bol S m (); stati i tem pI c nt ndex = 0;
.. .
4/11/12

16 16 Sekolah Tinggi Teknik Surabaya

Tabel Real dan Tabel String Diimplementasikan dengan hash

table.
p ub l c cl i ass Tab el E> { < p ri vate H ashM ap < E, nteger> tab el = I new H ashM ap < E, nteger> (); I .. . }

%% stati Tabel i b ol tab el i b ol = c S m S m new Tab el i b ol S m (); stati Tabel D oubl c < e> tabel eal = R new Tab el D oub l (); < e> stati Tabel S tri Surabaya S tri = c < ng> tab el ng Sekolah Tinggi Teknik

4/11/12

17 17

Tabel Real dan Tabel StringTab el< E> { p ub l c cl i ass


p ri vate H ashM ap < E, nteger> tab el = I new H ashM ap < E, nteger> (); I p ri vate i count = 0; nt p ub l c i cari ni ai { i nt (E l ) I nteger i ndex = tab el get(ni ai . l ); return(i ndex = = nul ? -1 : i l ndex); } .. .

}
4/11/12

18 18 Sekolah Tinggi Teknik Surabaya

Tabel Real dan Tabel StringTab el< E> { p ub l c cl i ass


p ri vate H ashM ap < E, nteger> tab el = I new H ashM ap < E, nteger> (); I p ri vate i count = 0; nt .. . p ub l c i tam bah(E ni ai { i nt l ) I nteger i ndex = tab el get(ni ai . l ); i (i f ndex = = nul ) { l i ndex = count+ + ; tabel put(ni ai i . l , ndex); } return i ndex; } }
Sekolah Tinggi Teknik Surabaya 19 19

4/11/12

Run-Time Memory
Struktur memori yang dialokasi saat sebuah program dijalankan:

Code Segment

berisi kode program

Data Segment

Code (Code Segment) Static Data (Data Segment) Stack (Stack Segment)

berisi variabel global, konstanta real dan string

4/11/12

Stack Segment

stack untuk urusan pemanggilan subrutin dan variabel lokal

20 20

Sekolah Tinggi Teknik Surabaya

Mode Pengalamatan
Terkait pengalamatan memori:

Mode dataoffset

nilai menyatakan offset pada data segment.

Mode codeoffset

nilai menyatakan offset pada code segment.

Mode stackoffset

nilai menyatakan offset pada stack segment.

4/11/12

21 21 Sekolah Tinggi Teknik Surabaya

Variabel Global

Untuk mengakses variabel global, gunakan mode dataoffset. Pada Tabel Simbol, perlu ditambahkan sebuah field/kolom untuk menyimpan offset pada data segment, yang mana offset ini diawali dari nilai 0. Field baru ini diberi nama dataOffset.
22 22

4/11/12

Sekolah Tinggi Teknik Surabaya

Perubahan Tabel Simbol


p ub l c cl i ass S i b ol m i p l ents C om parab l S i b ol { m em e< m > S tri nam a; ng i j s; nt eni i ti eD ata; nt p i dataO ffset; nt .. . } p ub l c cl i ass Tab el m b ol { Si p ri vate A rrayLi st< S i b ol m > tab el i b ol = new A rrayLi S m st< S i b ol (); m > .. . }
23 23 Sekolah Tinggi Teknik Surabaya

4/11/12

Inisialisasi dataOffset
%% stati Tabel i b ol tab el i b ol = c S m S m new Tab el i b ol S m (); stati Tabel D oubl c < e> tabel eal = R new Tab el D oub l (); < e> stati Tabel S tri c < ng> tab el tri = S ng new Tab el S tri < ng> (); stati i dataO ffset = -1; c nt stati i tem p I c nt ndex = 0; .. .
4/11/12

dataOffset diinisialisasi -1 agar variabel global pertama memperoleh dataOffset = 0


Sekolah Tinggi Teknik Surabaya

24 24

Menetapkan dataOffset
di _stm t : D I i i A S nam a_ti e m M d_l st p i i d_l st : i d_uni que | i i ' 'i d_l st , d_uni que i d_uni que : I D { Si b ol o = new S i b ol m m ( $1, S i bol VA R I B EL, m . A S i bol N O N E); m . i (!tab el i b ol tam b ah(o)) f S m . yyerror("D up l cate I "); i D
4/11/12

Asumsi: variabel yang dideklarasikan di sini adalah variabel global Sekolah Tinggi Teknik Surabaya
}

o. dataO ffset = + + dataO ffset;

25 25

Struktur Tabel Kode

Tabel Kode merupakan array yang elemennya adalah triplet. Di Java: ArrayList<Triplet> triplet

opcode

operand 1
mode nilai

operand 2
mode nilai

4/11/12

26 26 Sekolah Tinggi Teknik Surabaya

Inisialisasi Tabel Kode


%% stati Tabel i b ol tab el i b ol = c S m S m new Tab el i b ol S m (); stati Tabel D oubl c < e> tabel eal = R new Tab el D oub l (); < e> stati Tabel S tri c < ng> tab el tri = S ng new Tab el S tri < ng> (); stati A rrayLi c st< Tri l p et> tab el ode = K new A rrayLi st< Tri et> (); pl stati i dataO ffset = -1; c nt stati i tem p I c nt ndex = 0;
4/11/12

.. .
27 27 Sekolah Tinggi Teknik Surabaya

Macam Triplet

Triplet dua operand

Umumnya triplet yang dipakai berjenis triplet dua operand. Contoh: mov temporer 1 integer 10

Triplet satu operand

Contoh: inc temporer 1


+

Triplet ini nantinya dipakai untuk membentuk konstruksi for.

Contoh lain: uminus temporer 2

4/11/12

28 28 Sekolah Tinggi Teknik Surabaya

Macam Triplet
p ub l c cl i ass Tri l { p et p ub l c i op C ode; i nt p ub l c O p erand op erand1, op erand2; i Tri l p et(i op C ode, O p erand op ) { nt thi op C ode = op C ode; s. Triplet thi op erand1 = op ; s. satu thi op erand2 = nul ; s. l opera } Tri l p et(i op C ode, nt O p erand op 1, O perand op 2) { thi op C ode = op C ode; s. Triplet thi op erand1 = op 1; s. dua thi op erand2 = op2; s. opera } }
Sekolah Tinggi Teknik Surabaya

nd

4/11/12

nd

29 29

Contoh Triplet pada Ekspresi-c a = b * -c + b *


m ov tem porer 1 dataoffset 1 (b) m ov tem porer 2 dataoffset 2 (c) um i nus tem porer 2 m ul tem porer 1 tem porer 2 m ov tem porer 3 dataoffset 1 (b) m ov tem porer 4 dataoffset 2 (c) um i nus tem porer 4 m ul tem porer 3 tem porer 4 add tem porer 1 tem porer 3 m ov dataoffset 0 (a) tem porer 1

4/11/12

Sekolah Tinggi Teknik Surabaya

Asumsi: urutan deklarasi variabel adalah a, b, c

30 30

Atribut expr, term, factor, ...

Agar bisa menghasilkan urutan triplet sesuai dengan ekspresi yang tertera pada source code, setiap LHS dari production yang terkait ekspresi (expr, term, factor, dst.) mempunyai atribut berupa dua hal:

Indeks variabel temporer Tipe data hasil ekspresi dipertahankan untuk semantic analysis 31 31

4/11/12

Sekolah Tinggi Teknik Surabaya

Atribut expr, term, factor, ...ttr { p ub l c cl i ass Exp rA


p ub l c i tem p I i nt ndex; p ub l c i ti eD ata; i nt p .. . } % typ e < obj expr term factor >

4/11/12

32 32 Sekolah Tinggi Teknik Surabaya

Konstanta Integer
factor : . . . | I TC O N ST N { tab el ode. K add( new Tri l p et(Tri l M O V, p et. new O p erand( O p erand. TEM P O R ER , + + tem p I ndex), new O p erand( O p erand. N TEG ER , I $1))); $$ = new Exp rA ttr(tem p I ndex, S i b ol I TEG ER ); m .N } |. . .
33 33 Sekolah Tinggi Teknik Surabaya

4/11/12

Konstanta Real
factor : . . . | R EA LC O N ST { tab el ode. K add( new Tri l p et(Tri l M O V, p et. new O p erand( O p erand. TEM P O R ER , + + tem p I ndex), new O p erand( O p erand. EA L, R tab el eal tam bah($1)))); R . $$ = new Exp rA ttr(tem p I ndex, S i b ol R EA L); m . } |. . . Perlakuan konstanta

4/11/12

Sekolah Tinggi Teknik Surabaya

string mirip dengan perlakuan konstanta real

34 34

Variabel (Asumsi: Global) factor : . . .

4/11/12

|I D { S i bol o = tab el m b ol cari m Si . ($1); . . / decl . / arati checker on tabel ode. K add( new Tri l p et(Tri l M O V, p et. new O p erand( O p erand. TEM P O R ER , + + tem p I ndex), new O p erand( O p erand. ATA O FFS ET, D o. dataO ffset))); $$ = new Exp rA ttr(tem p I ndex, o. peD ata); ti }

35 35

Sekolah Tinggi Teknik Surabaya

Operasi Perkalian
term : term ' factor *' { . . / typ e checker . / tabel ode. K add( new Tri l p et(Tri et. U L, pl M new O p erand( O perand. TEM P O R ER , ((Tem p A ttr)$1). tem p I ndex), new O p erand( O perand. TEM P O R ER , ((Tem p A ttr)$3). tem p I ndex))); $$ = new ExprA ttr( ((Tem pA ttr)$1). tem p I ndex, .. . ); } |. . . Operasi lainnya

4/11/12

mirip

36 36

Sekolah Tinggi Teknik Surabaya

Reuse Indeks Var. Temporer


Indeks variabel temporer selalu bertambah. Variabel temporer nantinya akan menjadi variabel lokal yang tersimpan di stack. Jumlah variabel temporer yang terlalu banyak memboroskan memori. Harus ada efisiensi penggunaan indeks variabel temporer. Caranya: reuse.

4/11/12

37 37

Sekolah Tinggi Teknik Surabaya

Reuse Indeks Var. Temporer a = b * -c + b * -c


m ov tem porer 1 dataoffset 1 (b) m ov tem porer 2 dataoffset 2 (c) um i nus tem porer 2 m ul tem porer 1 tem porer 2 m ov tem porer 2 dataoffset 1 (b) m ov tem porer 3 dataoffset 2 (c) um i nus tem porer 3 m ul tem porer 2 tem p orer 3 add tem porer 1 tem porer 2 m ov dataoffset 0 (a) tem porer 1

4/11/12

Sekolah Tinggi Teknik Surabaya

Asumsi: urutan deklarasi variabel adalah a, b, c

38 38

Reuse Indeks Var. Temporer

Agar indeks variabel temporer bisa digunakan ulang (reuse), yang berubah adalah semantic rule bagian operasi: penjumlahan, pengurangan, perkalian, pembagian, pangkat (bila ada), dst.

4/11/12

39 39 Sekolah Tinggi Teknik Surabaya

Operasi Perkalian Versi 2 : term '*'factor term


{ . . / typ e checker . / tabel ode. K add( new Tri l p et(Tri et. O V, pl M new O p erand( O perand. TEM P O R ER , ((Tem p A ttr)$1). tem p I ndex), new O p erand( O perand. TEM P O R ER , ((Tem p A ttr)$3). tem p I ndex))); tem p I ndex = ((Tem p A ttr)$1). tem pI ndex; $$ = new ExprA ttr( ((Tem pA ttr)$1). tem p I ndex, .. . ); Operasi lainnya } |. . . mirip

4/11/12

40 40

Sekolah Tinggi Teknik Surabaya

Tiga Golongan Operasi


Berdasarkan tipe data operandnya, operasi dibagi menjadi tiga golongan:

Operasi bilangan integer/bulat

mode integer

Operasi bilangan real/pecahan

mode real

Operasi string

mode string

4/11/12

Operasi Boolean menggunakan operasi bilangan integer; operand tipe data Boolean menggunakan mode
Sekolah Tinggi Teknik Surabaya

41 41

Tiga Golongan Operasi

Pembagian operasi menjadi tiga golongan dikarenakan ada pembedaan penanganan tiga golongan tersebut dalam kode mesin. Operasi bilangan integer diproses oleh CPU. Operasi bilangan real diproses oleh floating-point co-processor atau mathematic co-processor (kini terintegrasi dalam sebuah CPU). Operasi string diproses oleh CPU. Perintah assembly untuk operasi
42 42

4/11/12

Sekolah Tinggi Teknik Surabaya

Tiga Golongan Operasi

Setiap operand pada intermedate code mempunyai sebuah opcode untuk setiap golongan operasi.

Contoh: mov untuk operasi bilangan integer fmov untuk operasi bilangan real smov untuk operasi string

Juga ada opcode untuk konversi tipe data dari integer ke real, dan sebaliknya.

4/11/12

Contoh: itof untuk konversi dari integer ke real ftoi untuk konversi dari real ke integer

43 43

Sekolah Tinggi Teknik Surabaya

Triplet Stl. Penggolongan a = b * -c + b * -c

fm ov tem porer 1 dataoffset 1 (b) m ov tem porer 2 dataoffset 2 (c) um i nus tem porer 2 i tof tem porer 2 fm ul tem porer 1 tem porer 2 fm ov tem porer 2 dataoffset 1 (b) m ov tem porer 3 dataoffset 2 (c) um i nus tem porer 3 i tof tem porer 3 fm ul tem porer 2 tem porer 3 fadd tem porer 1 tem porer 2 fm ov dataoffset 0 (a) tem porer 1
Sekolah Tinggi Teknik Surabaya

a dan b = real, c = integer

4/11/12

44 44

Menentukan OpCode

Untuk menentukan opcode yang sesuai dengan golongan operasi, diperlukan type checker.

4/11/12

45 45 Sekolah Tinggi Teknik Surabaya

Konstanta Real Versi 2


factor : . . . | R EA LC O N ST { tab el ode. K add( new Tri l p et(Tri l FM O V , p et. new O p erand( O p erand. TEM P O R ER , + + tem p I ndex), new O p erand( O p erand. EA L, R tab el eal tam bah($1)))); R . $$ = new Exp rA ttr(tem p I ndex, S i b ol R EA L); m . } |. . . Perlakuan konstanta

4/11/12

Sekolah Tinggi Teknik Surabaya

string mirip dengan perlakuan konstanta real

46 46

Operasi Perkalian Versi 3 : term '*'factor term


{ i ti e1 = ((Tem p A ttr)$1). peD ata; nt p ti i ti e2 = ((Tem p A ttr)$3). p eD ata; nt p ti i (ti e1 = = ti e2) { f p p i (ti e1 = = S i b ol I TEG ER | f p m .N | ti e1 = = S i b ol R EA L) { p m . tab el ode. K add( new Tri l p et( (ti e1 = = S i b ol I TEG ER ) ? p m .N Tri l M O V : Tri l FM O V , p et. p et. new O p erand(O p erand. TEM P O R ER , ((Tem p A ttr)$1). tem p I ndex), new O p erand(O p erand. TEM P O R ER , ((Tem p A ttr)$3). tem p I ndex))); $$ = new Exp rA ttr( ((Tem p A ttr)$1). tem p I ndex, Operasi lainnya ti e1); p

4/11/12

47 47

Sekolah Tinggi Teknik Surabaya

mirip

Operasi Perkalian Versi 3 : term '*'factor term


{ .. . i (ti e1 != ti e2) { f p p i (ti e1 = = S i b ol R EA L & & f p m . ti e2 = = S i b ol I TEG ER ) { p m .N tab el ode. K add( new Tri l p et(Tri l I F, p et. TO new O p erand(O p erand. TEM P O R ER , ((Tem p A ttr)$1). tem p I ndex) ); tab el ode. K add( new Tri l p et(Tri l FM O V , p et. new O p erand(O p erand. TEM P O R ER , ((Tem p A ttr)$1). tem p I ndex), new O p erand(O p erand. TEM P O R ER , ((Tem p A ttr)$3). tem p I ndex))); $$ = new Exp rA ttr( Operasi lainnya ((Tem p A ttr)$1). tem p I ndex,

4/11/12

48 48

Sekolah Tinggi Teknik Surabaya

mirip