Anda di halaman 1dari 15

KATA PENGANTAR

Segala puji dan syukur penulis panjatkan kehadirat Tuhan Yang Maha Esa yang telah
menganugerahkan rahmat, karunia serta ridha-nya, sehingga penulis dapat menyelesaikan
Makalah tentang Model Kompilator". Makalah ini disusun sebagai salah satu tugas mandiri
pada mata kuliah Teknik Kompilasi.
Dalam penulisan makalah ini diharapkan dapat memberikan informasi yang
kemudian bermanfaat bagi kita.
Akhirnya penulis berharap karya tulis ini dapat berguna dan dapat dipergunakan
sebagaimana mestinya. Penyusun mengharapkan kritik dan saran untuk kemajuan di masamasa mendatang. Atas perhatiannya penyusun ucapkan terima kasih.

Batam, 12 Januari 2015

Penulis

DAFTAR ISI

KATA PENGANTAR....................................................................................................i
DAFTAR ISI.................................................................................................................1
BAB I PENDAHULUAN.............................................................................................2
1.1 Latar Belakang................................................................................... 2
1.2 Rumusan Masalah.............................................................................. 2
1.3 Maksud dan Tujuan............................................................................. 2

BAB II LANDASAN TEORI.......................................................................................3


2.1 Pengertian Kompilator........................................................................3
2.2 Mutu Kompilator................................................................................. 4
2.3 Pembuatan Kompilator.......................................................................4
2.4 Konsep dan Notasi Bahasa.................................................................5
2.5 Diagram Status................................................................................... 5
2.6 Notasi BNF.......................................................................................... 5

BAB III PEMBAHASAN.............................................................................................8


3.1 Cara Kerja Kompilator.........................................................................8
3.2 Deskripsi Cara Kerja Kompilator.........................................................9
3.3 Fitur-fitur yang didukung oleh PPC386..............................................11

BAB IV PENUTUP.....................................................................................................14
A. KESIMPULAN....................................................................................... 14

DAFTAR PUSTAKA..................................................................................................15

BAB I
1

PENDAHULUAN
1.1.

Latar Belakang
Tujuan dari belajar Pemrograman adalah agar dapat membiasakan diri

melakukan suatu perencanaan apabila menyelesaikan suatu masalah, karena suatu


permasalahan yang diselesaikan dengan suatu perencanaan yang matang maka akan
mendapatkan solusi yang lebih optimal dibandingkan menyelesaikan masalah tanpa
menggunakan suatu perencanaan. Dalam eksekusi program juga tidak lepas dari
peran serta kompilator dalam eksekusi maupun translasi program.untuk itu kita
sebagai tenaga IT perlu faham mengenai bagaimana peran serta kompilator dalam
eksekusi program yang kita buat.
1.2.

Rumusan Masalah

Makalah ini merumuskan beberapa permasalahan sebagai berikut :


1. Apa pengertian kompilator?
2. Apa fungsi kompilator?
3. Bagaimana cara membuat suatu kompilator?
1.3.

Maksud dan Tujuan


Maksud dari penyusunan tugas ini adalah untuk memenuhi dan melengkapi

salah satu tugas mata kuliah Teknik Kompilasi di Universitas Putera Batam Jurusan
Teknik Informatika. Sedangkan tujuan dari penulisan tugas ini adalah:
1. Menerapkan teori yang didapat selama belajar di Universitas Putera Batam.
2. Memberikan uraian penjelasan lebih terperinci mengenai pengertian model
kompilator.
3. Mengembangkan kreativitas dan wawasan penulis.

BAB II
LANDASAN TEORI

2.1 Pengertian Kompilator


