Anda di halaman 1dari 154

Dayan S.

Skom

Mengetahui Penerapan konsep ilmu


komputer pada perilaku komputer yaitu
algoritma, arsitektur komputer, stuktur data
maupun penerapan teori bahasa dan
automata

Compiler adalah merupakan konstruksi inti


dari ilmu komputer

Practice and principles of Compiler building with C, Henk


Alblas, Albert ymeyer, Prentice Hall, !""#

$ntroduction to %he theory of computation, Michael sipser,


P&S publishing Company, !""'

%he (ssence of Compilers, )obin Hunter,Prentice Hal (urope,


!"""

Modern Compiler Design, Dick *rune, Henri (. +al, (t all, ,ohn


&iley - Son, .///

Pendahuluan0 arti dari 1ompilasi

%ranslator0 Compiler dan interpreter

+ahasa Pemrograman

Pembuatan Compiler

1onsep bahasa dan otasi

Hirarki Comsky

Aturan Produksi

Diagram state

otasi +2

Diagram Synta3

1ualitas Compiler

+eberapa translator

Struktur Compiler

4e3ical Analysis

Analysis Synta3

Analysis Semantics

(rror Handling

5ptimation

%abel informasi

Teknik 0
6 Metode atau Cara

Kompilasi 0
6 Proses mengabungkan serta menter7ermahkan
sesuatu 8source program9 men7adi bentuk lain

Compile 0
6 %o translate a program written in a high:le;el
programming language into machine
language.
Translator 0

Adalah suatu program dimana mengambil


input sebuah program yang ditulis pada satu
bahasa program 8source language9 ke
bahasa lain 8%he ob7ect on target language9

,ika source language adalah high le;el


language, seperti cobol, pascal, fortran
maka ob7ect language adalah low:le;el
language atau mesin language. %ranslator
seperti ini disebut C5MP$4()

Dengan bahasa mesin adalah bahasa bentuk bahasa


terendah komputer, berhubungan langsung dengan
bagian bagian komputer seperti bits, register -
sangat primiti;e

,awaban atas pertanyaan ini akan membingungkan


bagi programmer yang membuat program dengan
bahasa mesin.

+ahasa mesin adalah tidak lebih dari urutan / dan !

$nstruksi dalam bahasa mesin bisa sa7a dibentuk


men7adi micro-code, semacam prosedur dalam
bahasa mesin

+agaimana dengan orang tidak mengerti bahasa


mesin
Ada Beberapa Translator
Ada Beberapa Translator
1. Assembler
Source code adalah bahasa assembly, Object code
adalah bahasa mesin
2. Compiler
Source code adalah bahasa tingkat tinggi, object code
adalah bahasa mesin atau bahasa assembly. Source
code dan data diproses berbeda
<.asm
<.asm
Assembler
Assembler
5b7ect code
<.e3e =<.com
5b7ect code
<.e3e =<.com
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
Source code
Translator
Translator
Hasil
Hasil
Data
Data
Hasil
Hasil
Source
code
Source
code
Execution
Execution
Data
Data
Compiler
Compiler
Object Code
Object Code
Translator : Compiler & Interpreter Translator : Compiler & Interpreter
OBECT
!"O#"$%
Source
Program
Compiler
ERROR
MESSAGES

Compiler bisa menangkap berbagai kesalahan dalam !


program kode sumber secara sekaligus. 1alau $nterpreter
cuma bisa menangkap beberapa kesalahan pada ! baris
kode sumber pada suatu saat

+iasanya program yang dihasilkan compiler lebih cepat


dari waktu pelaksanaan program dengan interpreter.

1alau compiler menghasilkan kode antara 8misal ob7ect


code9 dan harus digabungkan = dilink men7adi bentuk
yang dapat di7alankan mesin = komputer 8e3ecutable9.
1alau $nterpreter biasanya tidak menghasilkan kode
antara.

1alau hendak men7alankan program hasil kompilasi bisa


dilakukan tanpa kode sumber. 1alau interpreter butuh
kode sumber.

1alau dengan kompiler, maka pembuatan kode yang bisa


di7alankan mesin dilakukan dalam . tahap terpisah, yaitu
parsing = pembuatan kode ob7ek dan linking = penggabungan
kode ob7ek dengan library. 1alau interpreter tidak ada proses
terpisah.

1alau compiler membutuhkan linker untuk menggabungkan


kode ob7ek dengan berbagai macam library demi
menghasilkan suatu kode yang bisa di7alankan oleh mesin.
1alau interpreter tidak butuh linker.

$nterpreter cocok untuk membuat = mengu7i coba modul =


sub:routine = program:program kecil. 1alau compiler agak
repot karena untuk mengubah suatu modul = kode ob7ek
kecil, maka harus dilakukan proses linking = penggabungan
kembali semua ob7ek dengan library yang diperlukan.

Pada kompiler bisa dilakukan optimisasi = peningkatan


kwalitas kode yang bisa di7alankan. Ada yang dioptimasi
supaya lebih cepat, ada yang supaya lebih kecil, ada yang
dioptimasi untuk sistem dengan banyak processor. 1alau
interpreter susah = tidak bisa dioptimasikan.
1. analisa 0 program sumber
dipecah:pecah dan dibentuk
men7adi bentuk antara 8inter-
mediate representation9
2. sintesa 0 membangun
program sasaran yang
diinginkan dari bentuk antara

membaca program sumber, karakter demi


karakter. Sederetan 8satu atau lebih9 karakter
dikelompokkan men7adi satu kesatuan
mengacu kepada pola kesatuan kelompok
karakter 8token9 yang ditentukan dalam
bahasa sumber. 1elompok 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 8unidentifed token9

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 8sintax error9. Secara
logika deretan token yang bersesuaian
dengan sintaks tertentu akan dinyatakan
sebagai pohon parsing 8parse tree9

memeriksa token dan ekspresi dari batasan:


batasan yang ditetapkan. +atasan:batasan
tersebut misalnya 0
a. pan7ang maksimum token identifer adalah
> karakter,
b. pan7ang maksimum ekspresi tunggal
adalah >/ karakter,
c. nilai bilangan bulat adalah :?.'#> s=d
?.'#',
d. operasi aritmatika harus melibatkan
operan:operan yang bertipe sama

membangkitkan kode antara 8intermediate code9


berdasar:kan pohon parsing. Pohon parse
selan7utnya diter7emahkan oleh suatu pener7emah
yang dinamakan penerjemah berdasarkan sintak
8syntax-directed translator9. Hasil pener7emahan ini
biasanya merupakan perintah tiga alamat 8three-
address code9 yang merupakan representasi
program untuk suatu mesin abstrak. Perintah tiga
alamat bisa berbentuk quadruples 8op, arg1, arg2,
result9, tripels 8op, arg1, arg29. (kspresi dengan
satu argumen dinyatakan dengan menetapkan arg2
dengan : 8strip, dash9

melakukan optimasi 8penghematan


space dan waktu komputasi9, 7ika
mungkin, terhadap kode antara

membangkitkan kode dalam bahasa


target tertentu 8misalnya bahasa
mesin9
+ahasa mesin +ahasa mesin

Sangat sukar dan sangat sedikit


kemungkinannya untuk membuat
compiler dengan bahasa ini, karena
manusia susah mempela7ari bahasa
mesin,

Sangat tergantung pada mesin,

+ahasa Mesin kemungkinan


digunakan pada saat pembuatan
Assembler
Assembly
Assembly

Hasil dari program mempunyai @kuran


yang relatif kecil

Sulit dimengerti karena


statement=perintahnya singkat:singkat,
butuh usaha yang besar untuk membuat

2asilitas yang dimiliki terbatas


+ahasa %ingkat %inggi 8high le;el language9 +ahasa %ingkat %inggi 8high le;el language9

4ebih mudah dipela7ari

2asilitas yang dimiliki lebih baik 8banyak9

Memiliki ukuran yang relatif besar, misal membuat


compiler pascal dengan menggunakan bahasa C

@ntuk mesin yang berbeda perlu dikembangkan


tahapan:tahapan tambahan.

Misal membuat compiler C pada Dos bedasarkan


compiler C pada uni3
+ootStrap
+ootStrap

@ntuk membangun sesuatu yang


besar, dibangun=dibuat dulu bagian
intinya 8niklaus &irth : saat membuat
pascal compiler9

P5 dibuat dengan assembly,

P! dibuat dari P/, dan

P. dibuat dari P!, 7adi compiler untuk bahasa P dapat dibuat


tidak harus dengan menggunakan assembly secara
keseluruhan
Po
Po
P1
P2
Contoh dari source program
ke dalam kode mesin
Source code Assembl !anguage Mac"ine language

IF COUN !"# Compare $ to % Compare &'(( )**&
+OO ,ON- I. e/ual go to C I. ! go to )&**&
-0S- +o to , +o to )&&'&
+OO $+$IN
-N,IF


Actual mac"ine code
"##"#"#"##"#"###"#"#"##
"#"#"#"##"#"#"##"##"#"#
"#"##"#"#"###"#"##"##"#

+ahasa adalah kumpulan kalimat. 1alimat adalah


rangkaian kata. 1ata adalah unit terkecil komponen
bahasa yang tidak bisa dipisah:pisahkan lagi.

1alimat:kalimat 0 ASeekor kucing memakan seekor


tikus.B dan Audi menendang sebuah bola.B adalah
dua contoh kalimat lengkap +ahasa $ndonesia. A! cat
eats a mouseB dan Audi kick a ball.B adalah dua
contoh kalimat lengkap +ahasa $nggeris. Ai" a2 # $.%
then b2 &' a2(a)*B dan A"or i &' start to fnish do
!+i, &' +i,-sin.i-pi/10.%1.B adalah dua contoh kalimat
lengkap dalam +ahasa Pemrograman Pascal.

Dalam bahasa pemrograman kalimat lebih dikenal


sebagai ekspresi sedangkan kata sebagai token

+ahasa yang lebih dikenal oleh manusia, maksudnya adalah


statement yang digunakan menggunakan bahasa yang
dipakai oleh manusia 8inggris9,

+ahasa pemrograman dideCnisikan dengan menentukan


bentuk programnya 8sintak9 dan arti programnya 8semantik9

Memberikan fasilitas yang lebih banyak, seperti struktur


kontrol program yang terstruktur, blok:blok serta prosedur
dan fungsi:fungsi

Progam mudah untuk di koreksi 8debug9

%idak tergantung pada salah satu mesin

1ontrol struktur seperti 0 kondisi 8if .. %hen.. (lse 9,


perulangan 82or, while 9, Struktur blok 8begin.. (nd D .. E 9

1onstruksi yang diturunkan dari


bahasa alami, karena bahasa alami
dapat digunakan sebagai panduan
untuk perancangan sintaks

Matematika, misal untuk


perancangan operasi aritmatika

+ahasa pemrograman yang sudah


ada.

1omunikasi dengan manusia

Pencegahan dan deteksi kesalahan

@sability

(fektiCtas pemrograman

Compilability 8mengurangi
kompleksitas,mis0penggunaan
bracket9

(Csiensi dengan meminimalisir


ketidakcocokan antara hardware
dengan bahasa

Machine independent

Simplicity 0penyederhanaan
komponen bahasa program

5rthogonality 0 kumpulan
primiti;e yang dikombinasikan
dengan berbagai cara dalam
membangun kontrol dan struktur
data dalam bahasa program
Metode pengurutan e;aluasi dalam
ekspresi 0

(3plicit +racketing

5perator binding
+inding adalah asosiasi antara atribut
dan entity atau antara operasi dan
simbol.
+inding time adalah waktu yang
dialokasikan untuk menyatukan
;ariable dengan nilainya.
(mpat aspek dalam struktur
data

Deklarasi data

%ipe data yang tersedia

Alokasi storage

4ingkup ;ariabel

2ormat free
langsung ditampilkan sehingga
mudah bagi user untuk memeriksa
kebenaran program. Contoh pada
F+.

2ormatted
output ditampilkan secara terformat,
seperti di C 0 printf89, delphi=F+ 0
format89
Anda akan menciptakan sebuah
bahasa program, coba sebutkan
urutan proses yang harus
ditentukan/skenario yang dijalani
untuk menghasilkan bahasa
pemrograman impian Anda tersebut
!
!. %entukan apa yang diinginkan.
.. %entukan feature yang mungkin
?. %entukan desain dan sesuaikan dengan
featurenya
G. %entukan rincian, parsing, dan error checking.
H. %uliskan user manual dan help.
#. (;aluasilah, 7ika salah mulai lagi dari langkah ?.
'. ,ika sudah benar, optimisasilah dan u7i segala
kemungkinan.
>. Cobakan kepada pengguna, tunggu reaksinya.
". Perbaiki bug dan mulai ;ersi baru.

2ree Compiler Construction %ools


&ttp:''((()t&e*reecountr+)com'de,elopercit+'compiler)&tml

%ASS1A2. +ahasa %ASS1A2 ini merupakan subset dari ,a;a. Dapat disusun
suatu program ke byte code yang dapat di7alankan di ,a;a Firtual Machine
8,FM9.
Pada site tersebut 7uga tersedia informasi materi kuliah dengan 4(I, JACC
&ttp:''r(-)cs)uni.sb)de'/martin'CO%!'TK'

*(%4(. *entle ini merupakan perangkat bantu 8toolkit9 modern untuk


menulis compiler dan mengimplemntasikannya pada bahasa tertentu.
Perangkat bantu ini mendukung semua proses translasi, dari deCnisi tree
sintaks abstrak, pater matching, smart tra;ersal dan lain sebagainya.
%oolkit ini telah digunakan secara luas di riest dan industri
.&ttp:''((()0rst)1md)de'1entle'

(4$. Merupakan suatu lingkungan pemrograman yang memungkinkan


membuat suatu implementasi bahasa pemrograman secara lengkap dari
suatu sepsiCkasi. Perangkat bantu ini menangani struktural analisis,
analisis nama, type, ;alue dlsb dan akan menghasilkan kode C.
&ttp:''((()cs)colorado)edu'/eliuser'
Made by 0
%errence
Parr
Kalmost by
himselfL
2or !H Jears
A#$!R, $Nother ool .or 0anguage 1ecognition, is a language tool that pro2ides a
.rame3ork .or constructing recogni4ers, interpreters, compilers, and translators .rom
grammatical descriptions containing actions in a 2ariety o. target languages
"5 6
7
%"at&s
a Surprise'
op opic
Skripsi 3ith
Compiler techni/ue

%eknik 1ompilasi merupakan kelan7utan dari konsep:konsep


yang telah kita pela7ari dalam teori bahasa dan automata

%hn H#:H" oam chomsky melakukan penggolongan tingkatan


dalam bahasa, yaitu men7adi G class

Penggolongan tingkatan itu disebut dengan hirarki Comsky

!"H" +ackus memperkenalkan notasi formal baru untuk


synta3 bahasa yang lebih spesiCk

Peter our 8!"#/9 mere;isi metode dari synta3. Sekarang


dikenal dengan +2 8backus our 2orm9

%ata bahasa 8grammar9 adalah sekumpulan


dari himpunan ;ariabel:;ariabel, simbol:
simbol terminal, simbol non:terminal, simbol
awal yang dibatasi oleh aturan:aturan
produksi

Aturan produksi adalah pusat dari tata


bahasa yang menspesiCkasikan bagaimana
suatu tata bahasa melakukan transformasi
suatu string ke bentuk lainnya

Synta3 0 suatu aturan yang memberitahu


apakah sesuatu kalimat 8string9 adalah
;alid dalam program atau tidak

Semantic 0 suatu aturan:aturan yang


memberikan arti kepada program
8isal 9
$da mesin penjual permen yang
8emuat aturan) sbb 9
6arga :ermen 1p.)5
8esin tsb dpt menerima koin
1p.5 ;n<,
1p."# ;d<
1p.)5 ;/<
= ! tombol utk mengeluarkan
permen.
>emungkinan) yang
erjadi diperlihatkan gambar 9
FS$ State ,iagram nya adalah 9
:enggolongan Chomsky
(a"asa Mesin Automata Aturan Produ)si
1onsep dan otasi bahasa

menyatakan simbol M simbol yang


berada di ruas kiri aturan produksi

menyatakan simbol M simbol yang


berada di ruas kanan aturan produksi

Simbol:simbol terdiri dari simbol


terminal dan non terminal=;ariabel
8masih bisa diturunkan lagi9

Simbol terminal biasanya dinyatakan


dengan huruf kecil, sementara non
terminal dengan huruf besar

Tipe O = @nrestricted0 %idak Ada batasan pada aturan produksi


Abc De

Tipe 2 = Conte3t sensiti;e0 Pan7ang string ruas kiri harus lebih kecil
atau sama dengan ruas kanan
Ab De2
CD e2

Tipe 3 = Conte3t free grammar0 )uas kiri haruslah tepat satu simbol
;ariable
+ CDe2g
D +cDe

Tipe 4 = )egular0 )uas kanan hanya memiliki maksimal ! simbol non


terminal dan diletakkan paling kanan sendiri
A e
A efg
A efgH
C D

Simbol ( tidak boleh


berada pada ruas kiri
misal ( Abd

Aturan produksi yang ruas


kirinya hanya memuat
simbol terminal sa7a
misal 0 a bd atau ab
bd
Hirarki Comsky
)egular
)egular
Conte3t free
Conte3t Sensiti;e
@nrestricted

KprogramL BE#I5 KStatement:listL E5D

KStatement:listL KstatementL N KstatementL6


Kstatement:listL

KstatementL K;arL :7 Ke3pressionL

K(3pressionL KtermL N KtermLKop!L Ke3pressionL

KtermL KfactorL N KfactorL Kop.L KtermL

KfactorL K;arL N KconstantL

K;arL $NBN O.N 8

Kop!L P N : N Q

Kop.L 9 N < N =

KconstantL KrealRnumberL N KintegerRpartL

KrealRnumberL KintegerRpartL . KfractionL

KintegerRpartL KdigitL N KintegerRpartL K digitL

KfractionL KdigitL N KdigitL KfractionL

KdigitL /N!NO.N"
+egin
A 0Q !S
+ 0Q A P .
(D

Digunakan untuk mendapatkan


token, mempermudah melakukan
analisis le3ical

Token adalah simbol terminal dari


teori bahasa dan automata
S
I*
I#$
P!+S
MI#+S
,
-
"uru.
*igit
/uru.0 *igit
*igit (lan)
Contoh : suatu tata bahasa memiliki himpunan simbol
terminal/token berikut (ID, PLUS, MINUS, dan INT
token ID untuk karakter huruf a-z, 0-9, token INT untuk digit, token
PLUS untuk Penjumlahan dan token MINUS untuk Pengurangan

Aturan Produksi bisa dinyatakan dengan notasi +2

+2 menggunakan abstraksi untuk struktur synta3


::7 sama identik dengan simbol
: sama dengan atau
; < pengapit simbol non terminal
= > Pengulangan dari / sampai n kali
Misalkan aturan produksi sbb0
( % N %P( N %:(
% a
otasi +2nya adalah
( 00Q K%L N K%L P K(L N K%L : K(L
% 00Q a

Alat bantu 8tools9 dalam pembuatan parser= analisis


sintaksis

Menggunakan simbol persegi pan7ang untuk non terminal

4ingkaran untuk simbol terminal


Misalnya
( % N %P( N %:(
$
,
-
E
%NF9 ?%lock@ 99! %-+IN ?statement@ A S-8ICO0 ?statement@B
-N,
(EGI#
Statement
E#*
1

&aktu yang dibutuhkan untuk kompilasiS


tergantung dari

Algoritma compiler

Pembuat 8compilator9 Compiler itu sendiri

1ualitas dari obyek program yang dihasilkan

@kuran yang dihasilkan

2asilitas:fasilitas $ntegrasi yang lainnya

$D( 8integrated De;elopment (n;ironment9


Struktur COMPILER
Struktur COMPILER
S
o
u
rc
e
p
ro
1
ra
m
S
o
u
rc
e
p
ro
1
ra
m
?exical $nal+sis
@scannerA
S
+
n
ta
x
$
n
a
l+
s
is
@p
a
rs
e
r
A
In
t
e
r
m
e
d
ia
t
e
c
o
d
e
Code O
ptim
iBation
C
o
d
e
#
e
n
e
r
a
t
io
n
Object code
Object code

4e3ical AnalyTer Q scanner, Synta3 AnalyTer, dan $ntermediate


Code merupakan fungsi Analisis dalam compiler, yang bertugas
mendekomposisi program sumber men7adi bagian:bagian kecil

Code generation dan Code optimiTation adalah merupakan fungsi


synthesis yang berfungsi melakukan pembangkitan = pembuatan
dan optimasi program 8ob7ect program9

Scanner adalah mengelompok:an program asal=sumber men7adi


token

Parser 8mengurai9 bertugas memeriksa kebenaran dan urutan


dari token:token yang terbentuk oleh scanner

MengidentiCkasikan semua besaran yang membuat suatu bahasa

Mentransformasikan ke token:token

Menentukan 7enis dari token:token

Menangani kesalahan

Menangani tabel simbol

Scanner, didesign untuk mengenali : keyword, operator, identiCer

%oken 0 separates characters of the source language into group that


logically belong together

Misalnya 0 konstanta, nama ;ariabel ataupun operator dan delimiter


8atau sering disebut men7adi besaran le3ical9

$dentiCer dapat berupa keyword atau nama kunci,


seperti $2..(4S(, +(*$..(D 8pada Pascal9, $%(*()
8pascal9, $%, 245A% 8+hs C9

1onstanta 0 +esaran yang berupa bilangan bulat


8integer9, bilangan pecahan 8Uoat=)eal9, boolean
8true=false9, karakter, string dan sebagainya

5peratorS 5perator arithmatika 8 P : < = 9, operator


logika 8 K Q L 9

DelimiterS +erguna sebagai pemisah=pembatas,


seperti kurung:buka, kurung :tutup, titik, koma, titik:
dua, titik:koma, white:space

&hite Space0 pemisah yang diabaikan oleh program,


seperti enter, spasi, ganti baris, akhir Cle
Leical Anal!sis " Contoh
Leical Anal!sis " Contoh

Conto" 12
ada urutan karakter yang disebut dengan statement
.a"ren"eit 23 32 , celcius 4 1.50
Ma)a a)an diter6ema")an )edalam to)en-to)en seperti diba7a" ini
identi.ier .ahrenheit
operator 9!
integer &)
operator penjumlahan C
Identi.ier celcius
operator perkalian D
real E .loat ".*
Leical Anal!sis " Contoh #
Leical Anal!sis " Contoh #

Setiap bentuk dari token di representasi sebagai angka dalam


bentuk internal, dan angkanya adalah unik

Misalnya nilai " untuk 2ariabel, ) untuk konstanta, & untuk label
dan ' untuk operator, dst

Contoh instruksi 9

Kondisi : IF A > B THEN C = DF

8aka scanner akan mentrans.ormasikan kedalam token-token,


sbb9
Lexical Analysis - Contoh 2

8ondisi &

2 )G

I9 )#

A "

: "5

( "

$/E# )"

C "

* "

1 )(
oken-token ini sebagai inputan untuk syntax Analyser , token-token
ini bisa berbentuk pasangan item. ,imana Item pertama menunjukkan alamat
atau lokasi dari token pada tabel simbol. Item kedua adalah representasi
internal dari token. Semua token direpresentasikan dengan in.ormasi yang
panjangnya tetap ;konstan<, suatu alamat ;address atau pointer< dan sebuah
integer ;bilangan bulat<

Pengelompokan token:token kedalam class synta3


8bentuk synta39, seperti procedure, Statement dan
e3pression

*rammar 0 sekumpulan aturan:aturan, untuk


mendeCnisikan bahasa sumber

*rammar dipakai oleh synta3 analyser untuk


menentukan struktur dari program sumber

Proses pen:deteksian:nya 8pengenalan token9


disebut dengan parsing

Maka Synta3 analyser sering disebut


dengan parser

Pohon sintaks yang dihasilkan digunakan


untuk semantics analyser yang bertugas
untuk menentukan AmaksudB dari program
sumber.

Misalnya operator pen7umlahan maka


semantics analyser akan mengambil aksi
apa yang harus dilakukan
Contoh
Contoh

erdapat statement 9 ; A , ( < 4 ; C , * <

$kan menghasilkan bentuk sintaksis9


=.actor:0 =term: > =e?pression:

Pohon sintaks= Pohon penurunan


8synta3 tree= parse tree9 beguna
untuk menggambarkan bagaimana
memperoleh suatu string dengan cara
menurunkan simbol:simbol ;ariable
men7adi simbol:simbol terminal.

Misalnya0 S A+
A aA N a
+ b+ N +
Penurunan untuk menhasilkan string
aabbb
Parsing atau Proses
Parsing atau Proses
Penurunan
Penurunan
:arsing dapat dilakukan dengan cara 9

:enurunan terkiri ;leftmost derivation< 9 simbol 2ariable


yang paling kiri diturunkan ;tuntas< dahulu

:enurunan terkanan ;rightmost derivation<9 2ariable


yang paling kanan diturunkan ;tuntas< dahulu

8isalkan terdapat ingin dihasilkan string aabbaa dari


conteHt .ree language9 S a $S I a,
$ Sb$ I ba
Penurunan kiri 0
S QL aAS
QL aSbAS
QL aabAS
QL aaabbaS
QL aabbaa
:enurunan kanan 9
S !@ a$S
!@ a$a
!@ aSb$a
!@ aSbbaa
!@ aabbaa
%isaln+a: S :L a+ N bA
A :L a N aS NbAA
+ :L b N bS N a++
Penurunan untuk string aaabbabba
Dalam hal ini perlu untuk melakukan
percobaan pemilihan aturan produksi
yang bisa mendapatkan solusi
Perlu memperhatikan ? hal0

&aktu (ksekusi

Penanganan 1esalahan

Penanganan 1ode
!arsin1 di1olon1kan men7adi0

Top-Down
Penelusuran dari root ke lea" atau dari simbol awal ke simbol
terminal
metode ini meliputi0

acktrack/backup & rute 2orce

3o backtrack & 4ecursi5e 6escent 7arser

Bottom-Up
Metode ini melakukan penelusuran dari lea" ke root

Memilih aturan produksi mulai dari kiri

Meng:e3pand simbol non terminal sampai pada simbol terminal

+ila ter7adi kesalahan 8string tidak sesuai9 maka dilakukan backtrack

Algoritma ini membuat pohon parsing secara top:down, yaitu dengan


cara mencoba segala kemungkinan untuk setiap simbol non:terminal

Contoh suatu language dengan aturan produksi sebagai berikut


S aAd N a+
A b N c
+ ccd N ddc

Misal ingin dilakukan parsing untuk string AaccdB


Parsing$ Brute %orce
Parsing$ Brute %orce
;i< S ;ii< S ;iii< S
a $ d a $ d
b
erjadi kegagalan ;iii<, dilakukan back track
;i2< S ;2< S ;2i< S
a $ d a % a %
c c c d
erjadi kegagalan lagi ;i2<, dilakukan back-track
Kelema&an dari metode:metode brute-"orce

Mencoba untuk semua aturan produksi yang ada sehingga


men7adi lambat 8waktu eksekusi9

Mengalami kesukaran untuk melakukan pembetulan kesalahan

Memakan banyak memakan memori, dikarenakan membuat


backup lokasi backtrack

*rammar yang memiliki )ekursi" 8iri tidak bisa diperiksa,


sehingga harus diubah dulu sehingga tidak rekursif kiri, 1arena
rekursif kiri akan mengalami Loop yang terus:menerus
%erdapat grammar=tata bahasa * Q 8F,%,P,S9, dimana
FQ 8V(W,W%W,W2W9 Simbol on%erminal 8;ariable9
%Q 8ViW,W<W,W=W ,WPW,W:W9 Simbol %erminal
SQW(W Simbol Awal = Start simbol
String yang diinginkan adalah i * i
aturan produksi 8P9 yang dicobakan adalah
!. ( % N % P ( N % : (
% 2 N 2 < % N 2 = %
2 i
accept 8diterima9
3. ( % N (P% N (:%
% 2 N %< 2 N % = 2
2 i
accept 8diterima9

Meskipun ada rekursif kiri, tetapi tidak diletakkan sebagai aturan yang
paling kiri
4. ( (P% N (:% N %
% %< 2 N % = 2 N 2
2 i
)ekursif kiri, program akan mengalami loop
Brute %orce $ Aturan
Brute %orce $ Aturan
produksi
produksi
$turan :roduksi yang rekursi. memiliki ruas kanan ;hasil produksi< yang
memuat simbol 2ariabel pada ruas kiri
Sebua" produ)si dalam bentu)
$ $ merupakan produksi rekursi. kanan
! berupa kumpulan simbol 2ariabel dan
terminal
contoh9 S d S
% ad %
bentu) produ)si ang re)ursi. )iri
$ $ merupakan produksi rekursi. >iri
contoh9
S S d
% % ad
Produksi yang rekursif kanan akan menyebabkan
penurunan tumbuh kekanan, Sedangkan produksi yang
rekursif kiri akan menyebabkan penurunan tumbuh ke
kiri.
Conto&: Conte3t free *rammar dengan aturan produksi
sebagai berikut0
Dalam +anyak penerapan tata:bahasa, rekursif kiri tidak
diinginkan, @ntuk menghindari penurunan kiri yang looping, perlu
dihilangkan sifat rekursif, dengan langkah:langkah sebagai berikut0

Pisahkan Aturan produksi yang rekursif kiri dan yang tidakS


misalnya
Aturan produksi yang rekursi* kiri
A A ! N A . N ... N A n
Aturan produksi yang tidak rekursi* kiri
A ! N . N ... N n

lakukan per:ganti:an aturan produksi yang rekursif kiri,


sebagai berikut0
!. A ! X N . X N ... N n X
. X ! N . N ... N n
? X ! X N . X N ... N n X
Aturan produksi $ Brute
Aturan produksi $ Brute
%orce
%orce

:ergantian dilakukan untuk setiap aturan produksi dengan simbol ruas kiri
yang sama, bisa muncul 2ariabel J", J) dst, sesuai dengan 2ariabel yang
menghasilkan rekurisi. kiri
Conto"2 ata %ahasa ConteHt .ree
S Sab I aSc I dd I .. I Sbd

:isahkan aturan produksi yang rekursi. kiri


S Sab @ Sbd
1uas >iri untuk S9 "!ab , )!bd

$turan :roduksi yang tidak rekursi. kiri


S aSc I dd I ..
dari situ didapat untuk 1uas >iri untuk S9 " ! aSc, ) ! dd, &! ..

Aturan produksi $ Brute
Aturan produksi $ Brute
%orce
%orce

0angkah berikutnya adalah penggantian yang rekursi. kiri


S Sab I Sbd, dapat digantikan dengan
". S aScZ1 I ddZ1 I ..Z1
). J" ab I bd
&. J" abZ1 I bdZ1

6asil akhir yang didapat setelah menghilangkan rekursi. kiri adalah


sebagai %erikut9
S aSc I dd I ..
S aScZ1 I ddZ1 I ..Z1
J" ab I bd
J" abZ1 I bdZ1

1alau pun tidak mungkin menghilangkan rekursif kiri dalam penyusunan


aturan produksi maka produksi rekursif kiri diletakkan pada bagian belakang
atau terkanan, hal ini untuk menghindari looping pada awal proses parsing

Metode ini 7arang digunakan, karena semua kemungkinan harus ditelusuri,


sehingga butuh waktu yang cukup lama serta memerlukan memori yang
besar untuk penyimpanan stack 8backup lokasi backtrack9

Metode ini digunakan untuk aturan produksi yang memiliki alternatif yang
sedikit
Parsing dengan Recursive Descent Parser

Salah satu cara untuk meng:aplikasikan bahasa conte3t free

Simbol terminal maupun simbol ;ariabelnya sudah bukan sebuah karakter

+esaran leksikal sebagai simbol terminalnya, besaran synta3 sebagai simbol


;ariablenya =non terminalnya

Dengan cara penurunan secara recursif untuk semua ;ariabel dari awal
sampai ketemu terminal

%idak pernah mengambil token secara mumdur 8back tracking9

+eda dengan turing yang selalu ma7u dan mundur dalam melakukan parsing

Semua simbol ;ariabel di7adikan prosedur=fungsi

,ika ketemu simbol terminal pada aturan


produksi , maka panggil prosedurnya

Penelusuran bersifat top down mengikuti sintaks


sesuai pola pada diagram sintaks

2ungsi=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.
Grammar dengan BNF :
<program> ::= t_PROG t_ID t_SEMICOL <bo!"> t_DO#
<bo!"> ::= t_BEGIN <$tatement> %t_SEMICOL <$tatement>&
t_END
<$tatement> ::= t_ID t_'SS <$(mpe e)p> *
t_IF <e)p> t_#+EN <$tatement>*
t_IF <e)p> t_#+EN <$tatement> t_ELSE
<$tatement>
<e)p> ::= <$(mpe_e)p> t_E, <$(mpe e)p> *
<$(mpe_e)p> t_L# <$(mpe_e)p>*
<$(mpe_e)p> t_G# <$(mpe_e)p>
D$t--.

Proses ini merupakan proses kelan7utan dari proses


kompilasi sebelumnya, yaitu analisa leksikal 8scanning9
dan analisa sintaks 8parsing9

+agian terakhir dari tahapan analisis adalah analisis


semantik

Memanfaatkan pohon sintaks yang dihasilkan dari


parsing

Proses analisa sintak dan analisa semantik merupakan


dua proses yang sangat erat kaitannya, dan sulit untuk
dipisahkan
Contoh 0 A 0Q 8 AP+9 < 8CPD9

7arser hanya akan mengenali simbol:simbol


A0QA, APB, dan A<B, parser tidak mengetahui
makna dari simbol:simbol tersebut

@ntuk mengenali makna dari simbol:simbol


tersebut, Compiler memanggil routin semantics
@ntuk mengetahui makna, maka routin ini akan memeriksa0

Apakah ;ariabel yang ada telah dideCnisikan sebelumnya

Apakah ;ariabel:;ariabel tersebut tipenya sama

Apakah operand yang akan dioperasikan tersebut ada


nilainya, dan seterusnya

Menggunakan tabel simbol

Pemeriksaan bisa dilakukan pada tabel identifer, tabel


display, dan tabel block
Pengecekan yang dilakukan dapat berupa0

Memeriksa penggunaan nama:nama 8keberlakuannya9


Duplikasi
Apakah sebuah nama ter7adi pendeCnisian lebih dari dua kali. Pengecekan
dilakukan pada bagian pengelolaan block
Terde0nisi
Apakah nama yang dipakai pada program sudah terdeCnisi atau belum.
Pengecekan dilakukan pada semua tempat kecuali block

Memeriksa tipe
Melakukan pemeriksaan terhadap kesesuaian tipe dalam statement -
statement yang ada, Misalnya bila terdapat suatu operasi, diperiksa tipe
operand nya
Conto&n+a6

e3presi yang mengikut IC berarti tipenya boolean, akan diperiksa


tipe identifer dan tipe ekspresinya

+ila ada operasi antara dua operand maka tipe operand pertama
harus bisa dioperasikan dengan operand yang kedua
$nalisa Semantic sering 7uga digabungkan dengan intermediate
code yang akan menghasilkan output intermediate code.
9ntermediate code ini nantinya akan digunakan pada proses
kompilasi berikutnya 8pada bagian back end compilation9

Memperkecil usaha dalam membuat compilator dari se7umlah


bahasa ke se7umlah mesin

4ebih :achine 9ndependent, hasil dari intermediate code dapat


digunakan lagi pada mesin lainnya

Proses 5ptimasi lebih mudah. 4ebih mudah dilakukan pada


intermediate code dari pada program sumber 8source program9
atau pada kode assembly dan kode mesin

$ntermediate code ini lebih mudah dipahami dari pada kode


assembly atau kode mesin

1erugiannya adalah melakukan . kali transisi, maka dibutuhkan


waktu yang relatif lama
Ada dua macam intermediate code yaitu Notasi Postfx dan N-Tupe
otasi !OSTCID
K5perandL K5perandL K 5peratorL
Misalnya 0
8 a Pb 9 < 8 cPd 9
maka otasi postC3nya
abP cdP <
Semua instruksi kontrol program yang ada diubah men7adi notasi postC3,
misalnya
IC Ke3prL THE5 Kstmt!L E?SE Kstmt.L
Diubah ke postC3 men7adi S
Ke3prL Klabel!L B8 Kstmt!L Klabel.L B" K
stmt.L
+X 0 +ranch if Tero 8salah9
+)0 melompat tanpa harus ada kondisi yang
ditest
Contoh 0 IC a L b THE5 c 0Q d E?SE c 0Q e
Contoh 0 IC a L b THE5 c 0Q d E?SE c 0Q e
Dalam bentuk PostC3
!! a !"
!. b ./ .H
!? L .! +)
!G .. .. c
!H +X .? e
!# c .G 0Q
!' d .H
!> 0Q
bila e3presi 8aLb9 salah, maa loncat ke instruksi .., +ila e3presi
8aLb9 benar tidak ada loncatan, instruksi berlan7ut ke !#:!>
lalu loncat ke .H
Contoh0
EHI?E Ke3prL DO KstmtL
Diubah ke postC3 men7adi S Ke3prL Klabel!L B8 KstmtL Klabel.L B"
$nstruksi 0 a0Q !
&H$4( a K H D5
a 0Q a P !
Dalam bentuk PostC3
!/ a !> a
!! ! !" a
!. 0Q ./ !
!? a .! P
!G H .. 0Q
!H K .? !?
!# .H .G +)
!' +X .H
otasi pada triple dengan format
;operator< ;operand< ;operand<
Contoh0
A 0Q D < C P + = (
,ika dibuat intermidiate code triple0
!. < , D, C
.. =, +, (
?. P, 8!9, 8.9
G. 0Q, A, 8?9
Perlu diperhatikan presedensi 8hirarki9 dari operator, operator
perkalian dan pembagian mendapatkan prioritas lebih dahulu
dari oada pen7umlahan dan pengurangan
Contoh lain0
IC I L J THE5
I 0Q a : b
E?SE
I 0Q a P b
$ntermidiate code triple0
!. L, I, J
.. +X, 8!9, 8#9 bila kondisi ! loncat ke lokasi #
?. :, a, b
G. 0Q, I, 8?9
H. +), , 8>9
#. P, a, b
'. 0Q, I, 8#9
1elemahan dari notasi tripe adalah sulit pada saat
melakukan optimasi, maka dikembangkan !ndirect
tripes yang memiliki dua listS list instruksi dan list
eksekusi. 4ist $nstruksi berisikan notasi triple, sedangkan
list eksekusi mengatur eksekusinyaS contoh
$ :7 B F C G D ' E
C :7 C G D
List !nstruksi List "ksekusi
!. <, C, D !. !
.. =, 8!9, ( .. .
?. P, +, 8.9 ?. ?
G. 0Q, A , 8?9 G. G
H. 0Q, 2, 8!9 H. !
#. H
2ormat dari Yuardruples adalah
;operator< ;operand< ;operand< ;result<
)esult atau hasil adalah temporary 5ariable yang dapat ditempatkan
pada memory atau register . Problemnya adalah bagaimana
mengelola temporary ;ariable seminimal mungkin
Conto&0
A 0Q D < C P + = (
,ika dibuat intermidiate codenya 0
!. < , D, C, %!
.. = , +, (, %.
?. P, %!, %., A

Hasil dari tahapan anlisis diterima oleh


code generator 8pembangkit kode9

$ntermediate code ditansfromasikan


kedalam bahasa assembly atau mesin

Misalnya
@$FBAG@CFDA dan diter7emahkan
kedalam bentuk Yuadruple0
!. P, A, +, %!
.. P , C, D, %.
?. <, %!, %., %?
Dapat ditranslasikan kedalam bahasa
assembly dengan accumulator tunggal0
4DA A 8 isi A ke dalam accumulator9
ADD + 8isi accumulator di7umlahan dengan +9
S%5 %! 8 Simpan isi Accumulator ke %!9
4DA C
ADD D
S%5 %.
4DA %!
M@4 %.
S%5 %?
hasil dari code generator akan diterima oleh code optimation ,
Misalnya untuk kode assembly diatas dioptimasikan men7adi0
4DA A
ADD +
S%5 %!
4DA C
ADD D
M@4 %!
S%5 %.
Per&alanan sebuah intruksi
Per&alanan sebuah intruksi
Source
Program
A 3 B , A
Analisis
!e)si)al
Analisis
Sinta)sis
Code Generator
dan Analisis
semati)s
$abel
Simbol
$o)en-to)en
Id123Id2,Id1
!*A A
A** B
S$O A
=assign:
Id1 23 =E?pr:
Id2 , Id1

1esalahan Program

Penanganan 1esalahan

)eaksi Compiler Pada kesalahan

(rror )eco;ery

(rror repair
1esalahan Program
dapat berupa

1esalahan leksikal

1esalahan Sintaks

1esalahan Semantics
Kesala&an !ro1ram dapat berupa

1esalahan leksikal

1esalahan dalam mengetik=menge7a

Misal THE5 dituliskan dengan TE5 atau TH5

1esalahan Sintaks

misalnya dalam operasi aritmatika dengan tanda kurung yang


7umlahnya kurang, contoh

A0Q I P 8+ < 8CPD9

1esalahan Semantics

1esalahan Semantics

;ipe data yang salah


Contoh 0 int cS
c Q !.H < /.'>

<ariable belum didefnisikan


Misal 0 + 0Q + P !
tetapi b belum dideCnisikan
4angkah:langkah0

Mendeteksi kesalahan

Melaporkan kesalahan

%indak lan7ut perbaikan

Misal0 compiler menemukan kesalahan, yang bisa


meliputi

8ode kesalahan

7esan 8esalahan dalam bahasa alami

3ama dan atribut identifer

contoh 0 error !#. ,umlah0 @nknow identiCer

Dapat diartikan0 1ode kesalahan Q!#., pesan kesalahan Q


unknown identifer, nama identifer Q 7umlah
$da Beberapa reaksi +an1 dilakukan ole& compiler

Reaksi-reaksi #ang tidak dapat diterima

Reaksi #ang $enar% tapi kurang dapat diterima dan


kurang $ermanfaat
Ada +eberapa reaksi yang dilakukan oleh compiler

Reaksi-reaksi #ang tidak dapat diterima

=ompilator crash0 +erhenti atau hang

>ooping & compilator tidak bisa berhenti 8inCnite=onbounded loop9

Menghasilkan 5byek program yang salah 0 berbahaya, bisa


diketahui=muncul setelah program dieksekusi
Ada +eberapa reaksi yang dilakukan oleh compiler

Reaksi #ang $enar% tapi kurang dapat diterima dan


kurang $ermanfaat

Compilator menemukan kesalahan pertama, melaporkannya, lalu


berhenti 8halt9

Pemrogram membuang waktu untuk melakukan pengulangan


compilasi untuk setiap kali terdapat sebuah error

"eaksi.reaksi +an1 dapat diterima

)eaksi yang sudah dapat dilakukan S =ompilator melaporkan (rror

)eco;ery 0 Pemulihan

)epair 0 Perbaikan

)eaksi yang belum dapat dilakukan

Compiler mengkoreksi kesalahan

Menghasilkan obyek program sesuai yang diinginkan pemrogram

Compiler memiliki kemampuan untuk AmengetahuiB maksud dari


pemrogram

+elum diimplementasikan pada program 8sekarang ini9


+ertu7uan mengembalikan parser ke kondisi stabil agar supaya
dapat melan7utkan proses parsing ke posisi selan7utnya.

&ekanisme 'd (oc

)eco;ery yang dilakukan tergantung dari si pembuat compiler

%idak terikat pada suatu aturan tertentu

Disebut 7uga dengan istilah purpose error reco5ery

)#ntax directed Recover#


misal begin
A 0Q A P ! S
+ 0Q + P !S
C 0Q C P !
end S
Pada contoh diatas, compiler akan mengenali sebagai 8dalam otasi +29
begin #statement? * % statement? * #statement? end*
@ !kan diperlakukan sebagai A+B
Second Error "eco,er+ 0 untuk melokalisir kesalahan

Panic &ode

Ma7u terus sampai ketemu delimiter

Contoh 0 $2 A Q ! 1ondisi 0Q trueS

Pada kondisi diatas THE5 tidak ada, compiler melan7utkan sampai ketemu
delimiter 8S9

Unit Deetion

Menghapus keseluruhan suatu unit sintaksik 8misalnya 0 KblockL, Ke3pL,


KstatementL dan sebagainya

Mempermudah untuk melakukan error repairing

Context Sensiti,e "eco,er+

+erkaitan dengan semantics

contoh 0 + 0Q A+udi 4uhurB

Pada awal program ;ariabel + belum dideklarasikan,


maka berdasarkan permunculannya maka diasumsikan
;ariabel + bertipe string
Memperbaiki kesalahan dan membuat source
program ;alid 8memodiCkasi9

Mekanisme Ad Hoc
%ergantung pada sipembuat compiler

Synta3 directed )epair


Menyisipkan = membuang simbol terminal yang
dianggap hilang atau yang menyebabkan error

contoh EHI?E A K !
$ 0Q $ Q !S

compiler akan menyisipkan DO

Contoh lain
Procedure $ncrement S
begin
3 0Q I P !
endS
endS

1elebihan simbol end, yang menyebabkan


kesalahan, maka compiler akan
membuangnya

Context Sensiti,e "epair

%ipe identiCer0 membuat identifer dummy


;ar A 0 String
begin
A 0Q /S
end
maka compilator akan memperbaiki kesalahan dengan membuat identifer
baru , misalnya + bertipe integer

Spelling )epair0 memperbaiki kesalahan pengetikan pada identiCer,


misalnya0
EHI??E A Q ! D5
identiCer yang salah tersebut diperbaiki men7adi EHI?E

Dependensi Optimasi

Optimasi ?okal

Optimasi #lobal

Dependensi ,ptimasi
bertu7uan untuk menghasilkan kode program yang berukuran lebih kecil dan
lebih cepat
Machine Dependent 5ptimiTer
Machine $ndependent 5ptimiTer 85ptimasi lokal dan 5ptimasi global9
Optimasi ?okal : adala& optimasi +an1 dilakukan &an+a pada
suatu blok dari source codeH den1an cara:

-oding
men1anti konstata atau ekpresi +an1 bisa die,aluasi pada saat
compie time den1an nilai komputasin+a) %isaln+a:
$ :7 3 F 4 F B bisa di1anti den1an $:7 I F B
I dapat men1antikan ekspresi 3 F 4

Redundant-)u$expression "imination
&asiln+a di1unakan la1i dari pada dilakukan computasi ulan1H conto&:
$:7 B F C
D :7 J F B F C

Optimasi dalam sebua& Iterasi

Loop Unrroing:%en1anti suatu oop den1an menulis


statement +an1 ada dalam loop ditulis beberapa kali

Karena sebua& iterasi pada implemnetasi ke le,el renda&H


memerlukan :

Inisialisasi nilai a(alH pada loop dilakukan sekali pada saat


permulaan eksekusi loop

!en1e.test.anH apaka& ,ariabel loop tela& mencapai kondisi


terminasi

$djustment +aitu: penamba&an atau pen1uran1an nilai pada ,ariabel


loop den1an jumla& tertentu

Operasi +an1 terjadi pada tubu& perulan1an @loop bod+A

Contoh 9
9OR I 23 1 to 2 *O
ACID 23 E1
dapat dioptimasikan menjadi
AC1D 23 E1
AC2D 23 E1

Fre/uency 1eduction9 :emindahan statement ke tempat yang lebih


jarang dieksekusi, contoh
FO1 I9! " to "# ,O A 23 F
%-+IN FO1 I9! " to "# ,O
A 23 F %-+IN
$ 9! $ C " $ 9! $ C "
-N,9 -N,9
Teknik Optimasi $ Optimasi
Teknik Optimasi $ Optimasi
Lokal
Lokal

Strength )eduction
6 Penggantian suatu operasi dengan operasi lain yang lebih cepat
dieksekusi
6 misalnya0 pada komputer operasi perkalian memerlukan waktu
eksekusi lebih banyak dari pada operasi pen7umlahan
6 contoh lain
A0Q A P !
6 dapat digantikan dengan
$C8A9
Optimasi 1lobal biasan+a dilakukan den1an suatu 1rap& terara&
+an1 menunjukkan jalur +an1 mun1kin selama eksekusi pro1ram
ada dua ke1unaan +aitu ba1i pro1rammer dan compiler itu sendiri

Ba1i !ro1rammer
6 Unreac.a$e/dead code: Kode +an1 tidak perna& dieksekusi
6 misaln+a :
D :7 I6
IC D 7 K THE5
$ :7 $ F 2
Instruksi
$ :7 $ F 2 tidak perna& dikerjakan
6 Unused parameter 0 parameter yang tidak pernah
digunakan dalam procedure

Misalnya 0
procedure pen7umlahan8a,b,c S $nteger9S
;ar 3 0 integerS
begin
3 0Q a P bS
end
Parameter c tidak pernah digunakan sehingga
tidak perlu diikut sertakan

Unsused 0aria$e 1 ;ariabel yang yang


tidak pernah dipergunakan
Program pendekS
;ar a, b0 integer
begin
a 0Q HS
endS

+ tidak pernah digunakan

0aria$e 1 ;ariabel yang dipakai tanpa nilai awal. Contoh


Program AwalS
;ar a, b0 integer
begin
a 0Q H
a 0Q a P bS
endS

;ariabel b digunakan tetapi tidak memiliki harga awal

Bagi 2ompier
6 Meningkatkan eCsiensi eksekusi program
6 Menghilangkan useless code=kode yang tidak terpakai
;ar A, +, C, D, (, $, ,, I, J 0 integerS
begin
+ 0Q HS
A 0Q !/ : + = G < ? P .S
C 0Q A P +S
J 0Q !/S
D 0Q A P + M (S
for $ 0Q ! to >H do
begin
I 0Q I P !S
+ 0Q + M IS
J 0Q 'S
end
&hile JK H do
( 0Q ( M +S
end
Dua fungsi penting %abel $nformasi

@ntuk membantu pemeriksaan kebenaran


semantik dari program sumber

@ntuk membantu dan mempermudah dalam


pembuatan intermediate code dan proses
pembuatan kode:kode 8pembangkitan kode9
Secara umum, sebuah tabel simbol bisa
memiliki elemen:elemen tabel sebagai
berikut, meskipun tidak semuanya
dipergunakan oleh semua compiler

o.urut identiCer0 menentukan nomor urut


pada tabel simbol

ama identiCer

%ipe identiCer

5b7ect time address

Dimensi dari identiCer yang


bersangkutan

omor baris ;ariabel yang


dideklarasikan

omor baris ;ariabel yang


direferensikan

2ield link
Ada beberapa 7enis %abel $nformasi

Ta$e identiferS berfungsi menampung semua identiCer yang


terdapat dalam program

Ta$e 'rra#1 berfungsi menampung informasi tambahan untuk


sebuah array

Ta$e $ok0 mencatat ;aribel:;ariabel yang ada pada blok yang sama

Ta$e Rea0 Menyimpan elemen tabel bernilai real

Ta$e string0 menyimpan informasi string


Ta$e dispa#0 mencatat blok yang aktif
;abel 9dentifer ;abel 9dentifer memilikiS memilikiS

o @rut identiCer dalam tabel

ama $dentiCer

,enis dari identiCerS seperti Prosedur, fungsi, tipe ;ariabel dan konstanta

%ipe dari identiCer yang bersangkutanS seperti $nteger 8bilangan bulat9,


Char, boolean , array, record, Cle

le;el dari identiCer 8depth of block9S hal ini menyangkut letak identiCer
dalam program, konsepnya sama dengan pembentukan tree, misalnya
main program le;el /
@ntuk identi0er, pencatatan dapat berupa sepertiS

Alamat relati"/address dari identiCer untuk implementasi

$nformasi referensi dari identiCer terntentu ke alamat tabel


identiCer yang lainnya

link* menghubung antar identiCer

ormal0 digunakan pada pemanggilan parameter, untuk


membedakan parameter by ;alue dan by reference

Contoh 8dalam pascal9


Program AS
Far + 0 $ntegerS
Procedure I 8X0 char9
;ar C 0 $nteger
begin
....dst
%abel identiCer akan mencatat semua identiCerS
/ A
! +
. I
? X
G C
%ab$d0 Array Z/..tabma3[ of record
nama 0 StringS
link 0 integerS
5b7 0 ob7ectS
%ipe 0 %ypesS
ref0 $ntegerS
normal 0 +ooleanS
4e;el 0 /.. Ma3le;elS
address 0 $ntegerS
(nd
Dimana
ob7ek Q8konstant, ;ariabel, prosedur, fungsi9
%ypes Q 8notipe, int, reals, booleans, chars, arrays, record
Ta$e 'rra#
dipergunakan untuk menyimpan informasi suatu identiCer yang
bertipe array, tabel ini memilik Celd0

o. @rut suatu array dalam tabel

%ipe dari indeks array yang bersangkutan

%ipe element array

)eferensi dari elemen array

$nde3 batas atas dan bawah array

,umlah elemen array

@kuran total array 8total Q atas : bawah P !9 3 elemen siTe

(lemen siTe
Ta$e Bok
Dipergunakan untuk menyimpan informasi
blok:blok yang ada pada tabel utama.
+erisikan Celd

no urut blok

batas awal blok

batas akhir blok

ukuran parameter=parameter siTe

ukuran ;ariabel= ;ariabel siTe

last ;ariabel

last parameter
Tabel In%ormasi " Block
Tabel In%ormasi " Block
Contoh
:rogram $
Kar % 9 IntegerF
:rocedure L ;J9char<F
Kar C 9 IntegerF
begin
....
+ntu) (lo) A (lo) (
last 2ariable ! ) '
Kariable si4e ! ) ;dianggap int ) byte< )
0ast parameter ! # ;tanpa parameter< &
parameter si4e ! # " ;char butuh
" byte<
Ta$e Rea Ta$e Rea
Dipergunakan untuk menyimpan nilai dari suatu identiCer yang
bertipe real 8pecahan9. (lemen:elemen dari tabel ini adalah
sebagai berikutS

5 urut elemen

ilai real suatu ;ariabel real yang mengacu ke indeks tabel ini
Pemikirannya disini setiap tipe yang memiliki oleh suatu bahasa
akan memiliki tabelnya sendiri
Ta$e )tring
Dipergunakan untuk menyimpan informasi string yang terdapat
pada program sumber. (lemen:elemen yang terdapat dalam
tabel ini adalah0
6
no @rut elemen
6
1arakter:karakter yang merupakan konstanta
Ta$e Dispa#
menyimpan informasi:informasi mengenai blok:blok yang lagi
aktif. (lemen:elemen yang terdapat dalam tabel ini adalah0
6
o @rut tabel
6
+lok yang aktif
Pengisian tabel display dilakukan dengan konsep stack

Anda mungkin juga menyukai