Anda di halaman 1dari 12

Pembangkitan Kode-Antara

Setelah melihat desaindari perser, tabel simbol dan strategi organisasi


penyimpanan, di bab ini kita akan mempelajari teknik pembangkitan kode.Ketika
kompiler mengkompile program dengan bahasa tingkattinggi.Hal ini menghasilkan
kode mesin yang ditujukan untuk beberapa prosesor.Walaupun demikian,banyak
waktu digunakan untukmendesain kompiler untuk menghasilkan keluaran-antara
(intermediate output) yang merepresentasikan masukan program di beberapa
bahasa hypothhetical/Struktur data.Misalnya representasi yang kita ketahuisebagai
kode-antara untuk menandai bahwa kode tersebut merepresentasikanantara
bahasa sumber dengan program bahasa mesin yang dituju.Kode-
antara menawarkan diri sebagai media kegunaan untukmembandingkan dengan
pembangkitan kode seara langsung. Sebagaimana yang disebutkan dibawah ini
!. Kode-antara lebih dekat dengan mesin yang dituju"yanng ditargertkan daripada
bahasa sumber.#leh karena itu, kode-antara lebih mudah untukdigunakan sebagai
pembangkitan kode.
$.%idak seperti bahasa mesin,kode-antara dapat dikatakan kurang lebih sama
denganmesin independen.Hal ini lemembuat kita lebih mudah untukpenargetan
ulang kompiler untuk berbagai jenis prosesor target yang berbeda.
&.Mengi'inkan berbagai maam proses optimasi berjalan di ata modelmesin
independen.
(.Seara khusus, pembentukan kode-antara dapat diimplementasikan lewat sintax-
directed translation ,hal ini berarti sejalan dengan parser yang dilakukan denagn
berbagai jenis reduksi dan jadi dapat dibungkus denagn proses parsingdenagn ara
pemberian argumen pada parser.
).! Bahasa-antara
%eknik reperesentasi dalam bahasa-antara dapat dikategorikan menjadi $ kategori
!.representasi-antara tingkat tinggi
$. representasi-antara tingkat rendah.
*epresentasi-antara tingkat tinggimenggambarkan struktur tingkat tinggi dari
sebuah program.+ontoh dari kategori ini adalah pohon sintaksyang dihasilkan oleh
parser.berikut ini ,itur ,itur pentingdari representasi ini
!.-ebih dekat dengan bahasa progra sehingga menjaga struktur program.
$.lebih mudah membangkitkan dari masukan program.
&.Walaupun begitu,proses optimasi kodetidak dapat seara langsung dilakukan, hal
ini karena masukan program tidak dimungkinkanuntuk memperoleh tingkat
pembagian kode dan proses optimasi lebih baik.
.i kategotri lain representasi tingkat rendah,sebaliknya menggambarka struktur
tingkat rendah sebuah program./itur yang penting dari representasi ini adalah
ebagai berikut0
!. -ebih dekat dengan mesin yang dituju.+ontonya *%-yang digunakan dalam
1++ dan pengkodean tiga-alamat, yang akan kita diskusikan nanti.
$.-ebih mudah membangkitakan kode terakhir dari representasi ini.
&.Walaupun begitu, pembangkitan dari representasi ini dari masukan program
memerlukan banyak usaha.Kita akan mendiskusikannya di bagian lain dari bab ini.
7.2 Penerbitan Desain Bahasa-antara
%iap desain bahasa memiliki memiliki tujuan tertentu berkorespondensi dengan ,itur
,itur yang dibutuhkan untuk direpresentasikan +ontohnya baha tingkat tinggi
menoba untuk mengandung kekuatan ekspresi.sehingga keperluan perhitungan
pengguna dapat seara singkat dan e,isien. Semantara itu pendesain bahasa
assembyberkorespondensi pada hardware yang tersedia dan peta instruksipada
operasi di atas beralaskan hardware.Sama seperti hal tersebut, bahasa-antara
memikiki sebuah desain yang menegaskan sebagai jembatan antara bahasa-antara
dan bahasa target.Hal hal dibawah ini adalah beberapa poin yang menyolok
mengenai bahasa-antara.
!.2erangkat operator di bahasa-antara harus ukupkaya untuk mnengi'inkan
bahasa sumber agar dapat diimplementasikan.
$.2erangkat keil operasidi bahasa-antara membuatkemudahan untuk penargetan
ulang.
&.#perasi kode-antara lebih dekat disewa bagi mesin khusus" arsitektur ,sehingga
lebih sulit dengan port.
(.2erangkat keil kode-antara mungkin memimpin untuk beberapa konstruksi
bahasa-antara.2enerapan ini lebih bekerja pada saat proses optimasi.
BOTTOM-UP EVALUATO!
Synthesi'ed attribute die3aluasi dengan metode bottom-up parsing.
Harga dari synthesi'ed attribute disimpan dalam stak ( e4tra ,ields )
2ada saat reduksi 0
Harga yang baru dihitung berdasarkan harga dari symbol yang sudah ada di
stak
5ntuk produksi 6 789 0
Sebelum reduksi dilakukan e3aluasi terhadap harga 7, 8 , dan 9.
L-ATT"BUTE
Synta4 direted de,inition adalah ber-si,at --attribute jika setiap attribute dari
produksi 67!7$......7n adalah synthe-si'ed atau inherited attribute dari 7j yang
tergantung hanya pada 0
!. 6ttribute dari simbol 7!,7$,...7j:! yang terletak disebelah kiri 7;
$. 6tribut <nherited dari 6
+ontoh 0
S-attribute de,inition bersi,at --attribute. Synta4 direted de,inition berikut tidak
bersi,at --attribute, karena atribut simbol = tergantung pada atribut simbol * yang
terletak disebelah kanannya
%*6>S-6%<#> S+H?M?S
Merupakan +onte4t /ree 1rammar dimana atribut tergabung dengan simbol-
simbol grammar dan semanti ation pada sisi kanan dari produksi
Semanti ation dituliskan diantara braes ( @ A )
+ontoh 0
rest B term @ print (CBD) A rest!
2arse tree dari produksi tersebut 0
rest
B term @ print (CBD) A rest!
+ontoh translation shemes yang merubah notasi in,i4 menjadi notasi post,i4
berikut 0
? %*
* addop % @ print (addop.le4eme) A *!
% num @print (num.3al)A
TOP-DO#! T"A!$LATO!
?liminasi le,t reursion untuk mentrans-,ormasi translation shemes dengan
attributes sintetis.
%ranslation shemes dengan grammar le,t reursi3e sebagai berikut 0
10 ? ?! B % @ ?.3al 0E ?!.3al B %.3alA
? ?! : % @ ?.3al 0E ?!.3al - %.3alA
? % @ ?.3al 0E %.3alA
% (?) @ %.3al 0E ?.3alA
% n%m @ %.3al 0E n%m.3alA
Fila input suatu ekspresi 0 G-HB$ maka translation shemes adalah 0 GH-$B
<nput 1rammar %ranslation Sheme %rans,ormasi
G
H
-
$
B
%num
%num
??!B%
%num
??!B%
*!.i0 E %.3al E G
*$.i 0E %.3al E H
*.i E *!.i : *$.i E (
*!.i0 E %.3al E $
*.i E *.i : *!.i E I
*.s E *.i
*.s E *.i
Seara lengkap trans,ormasi dari grammar diatas menjadi 0
? % @ *.i 0E %.3al A
* @ ?.3al 0E %.3al A
* B
% @ *!.i 0E *.i B %.3al A
* @ *.s 0E *!.s A
* -
% @ *!.i 0E *.i - %.3al A
* @ *.s 0E *!.s A
* @ *.s 0E *.i A
% (
?
) @ %.3al 0E ?.3al A
% n%m @ %.3al 0E ?.3al A
5rutan e3aluasi untuk ekspresi diatas adalah 0
Mengubah synta4 direted de,inition menjadi translation sheme 0
2rodution Semanti *ules
? ?! B %
? ?! - %
? %
% (?)
% id
% n%m
?.nptr 0E mknode (CBD,?!.nptr,%.nptr)
?.nptr 0E mknode (C-D,?!.nptr,%.nptr)
?.nptr 0E %.nptr
%.nptr 0E ?.nptr
%.nptr 0E mklea, (id& id.entry)
%.nptr 0E mklea, (n%m& n%m.3al)
%ranslation sheme untuk symbol ? 0
??! B % @ ?.nptr 0E mknode (C BD, ?!. nptr, %.nptr )A
??! - % @ ? .nptr 0E mknode (C -D ?!.nptr, %.nptr )A
?% @ ?.nptr 0E %.nptr A
n%m .val = 9
T .val = 9 R.i = 9
n%m .val = 5
- T .val = 5 R.i = 4
n%m .val = 2
+ T .val = 2 R.i = 6

?
%rans,ormasi %ranslation sheme untuk meng-konstruksi pohon sintaks menjadi 0
? % @ *.i 0E %.nptr A
* @ ?.nptr0E *.s A
* B
% @ *!.i 0E mknode (CBD,*.i, %.nptr)A
*! @ *.s 0E *!.sA
* -
% @ *!.i 0E mknode (C-D,*.i, %.nptr)A
*! @ *.s 0E *!.sA
* @ *.s 0E *.i A
% (
?
) @ %.nptr 0E ?.nptrA
% id @ %.nptr 0E mklea, (id& id.entry) A
% n%m @%.nptr 0E mklea, (n%m& n%m.3al) A
2roses pembentukan synta4 tree dari translation sheme tersebut untuk input a - (
B
id n%m (
- id
B
i * s

nptr %
id
B
* nptr i %
n%m
-
* nptr %
id
?
to entry ,or a
to entry ,or
T'PE ()E(K!*
Kompiler harus memeriksa apakah soure program mengikuti kon3ensi sintaksis
atau semantik dari soure languange. 2emeriksaan ini disebut Stati +heking
untuk meyakinkan bahwa kesalahan programming akan dideteksi dan dilaporkan.
+ontoh stati heking adalah 0
!. %ype heks
$. /low-o,-ontrol heks
&. 5niJueness heks
(. >ame-related heks
H6--H6- 2?>%<>1
Feberapa kompiler 26S+6- mengga-bungkan static-checking dan intere-
diate code generation dengan parsing
5ntuk bahasa yang konstruksinya kompleks, seperti 6da, type-heking
biasanya dilakukan terpisah, antara parsing dan intermediate ode generation
Fahasa 6.6 seara eksplisit meng-ijinkan programmer untuk overload operator
dimana sangat banyak bahasa lainnya yang o3erload operator aritmatika
dengan type numerik yang berbeda (integer dan real)
+onstraint o3erload operator diek dalam one-pass parser tidak meng-ijinkan
terlalu banyak jenis untuk ,orward re,erensi simbol
2ada Fahasa + dan /ortran dengan kemudahan yang dimilikinya, bahwa type
heking tidak mungkin dalam one-pass parser
2osisi type heker dalam Kompiler 0
%ype +heker memeriksa apakah tipe dari suatu konstruksi ook dengan
konteksnya. Misalnya, built-in operator arithmeti mod dalam 2asal memer-lukan
operand integer, sehingga type heker harus memeriksa bahwa ope-rand dari mod
mempunyai type integer.
T'PE $'$TEM
%82? ?KS2*?S<
%ype ?4pression merupakan type dasar yang menggunakan operator disebut type
constr!ctor.
2arser %ype
heker
<ntemediate
+ode
1enerator
token
stream
syntax
tree
syntax
tree
intermediate
representation
.e,inisi %ype ?4pression 0
!. Fasi type 0 boolean, har, integer, real dan Fasi type khusus typeKerror (beri
signal selama type heking)
$. %ype >ame
&. %ype +onstrutor, yaitu 0
6rray
2rodut
*eord
2ointer
/untion
(. %ype Lariable
%82? S%6%<+ .6> .8>6M<+
"tatic #hecking 0 +heking yang dilaku-kan kompiler saat program dijalan-kan dan
dihentikan seara dinamis
$ynaic #hecking 0 +heking yang di-lakukan oleh target program
$PE$+KA$ T'PE ()E(KE" $EDE")A!A
+ontoh type heker sederhana dengan grammar untuk soure language
10 2 . M ?
. . M . N id 0 %
% har N integer N array N OnumP o, % N %
? literal N num N id N ? mod ? N ?O?P N ?
+ontoh ,ragmen program yang dapat dihasilkan berdasarkan grammar diatas
Key 0 integerM
Key mod !GGG
Spesi,ikasi type heking yang dilaku-kan pada bahasa meliputi 0
?4pressions, statements, ,untions
?ki3alensi struktur, nama type ekspresi
+yle dalam representasi type
T'PE (O!VE"$O!
Seara eksplisit bahwa representasi, instruksi mesin dan operasi dari integer dan
real berbeda oleh karena itu ompiler harus mengkon3ersi salah satu dari type
operand tersebut untuk menjamin bahwa kedua operand bertipe sama.
%ype heking dalam kompiler dapat dipakai untuk menyisipkan operasi kon3ersi
kedalam intermediate repre-sentation dari soure program.
+ontoh 0
Suatu ekspresi adalah 4 B i,
dimana 0 4 bertipe real dan
i bertipe integer.
2ost,i4 notation untuk 4 B i adalah 0
4 i inttoreal realB
dimana operator inttoreal meng-kon3ersikan i dari integer ke real, kemudian realB
melakukan operasi penjumlahan.
OVE"LOAD!* +U!(TO! DA! OPE"ATO"
%verloaded "y&ol 0
Simbol yang mempunyai arti lain dan tergantung daripada konteksnya.
.alam matematika, misal 0 6BF yang mana operator penjumlahan (B) adalah
o3erloaded, sebab berbeda arti dengan 6 dan F
.alam '$', tanda kurung ( ) adalah o3erloaded.
S?% K?M5>1K<>6> %82?
+ontoh 0
.alam '$', standar interpretasi opera-tor Q adalah ,untion dari sepasang integer.
Kadang-kadang sub-e4pression mempunyai beberapa kemungkinan tipe. .alam
6.6, konteks harus memberi in,ormasi yang ukup untuk mempersempit pilihan
menjadi tipe tunggal.
#perator Q dapat di-overload dengan menambah deklarasi sebagai berikut 0
,untion RQS (i,j0integer) return omple4M
,untion RQS (4,y0omple4) return omple4M
Setelah deklarasi diatas kemungkinan tipe untuk Q adalah 0
integer 4 integer integer
integer 4 integer omple4
omple4 4 omple4 omple4
Misalkan bilangan $, &, H tipenya mungkin hanya integer, subekspresi dari &QH
dapat berupa integer atau kompleks, tergantung kepada konteksnya.
;adi untuk ekspresi $Q(&QH), maka &QH harus bertipe integer karena Q meng-ambil
sepasang integer atau sepasang bilangan kompleks sebagai argumen.
Sebaliknya, &QH harus bertipe kompleks jika ekspresi lengkapnya adalah (&QH)Q9
dan 9 dideklarasikan sebagai kompleks.
+atatan 0 disamping set kemungkinan type ekspresi juga penyempitan
kemungkinan set kemungkinan type.
POL'MO"P)( +U!(TO!
Suatu prosedur biasanya membolehkan statement dalam body-nya dieksekusi
dengan argumen bertipe tetap.
Suatu ,o-.mor,hi/ ,ro/ed%re dapat dipanggil (statement dalam body-nya dapat
dieksekusi) dengan argumen yang berbeda tipenya.
<stilah RpolymorphiS juga dapat dite-rapkan untuk sepenggal ode yang dapat
dieksekusi dengan argument yang berbeda tipenya.
+ontoh 0
+ re,erene manual menyatakan ten-tang pointer operator & 0
R;ika tipe operand adalah 4, maka hasilnya akan bertipe ,ointer to 0S.
Karena beberapa tipe data bisa menggantikan 4, maka operator & dalam + bersi,at
polymorphi.
.idalam bahasa 6da, RgeneriS ,untion bersi,at polymorphi. >amun polimor,is
dalam 6.6 terbatas. Karena istilah RgeneriS juga digunakan untuk o3erloaded
,untion dan oerion dari argument suatu ,untion.
K?>626 /5>1S< 2#-<M#*2<ST

2olymorphi /untion sangat menarik karena memberi ,asilitas untuk meng-
implementasikan algoritma yang me-manipulasi struktur data, tanpa mem-
perhatikan tipe elemen dalam struktur data tersebut.
+ontoh 0
.alam 2asal, program untuk menen-tukan panjang dari list berelemen integer
adalah sebagai berikut 0
type link E UellM
ell E reord
in,o 0 integerM
ne4t 0 linkM
endM
,untion length(lptr 0 link) 0 integerM
3ar len 0 integerM
begin
len 0E VM
while lptr WX nil do
begin
len 0E len B !M
lptr 0E lptr.ne4tM
endM
length 0E lenM
endM
.alam bahasa M- 0
,un length(lptr) E
i, null(lptr) then V
else length(tl(lptr)) B !M
maka 0
length(ORsunS,SmonS,StueSP)M
length(O!V,G,YP)M
adalah &
%516S 0
Fuat ,ragmen program yang objet oriented (misalnya 0 +BB, ;a3a, dan lain-lain)
6mati perilaku disain program tersebut
Ferikan komentar anda tentang si,at polymorphisnya.