Kompilator adalah suatu program yang membaca program yang ditulis
dengan bahasa tertentu (bahasa sumber) dan menerjemahkannya ke bahasa lain
(bahasa tujuan). Contoh bahasa-bahasa sumber adalah bahasa-bahasa pemrograman
tradisional seperti Fortran, Pascal, dan Cobol, sedangkan bahasa tujuan pada
umumnya merupakan bahasa mesin atau bahasa assembly yang tergantung pada jenis
mesinnya.
Proses kompilasi dapat dibagi menjadi dua bagian, yaitu bagian analisis dan
sintesis. Dalam proses analisis, program sumber diuraikan menjadi program dalam
bahasa tingkat menengah. Proses sintesa akan mengubah representasi menengah
tersebut menjadi program dalam bahasa tujuan.
Analisis dan sintesa dibagi-bagi lagi menjadi beberapa tahap. Salah satu
bentuk umum dari pentahapan proses kompilasi dapat dilihat pada gambar
Mulai dari tahap analisis leksikal sampai pembentukan kode menengah adalah bagian
analisis. Sedangkan tahap optimisasi kode dan pembentukan kode tujuan adalah
bagian sintesa.
Dalam implementasinya, tahap-tahap tersebut dapat dikerjakan secara
berkelompok. Misalnya analisis leksikal, analisis sintak, analisis semantik, dan
pembentukan kode menengah dikerjakan dalam suatu kelompok (pada pass pertama).
Sedangkan mulai dari optimisasi kode dapat saja dihilangkan jika ingin membuat
suatu kompilator yang relatif sederhana.

2.2

Mutu Kompilator

1.

Kecepatan dan waktu proses kompilasi tergantung pada :

a. Penulisan algoritma kompilator, yaitu algoritma yang digunakan untuk


menuliskan program kompilator tersebut.
b. Kompilator pengkompilasi, sebuah program khusus yang menghasilkan
kompilator tersebut.
2.

Mutu program objek : ukuran dan kecepatan eksekusi dari program objek

tergantung pada :
Fungsi translasi yang digunakan (cara untuk melakukan perubahan dari source code
ke object code).
3.

Integrated Environment, yaitu fasilitas-fasilitas terintegrasi yang dimiliki oleh

kompilator tersebut. Misalnya untuk melakukan editing, debugging, maupun testing.


2.3

Pembuatan Kompilator

Dapat dilakukan dengan :


1. Bahasa mesin, kesulitan sangat tinggi.
2. Bahasa assembly, biasa digunakan sebagai tahap awal.
Keuntungan : object code berukuran kecil.
Kerugian : memerlukan usaha yang besar.
3. Bahasa tingkat tinggi lain pada mesin yang sama.
Keuntungan : pemrograman mudah.
Kerugian : program hasil.
4. Bahasa tingkat tinggi yang sama pada mesin yang berbeda.
5. Bootstrap (diperkenalkan oleh Wirth).
Ide : kita bisa membangun sesuatu yang besar dengan dimulai dari bagian intinya.

2.4

Konsep dan Notasi Bahasa

Bahasa : himpunan semua string yang dapat dibentuk dari himpunan alphabet.
Klasifikasi bahasa menurut hirarki Chomsky :
- Bahasa Regular
Pada mesin otomata Finite State Automata (NFA dan DFA).
- Bahasa Bebas Konteks (Context Free)
Pada mesin otomata Push Down Automata.
- Context Sensitive
Bekerja pada mesin otomata Linier Bounded Automata.
- Unrestrieted / Tipe 0 / Phase Structure
Pada mesin turing, tidak ada batasan.
2.5

Diagram Status / State Transition Diagram

Berguna untuk mendapatkan token, yaitu melakukan analisis leksikal. Misal suatu
bahasa memiliki himpunan simbol terminal/token berikut :
(t_PLUS, t_MIN, t_ID, t_INT).
Maka diagram state-nya :
*t_ID(identifier) bisa berupa nama atau keyword.
Keyword/kata kunci yang sudah didefinisikan oleh suatu bahasa. Misal VAR jumlah :
integer
maka VAR, integer adalah keyword, jumlah adalah nama.
2.6

Notasi BNF (Backus Naur Form)

Aturan-aturan produksi dapat dinyatakan dalam bentuk BNF.


< > mengapit non terminal.
{ } pengulangan 0 sampai n kali.
[ ] 0 atau 1 kali muncul.
( ) contoh x(yz) = xy | xz.
Contoh :
Aturan Produksi

E -> T | T + E | T - E, T -> a

Notasi BNF
2.7

E ::= <T> | <T>+<E> | <T>-<E>

Diagram Sintaks

Membantu pembuatan parser/analisis sintaksis.


Kotak = variabel/nonterminal, bulat = terminal.

2.8

ANALISIS LEKSIKAL / SCANNER

Melakukan analisis leksikal, mengidentifikasikan semua besaran yang membangun


suatu bahasa.
Tugas Scanner :
1. Merunut karakter demi karakter.
2. Mengenali besaran leksik.
3. Mentransformasi menjadi suatu token.
4. Mengirimkan token.
5. Membuang semua komentar dalam program.
6. Menangani kesalahan.
7. Menangani tabel simbol.
Scanner bekerja berdasarkan mesin Finite State Automata pada Regular Grammar.
Untuk membantu mengkonstruksi Scanner dapat mempergunakan Diagram State.
Yang termasuk besaran pembangun bahasa/leksik :
1. Keywords : Begin, End, If, Else.
2. Nama
3. Nilai konstanta
4. Operator dan delimiter : +, -, *, /, ( ), :, ;, dsb.
2.9

ANALISIS SINTAKSIS / PARSER

- Top Down : dari root menuju leave (simbol awal sampai simbol terminal).

a. Backtrack : Brute Force


b. No backtrack : Recursive Descent Parser
- Bottom Up
2.10

Parsing dengan Brute Force

Contoh : bahasa dengan aturan produksi


S -> aAd | aB

A -> b | c

B -> ccd | ddc

untuk mem-parsing string 'accd' (dengan S simbol awal).


Kelemahan :
- Mencoba untuk semua aturan produksi yang ada sehingga menjadi lambat (rentang
waktu eksekusi tidak jelas).
- Menyulitkan untuk melakukan pemulihan kesalahan.
- Memakan banyak memori karena perlu mencatat lokasi backtrack.
Grammar left recursive tidak dapat diperiksa, dan harus diubah dulu sehingga tidak
left recursive.
2.11

Parsing dengan Recursive Descent Parser

Secara rekursif menurunkan semua variabel dari awal sampai bertemu terminal dan
tidak pernah mengambil token secara mundur.
- Semua simbol variabel dijadikan prosedur/fungsi.
- Bertemu simbol terminal, panggil prosedur Scan.
- Bertemu simbol variabel, panggil prosedur tersebut.

BAB III
PEMBAHASAN
7

3.1 Cara Kerja Kompilator


Untuk menghsilkan suatu program yang executable suatu compiler punya
langkah dan prosedur tersendiri. Untuk mengetahui cara kerja suatu kompilator kita
harus mengetahui perangkat-perangkat pembangun kompilator. Perangkat pembangun
kompilator antara lain:
a. Scanner Generator
yaitu pemecahan dan pen gelompokan source code menjadi besaran-besaran
leksik (token). Tujuannya untuk mengelompokkan token ke dalam konstanta,
nama variabel, keyword, dan operator. Misalnya sebuah baris program sebagai
berikut:
Akan dikelompokkan menjadi kelompok IF dan THEN, kelompok A, B, C,
dan H, serta kelompok = dan + . Dalam hal ini Scanner harus memproses
blank dan komentar.
b. Parser Generator
Perangkat ini yang akan menghasilkan syntax analyzer. Fungsinya untuk
menentukan bagaimana dekomposisinya. Proses ini bisa dianalogikan dengan
penentuan struktur kalimat dalam bahasa inggris. Yaitu subject, verb, noun,
atau adjective. Dalam analisis sintaksis, yang menjadi perhatian kita adalah
pengelompokan token ke dalam kelas sitaksis, seperti expression, statement,
dan procedure. Parser memberikan suatu pohon sintaks dengan token sebagai
daunnya dan setiap elemen non-daun merepresentasikan suatu klas sintaksis.
c. Syntax-Directed Translation Engines
Bagian ini 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.
d. Automatic Code Generator
Yaitu sebuah tool yang mempunya sekumpulan aturan yang akan dipakai
untuk mendefinisikan setiap penerjemahan dari bahasa menengah ke bahasa
8

mesin. Keluaran dari code generator diberikan ke code optimizer (Dataflow


engines).
e. Data Flow Engine
Proses pada bagian ini bertujuan untuk menghasilkan object yang lebih
efisien.. Optimasi tertentu yang mungkin pada level lokal meliputi evaluasi
dari ekspresi konstanta, pemakaian properti operator tertentu , seperti
asosiatif, komutatif, dan distributiif Optimasi global lebih lanjut juga bisa
dilakukan. Ini meliputi kemunculan dari subekspresi yang identik dan
penghapusan statement invariant dalam suatu loop, dan menempatkannya di
luar loop. Optimasi ini termasuk optimasi machine-independent. Alokasi
register secara optimal merupakan salah satu contoh optimasi yang machinedependent. Suatu code optimizer yang baik bisa menghasilkan kode yang
lebih baik daripada pemrogram assembler yang berpengalaman.
3.2 Deskripsi Cara Kerja Kompilator
Deskripsi Cara Kerja Kompolator (Compiler), Adalah sebagai mana gambaran
singkat berikut.
Secara konsep, sebuah compiler dioperasikan pada beberapa fase. Tiap fase
mengubah source program dari satu keadaan (bentuk) ke bentuk yang lain Salah
satu diagram fase-fase compiler ada di bagian bawah. Tiga fase pertama,
merupakan pembentukan sebagian besar porsi analisa pada suatu compiler yang
telah dikenalkan pada pembahasan perangkat compiler yang terdahulu.
Dua aktivitas yang lain, yakni symbol table managament dan error handling,
terlihat bergabung dengan enam fase dari lexical

analysis, syntax analysis,

semantik analysis, intermediate code generation, code optimation, dan code


generation. Dalam hal ini symbol-table manager dan error handler kita anggap
sebagai salah satu fase (tahap) dalam proses kompilasi.
Pada uraian sebelumnya (perangkat pembangun kompilator) telah dibahas
mengenai perangkat-perangkat yang dibutuhkan serta fungsi dan unjuk kerja
perangkat tersebut, kecuali symboltable management dan error handler. SymbolTable management merupakan struktur data yang memuat catatn tiap identifier,
dengan fields untuk memberi atribut bagi identifier.

Struktur data tersebut menolong kita mendapatkan catatan tiap identifier secara
cepat dan menyimpan atau mendapatkan kembali data tersebut. Secara skematis,
proses kompilasi digambarkan sebagai berikut:

3.3 Fitur-fitur yang didukung oleh PPC386


a. Constant Folding
Jika suatu operan merupakan konstanta, ia akan dievaluasi (dihitung) pada
saat kompilasi. Contoh:
akan disingkat menjadi
b. Constant Merging
Pemakaian konstanta string, floating point, atau konstanta ganda akan
digantikan oleh satu satu dari konstanta tersebut.
c. Shortcut Evaluation
Pengevaluasian ekspresi boolean berhenti secepatnya jika hasilnya sudah
diketahui, sehingga proses kompilasi lebih cepat daripada membandingkan
seluruh operan boolean.
d. Constant Set Inlining
Dengan pemakaian operator in akan lebih efisien daripada memakai operator
<,>, =, <=, >=, < atau >. Karena dengan pemakaian operator ini bisa
mengeleminasi range perbandingan.
e. Small Sets

10

Bila ada himpunan yang terdiri kurang dari 33 elemen bisa secara langsung
di-encode dengan value 32-bit.Oleh karena itu, tak ada run-time library yang
akan dipanggil untuk mengevaluasi operan-operan pada himpunan ini.
Himpunan ini secara langsung di-encode oleh code generator.
f. Range Checking
Assignmen dari suatu konstanta ke variabel akan diperiksa range-nya pada
saat kompilasi.hal ini yang akan meniadakan pemeriksaan range pada saat
run-time.
g. And Instead of Modul
Ketika operan kedua, operasi mod pada nilai unsigned merupakan sebuah
konstanta 2, maka sebuah perintah and akan dipakai sebagai pembagian
integer. Ini akan melahirkan code yang lebih efisien.
h. Shift Instead of Multiply or divide
Bila salah satu operan pada suatu perkalian merupakan konstanta dua, maka
akan di-encode dengan memakai arithmetic shift instructions, sehingga akan
dihasilkan kode yang lebih efisien. Begitu juga dengan pembagian dengan
operator div dan pengaksesan terhadap indeks array.
i. Automatic Alignment
Secara default semua variabel yang lebih dari satu byte dijamin akan
disetarakan dengan minimal batasan satu word. Penyejajaran pada stack dan
data section tergantung pada setiap prosessor.
j. Smart Linking
Fitur ini akan meniadakan code yang tidak berguna pada pembentukan file
executable, sehingga akan didapatkan ukuran file yang sangat kecil. Smart
linking bisa diaktifkan dengan menambahkan baris Cx pada fpc.cfg, atau
dengan cara menambahkan {$SMARTLINK ON} pada program utama.
k. Inline Routines
Pengevaluasian ekspresi boolean berhenti secepatnya jika hasilnya sudah
diketahui, sehingga proses kompilasi lebih cepat daripada membandingkan
seluruh operan boolean.
Fitur untuk mengkodekan secara langsung runtime library Lo, Hi, High,
Sizeof, typeof, Length, Pred, Succ, Inc, dan Assigned ke file executable
(program jadi).

11

l. Stack Frame Omission


Pada kondisi tertentu, stack frame (jalur keluar masuknya kode) akan
dihilangkan dan variable akan diakses secara langsung lewat stack pointer.
Kondisi-kondisi stack frame akan dihilangkan:
Sebuah fungsi yang tidak punya parameter atau variabel local
Routine yang dideklarasikan dengan assembler modifier.
Routine bukan merupakan kelas
m. Register Variabel
Apabila kita mengaktifkan switch Or pada fpc.cfg, variabel atau parameter
lokal yang sering dipakai akan dipindah ke register sehingga aksesnya lebih
cepat.

BAB IV
PENUTUP
4.1 Kesimpulan

12

Ppc386 merupakan compiler yang cukup bagus. Hal ini dibuktikan dengan
kecepatan dan waktu roses kompilasi, mutu program object, dan integrated
environment(IDE) yang lengkap. Disampng itu ppc386 juga mendukung antara lain:
1. fully 32-bit code
2. ansi string
3. exception support
4. secara parsial kompatibel dengan Borland Pascal dan Borland Delphi.
5. RTTI support
6. procedure dan operator overloading
7. code optimizer
peephole optimizer
loading variabel ke register
assembler level dataflow analyzer
stack frame eleminations
integrated BASM(built-in assembler) parser
support ATT syntax yang dipakai oleh GNU C
support Intel syntax yang dipakai oleh Turbo Pascal.
8. bisa mengkompile program pascal menjadi kode assembly, khusus untuk
assembler berikut :
GNU Assembler (GAS)
Netwide assembler (Nasm)
Microsoft Assembler/Turbo Assembler (Masm/Tasm)
9. bisa memanggil kode eksternal bahasa C
10. smartlinking
11. support GNU debugge

DAFTAR PUSTAKA

Aho, Alvred V. dan Jeffrey D Ullman 1986. Compilers Principle, Techniques, and
Tools. Massachusetts:Addison-Wesley Publishing Company
Seberta, Robert W. 1993.Concept of Programming Language, second edition.
Massachusetts: The Benyamin/Commings Publishing Company,inc.
Utdirartatmo, Firrar. 2001. Teknik Kompilsai. Yogyakarta: J & J Learning
Yogyakarta.

13

Canneyt, Michal Van. 2002. Free Pascal Programmers' manual.

14

Anda mungkin juga menyukai