Tugas Perbaikan Nilai

Apa pentingnya teknik kompilasi dipelajari ?
Tujuan Mempelajari Teknik Kompilasi
Mengetahui penerapan konsep ilmu komputer pada prilaku komputer yaitu algoritma, arsitektur komputer, struktur data maupun penerapan teori bahasa dan automata.
Arti Kata Tenik Kompilasi
Teknik adalah metode atau cara Kompilasi adalah proses menggabungkan serta menterjemahkan sesuatu (source program) menjadi bentuk lain.
Compile is to translate a program written in a high-level programming language into machine language.
Istilah-istilah penting dalam teknik kompilasi
Source Language     : Bahasa (tingkat tinggi) yang menjadi masukan bagi kompiler.
Source Code            : Program dalam bahasa sumber yang akan dikomplasi.
Object Language     : Bahasa yang digunakan untuk program hasil kompilasi.
Object Code            : Program hasil keluaran dari kompiler.
Object File          : Hasil kompilasi yang biasanya disimpan dalam bentuk file di piranti penyimpanan. File ini berakhiran .OBJ.
Target Machine     : Komputer yang digunakan untuk menjalankan program hasil kompilasi.
Cross Compiler   : Kompiler yang digunakan untuk menghasilkan Object Code  yang dijalankan pada jenis komputer yang berbeda.
Contoh, suatu kompiler hanya dapat dijalankan pada komputer VAX, tetapi object code hasil kompilasinya dapat dijalankan pada komputer IBM/PC.

Bahasa Mesin Tingkat Tinggi
Bahasa mesin adalah bahasa asli yang digunakan oleh mesin komputer. Oleh karena itu bahasa mesin sering disebut native code.
Bahasa mesin berupa deretan bit hingga membentuk numeric bineratau diringkas menjadi Heksadesimal.
Contoh : Untuk mesin IBM/370
0001100000110101
biner, yang bila diringkas dalam bentuk heksadesimal menjadi 1835.
Perintah tersebut berarti: komputer menyalin isi register 5 ke register 3.
Perintah tersebut hanya dimengerti oleh mesin dan sulit dimengerti oleh manusia, dan yang
dapat mengenali hanya jenis mesin tertentu, yaitu mesin keluarga IBM/370.
Yang dapat dianggap sebagai bahasa pemrograman yang pertama kali adalah Bahasa Assembly,
yang telah berbentuk string dan lebih mudah dimengerti manusia. String tersebut sering disebut Mnemonic.
Contoh: LR 3,5   Salin isi general register 5 ke general register 3.
Bahasa-bahasa pemrograman seperti Pascal, C, PL/i, FORTRAN atau COBOL disebut dengan High Level Language.
Contoh: Bahasa Pascal
X := Y + Z;
Satu kalimat perintah dalam bahasa tingkat tinggi diterjemahkan menjadi beberapa baris kalimat perintah dalam bahasa yang
lebih rendah tingkatnya. Misalnya, perintah dalam bahasa Pascal seperti contoh di atas diterjemahkan dalam bahasa Assembly untuk mesin IBM/370 menjadi:
L 3,Y      Load Y ke register 3
A 3,Z      Add Z
ST 3,X    Simpan hasilnya ke X
Tujuan utama dari bahasa tingkat tinggi adalah memudahkan pemakainya dalam membuat program
dan kemampuannya dalam mengatasi kerumitan (kompleksitas). Seperti yang disebutkan pada contoh-contoh di atas, beberapa
kalimat Bahasa Assembly dapat dinyatakan dengan satu perintah dalam bahasa tingkat tinggi. Kerumitan-kerumitan
implementasinya secara hardware disembunyikan dari pemakai (Information Hiding) dan dikemas dalam perintah yang
mudah dimengerti (Encapsulation) serta setiap jenis data dikelompokkan untuk menggambarkan jenis operasi yang dapat menggunakannya (Abstract Data Type).

Compiler

1. Definisi Compiler

Biasanya dipakai untuk menggenerate program
yang akan dibuat. Misalnya sebuah source code di vsual basic akan
dijadikan sebuah software aplikasi atau program….maka source code
tersebut harus di-compile sedemikian rupa agar jadi sebuah aplikasi ato
software dengan sebuah compiler…
CIRI – CIRI PROGRAM COMPILER
Ciri-cirinya :
1) Dapat memodifikasi Caption program sehingga menjadi nama lain.
Misalnya sebuah program dicopy biasa dari komputer satu ke komputer
lain maka captionnya akan sama…catatan bukan nama apliaksi or .exe nya
yang diubah…tapi judul program yang ada di atas apliaksi tersebut.
2) Dapat mengganti gambar dari aplikasi tersebut. Misalnya gambar A.jpg
diletakkan dalam sebuah program. Kalau dicopy secara biasa, otomatis
gambar A.jpg akan ter-copy juga ke program tersebut. Tetapi bila
dicompile…maka gambar dapat berubah.
FUNGSI PROGRAM COMPILER
Fungsi dari program compiler ini adalah :
1) Mengubah caption, sehingga jika suatu program dikunci oleh virus
seperti regedit, msconfig, ms Dos shell dan lain – lain dapat tetap
dijalankan, karena fungsi dari compiler tersebut merubah caption
program. Biasanya virus mendeteksi dari caption program tersebut untuk
menendang atau mematikan program dalamkode pertahanan virus. 2) Buat
seneng- seneng and nambah program ajah….hahahahahhahaha
CARA KERJA COMPILER SEDERHANA
cara kerjanya sangat mudah, seperti yang disebutkan bahwa compiler
disini adalah sangat sederhana sekalai. Sehingga masih menggunakan
fasilitas dari VB berupa modul COPYFILE. Jadi bukan dicompiler secara
murni, jadi Algoritma nya :
1) Program Dijalankan
2) Program akan mengecek apakah file yang diperlukan untuk compiler ada…disini saya memakai aplikasi rdfce.ext
3) Setelah menemukan file rdfce.ext maka program akan menjalankan modul COPYFILE untuk menyalin isi dari text dan gambar
4) Kemudian program akan mencompile aplikasi dan mengeluarkan file output sesuai dengan
nama file…kalau disini defaultnya test.exe

2. Compiler Construction

Teknik kompilasi telah lama diberikan di lingkungan pendidikan
tinggi bidang komputer di Indonesia. Pembahasan dalam mata kuliah ini
biasanya berkisar pada teori automata, teori kompilasi, teori grammar.
Praktek teknik kompilasi pun telah diberikan di lingkungan
laboratorium, walau biasanya masih terbatas pada demonstrasi hal teori,
ataupun sekedar pengenalan kompiler yang ada atau banyak digunakan.
Beberapa universitas telah mulai memperkenalkan penggunaan perangkat
pembangun kompiler.
Telah banyak mahasiswa menggunakan dan memanfaatkan
compiler/interpreter, tapi saat ini masih belum banyak muncul nama
programmer Indonesia yang terlibat dalam proyek pembuatan
compiler/interpreter. Mungkin hanya KILANG nya Prof. Dali S Naga (BASIC
Indonesia), yang sempat terdengar, sayang sekarang sudah tidak ada
jejaknya. Mungkin merilis KILANG dalam bentuk GPL seperti BWBASIC,
adalah suatu langkah menarik untuk terus mengembangkan KILANG ini lebih
lanjut.
Memang ada sekelompok programmer Indonesia yang sempat akan merilis
bahasa pemrograman “BATAK” tetapi hingga saat ini belum terdengar
kembali. Bahasa pemrograman, JAVA, BALI, MADURA, hanyalah namanya saja
yang berbau Indoensia, tapi sedikit atau malah tidak ada keterlibatan
pengembang dari Indonesia.
Tentu saja akan timbul pertanyaan “apa yang salah dalam pengajaran
kompilasi ???” (INGAT SAYA TIDAK INGIN MENDISKREDITKAN SIAPAPUN DALAM
PERNYATAAN INI). Hanya mencoba mencari langkah perbaikan yang mungkin
bisa diterapkan.
Walaupun sedikit sekali atau nyaris tidak ada “lowongan pekerjaan”
yang membutuhkan kemampuan mengembangkan compiler ini (silahkan baca di
koran ataupun majalah), bukan berarti pengetahuan itu sama sekali tak
dibutuhkan dalam dunia pemrograman sehari-hari. Pada dasarnya
pengetahuan pembuatan kompiler (compiler construction) ini merupakan
pengetahuan dasar komputasi yang sangat baik sekali. Pengetahuan ini
dimanfaatkan pada beragam aplikasi nantinya. Misal teknik parsing,
pengenalan pola teks, optimasi kode dan lain sebagainya. Bahkan suatu
database engine pun di bagian “front end” selalu menggunakan parsing
ini. Pengetahuan tentang kompilasi akan dapat memberikan landasan bagi
programmer untuk menyusun program yang efektif dan efisien.
Ketika seseorang melakukan pemrograman, sebetulnya secara tidak
sadar dia akan melakukan proses penambahan suatu bahasa. Misal
pembuatan suatu fungsi (ataupun prosedur) pada dasarnya merupakan suatu
proses “penambahan kosa-kata” dari bahasa pemrograman tersebut. Dari
yang tadinya tidak memiliki fungsi tersebut hingga akhirnya ditambahkan
suatu “vocabulary” untuk melakukan suatu fungsi tersebut. Untuk itulah
pemahaman penyusunan kompiler merupakan suatu dasar yang utama dalam
bidang ilmu komputer.
Kesenjangan Teori dan Praktek
Pada kasus pemahaman teknik kompilasi seringkali mahasiswa memiliki gap
antara pemahaman teori yang mendasari pembuatan kompiler, lalu masalah
parsing, scanner (bukan scanner yang buat men-scan gambar atau photo)
serta “bagaimana menulis compiler/interpreter sesungguhnya (misal BASIC
interpreter).
Ketika bicara kompiler, rata-rata pengetahuan mahasiswa/lulusan
bersifat umum yaitu “trampil” menggunakan Integrated Development
Environment (IDE) berbasiskan GUI. Bahkan pengetahuan pemakaian “make”,
“autoconf”, pun masih langka dipahami para mahasiswa (termasuk
mahasiswa Univ Gunadarma). Sedangkan ketika mereka bicara teori, yang
terjadi hanyalah “hafalan” teori-teori otomata, parsing, grammar.
Keterkaitan antara keduanya masih belum terjalin dengan mesra.
Sebelum dianggap menyalahkan siapa-siapa termasuk menyalahkan
mahasiswa (salah satu kambing hitam favorit para dosen), saya mencoba
menguraikan permasalahan ini. Ketidak-tertarikan para mahasiswa
mempelajari bidang pembuatan kompiler ini mungkin didasarkan pada
pelajaran teknik pembuatan kompiler yang sarat dengan pemahaman teori
(misal automata, grammar, bahasa formal, matematika diskrit dan
sebagainya).
Teori bagi sebagian besar mahasiswa merupakan “momok” bagi para
mahasiswa dan mereka kurang tertarik mempelajarinya, dianggap hanyalah
pelengkap untuk lulus menjadi saja. Mahasiswa kurang betah atau sabar
mendengar pelajaran teori. Mungkin hal ini disebabkan (sengaja saya
gunakan kata “mungkin” karena belum pernah dilakukan survei atau
penelitian secara khusus) beberapa hal antara lain :
Para mahasiswa Indonesia tidak tertarik teori, karena merasa tidak
ada manfaatnya pelajaran teori tersebut. Tidak dipungkiri dunia
komputer (lapangan pekerjaan) masih membutuhkan orang-orang dengan
“skill praktis” sehingga kebutuhan teori ini tidak dirasakan ada. Jelas
ini menunjukkan seberapa “jauh” yang namanya industri TI di Indonesia.
TI di Indonesia secara umum barulah berkembang pada “menjual produk TI”
ataupun konfigurasi dan perkembangan yang bersifat “kustomisasi luar”.
Rasa ketertarikan terhadap teori ini makin hilang, akibat materi yang
diberikan di kelas terlalu jauh dengan kondisi praktis. Artinya ada
“gap” antara teori dengan aplikasi teori tersebut di dunia nyata dalam
bayangan mahasiswa (misal bidang komputer) Sebagai contoh, mahasiswa
komputer mungkin akan tertarik bila tahu bahwa Analisa numeris itu
dimanfaatkan untuk membuat “computer game” Ketimbang kita memberikan
contohnya untuk hal lainnya yang terlalu teori. Begitu juga bila kita
terangkan Turing Machine, atau Automata tanpa keterkaitan dengan
praktek sehari-hari akan membuat mereka hanya menghafal atau malah
tidur di kelas.
Kurikulum ataupun materi pelajaran yang memang tidak memberikan jalinan
antara teori dan praktek. Teori berjalan sendiri-sendiri dan praktek
begitu pula. Teori tidak atau kurang mengajak melihat implementasi dari
teori tersebut (misal source code nyata dari teori itu).
Perangkat bantu yang pada tahun sebelumnya sulit diperoleh di Indonesia
secara massal dan murah. Perangkat bantu yang ada sangat menghabiskan
waktu bila ingin digunakan untuk menyusun sistem kompiler sesungguhnya.
Kurang adanya pengajar yang memahami baik teori dan praktek 8-). Banyak
pengajar yang sangat baik pengetahuan teorinya tetapi minim pengetahuan
prakteknya. Hal ini melanda beberapa mata kuliah teori. Begitu juga
banyak pengajar yang sudah terlalu asyik dengan praktek, malas membahas
teori.

3. C COMPILER

Bahasa C++ emang ribet!! Pusing sendiri gw ngebaca bukunya… Tapi gpp
deh, semua yang gw tau gw tuangin disini.. Dengan begitu gw rasa gw
bisa makin gampang ngingetnya ahahaha
Cara Meng-Compile
pertama2 elo masuk ke Dev-CPP, abis itu pencet file >> new
>> source file. abis itu lo tulis code dibawah, setelah selesai
elo pijit execute >> compile.. tunggu sebentar, abis itu kalo
udah pencet execute >> run… dan selamat! program hello world
pertama lo telah berjalan!
#include // membuat program untuk menampilkan data output ke layar monitor
int main()
// fungsi awal memulai eksekusi program
{
std::cout<< “Selamat Pagi DUNIA!!\n”; //tampilin pesen
system(”pause”); // command dos pause
return 0; // menampilkan bahwa program telah sukses dieksekusi
}
tinggal meng-compile source code tersebut agar menjadi sebuah program “Hello World” sederhana…
sederhana banget yah?? tapi itu adalah basic awal yang lo (gw jg) mesti ngerti bener.
***Berikut adalah penjelasan source diatas
setiap baris yang diberi tanda dua garis miring (//), adalah komen
(comment). Programmer memasukkan comment dalam program untuk membantu
orang lain dalam memahami program tersebut. Kata2 yang ada didalam
comment bakalan di abaikan oleh compiler. Comment yang dimulai dengan
(//) disebut dengan komen-satu-baris (single-line comment) karena
comment itu berakhir di akhir baris. Sedangkan comment dengan
menggunakan lebih dari satu line menggunakan tanda /* dan berakhir
dengan */.
#include
Disebut Preprocessor directive, yang merupakan sebuah pesan ke prosesor
C++. Baris yang dimulai dengan # diproses dolo sama prepocessor sebelum
di compile. Line ini ngasih tau preprocessor untuk mengikut sertakan ke
dalam program input/output stream header file (keluar-masuk) atau .
File ini harus di ikut sertakan dalam setiap program agar bisa
melakukan input/output..
4. Interpreter dan Compiler
Interpreter
Pada bahasa yang menggunakan interpreter, ada suatu program besar yang
mendiami memori komputer secara terus menerus. Jika dilakukan
pengetikan sebaris program, misalnya suatu pernyataan BASIC, maka
interpreter ini akan mengawasi proses pemasukannya lalu menambahkan
baris tersebut kedalam program yang tadi sudah tersimpan dalam memori.
Ketika menjalankan program tersebut, interpreter akan memeriksa program
baris demi baris dan menterjemahkannya ke dalam bahasa mesin
(satu-satunya bahasa yang dapat dimengerti oleh microprocessor)
selanjutnya meminta komputer melaksanakan terjemahan itu kemudian
melakukan proses yang serupa untuk baris program berikutnya
Bahasa terinterprestasi cocok untuk pengembangan program cepat karena
programmer dapat menulis program dan langsung mengeksekusinya serta
melihat hasilnya. namun demikian bahasa ini memiliki beberapa kelemahan
:
proses eksekusinya lamban karena interpreter harus menterjemahkan tiap
baris program kedalam bahasa mesin setiap kali program dieksekusi.
Program tetntunya akan berjalan lebih cepat jika seluruh bagian program
diterjemahkan lebih dahulu sebelum dieksekusi,
harus adanya interpreter dalam memori komputer pada saat ingin
menjalankan program. Contoh untuk kasus ini adalah disertakannya
interpreter BASIC dalam PC 8088.
Compiler
Dalam bahasa terkompilasi, keseluruhan program atau sub program
diterjemahkan ke dalam bahasa mesin sekaligus. Proses pengetikan dapat
dilakukan dengan menggunakan pengolah kata, disisi lain terdapat
program terpisah yang disebut compiler yang menterjemahkan berkas
sumber ini menjadi berkas lain dalam bentuk bahasa mesin. Adapula
compiler yang menyediakan editor sendiri seperti Turbo C dari Borland.
Dedicated for Light Intermutimedia
Perusahaan Software Pulsa.

5. KOMPILASI KERNEL

Untuk seting IP Masquerade, langkah standar pertama yang harus
dilakukan adalah kompilasi ulang kernel Anda untuk mendukung IP
Masquerade. Pada binary Slackware SuSE dan RedHat yang dipergunakan di
buku ini, kompilasi kernel tidak diperlukan karena sudah otomatis
mendukung IP Masquerade.
Pilihan yang perlu dikompilasi, dengan menjawab YES pada pilihan berikut :
CONFIG_EXPERIMENTAL
CONFIG_MODULES
CONFIG_NET
CONFIG_FIREWALL
CONFIG_INET
CONFIG_IP_FORWARD
CONFIG_IP_FIREWAL
CONFIG_IP_MASQUERADE
CONFIG_IP_MASQUERADE_IPPORTFW
CONFIG_IP_MASQUERADE_IPAUTOFW
CONFIG_IP_MASQUERADE_ICMP
CONFIG_IP_ALWAYS_DEFRAG
CONFIG_DUMMY
CONFIG_IP_MASQUERADE_MFW
Setelah itu ikuti dengan kompilasi modul.
# make modules
# make modules_install
Kualitas dari Compiler
–          Waktu yang dibutuhkan untuk kompilasi tergantung dari algoritma compiler dan pembuat (compilator) Compiler itu sendiri.
–          Kualitas dari object program yang dihasilkan dari ukuran yang dihasilkan.
–          Fasilitas-fasilitas integrasi yang lainnya yaitu IDE (Integrated Development Environment)

F.   Struktur Compiler
Keterangan
–          Lexical Analyzer = scanner, syntax dan intermediate code merupakan fungsi analisis dalam compiler, yang bertugas mendekomposisi program sumber menjadi bagian-bagian kecil.
–          Code generation dan code optimization adalah merupakan fungsi synthesis yang berfungsi melakukan  pembangkitan/pembuatan dan optimasi program (object program).
–          Scanner adalah mengelompokan program asal/sumber menjadi token.
–          Parser (mengurai) bertugas memeriksa kebenaran dan urutan dari token-token yang terbentuk oleh scanner.

Lexical Analysis (scanner) Berhubungan dengan bahasa
–          Mengidentifikasi semua besaran yang membuat suatu bahasa.
–          Mentrasformasikan ke token-token.
–          Menentukan jenis dari token-token.
–          Menangani kesalahan.
–          Menangani tabel simbol.
–          Scanner, didesign untuk mengenali –  keyboard, operator, indentifiter.
–          Token : separates characters of the source language into group that logically belong together.
–          Misalnya : konstanta, nama variable ataupun operator dan delimiter.
Lexical Analysis (Besaran Leksikal)
–          Identifiar dapat berupa keyboard atau nama kunci, seperti IF, ELSE, BEGIN, END, INTEGER, INT, FLOAT.
–          Konstanta : besaran yang berupa bilangan bulat, bilangan pecahan, boolean, karakter, string dan sebagainya.
–          Delimiter berguna sebagai pemisah/pembatas, seperti kurung-buka, kurung-tutup, titik, koma, titik-dua, titik-koma, white space.

G.   Error Handling
Kesalahan Program
Kesalahan Leksikal
–       Kesalahan dalam mengetik/mengeja
–       Misal THEN dituliskan dengan TEN atau THN

Kesalahan Sintaks
–       Misalnya dalam operasi aritmatika dengan tanda kurung yang jumlahnya kurang, contoh A:= X + (B+D).
Kesalahan Semantics
–       Tipe data yang salah
–       Variable belum didefinisikan

Penanganan Kesalahan
Langkah-langkah penangan kesalahan :
–       Mendeteksi kesalahan
–       Melaporkan kesalahan
–       Tindak lanjut perbaikan
Misal : compiler menemukan kesalahan yang bisa meliputi :
–       Kode kesalahan
–       Pesan kesalahan dalam bahasa alami
–       Nama dan atribut identifier
–       Contoh : error 162 jumlah : unknow identifier
Reaksi Terhadap Kesalahan
Ada beberapa reaksi yang dilakukan oleh  compiler :
Reaksi-reaksi yang tidak dapat diterima
–       Compiler crash : berhenti atau hang
–       Looding : compiler tidak bisa berhenti
–       Menghasilkan obyek program yang salah : berbahaya bisa diketahui/muncul setelah program dieksekusi.
Reaksi-reaksi yang dapat diterima
–       Reaksi yang sudah dapat dilakukan : compiler melaporkan error seperti, recovery (pemulihan), repair (perbaikan).
–       Reaksi yang belum dapat dilakukan : compiler mengoreksi kesalahan, menghasilkan obyek program sesuai yang diinginkan program, compiler memiliki kemampuan untuk mengetahui maksud dari pemrograman, belum diimplementasikan pada program.

Reaksi yang benar, tapi kurang dapat diterima dan kurang bermanfaat
–       Compiler menemukan kesalahan pertama melaporkannya lalu berhenti.
–       Pemrogram membuang waktu untuk melakukan pengulangan compiler untuk setiap kali terdapt sebuah error.
Error Recovery
Bertujuan mengembalikan parser ke kondisi stabil agar supaya dapat melanjutkan proses persaign ke posisi selanjutnya.
Mekanisme Ad Hoc
–       Recovery yang dilakukan tergantung dari isi pembuat compiler
–       Tidak terliat pada suatu aturan tertentu
–       Disebut juga dengan istilah perpose error recovery
Syntax Directed Recovery
Second error recovery
Contaxt sensitive recovery
Error Repair
Memperbaiki kesalahan dan membuat source program valid (memodifikasi)
–       Mekanisme Ad Hoc : tergantung pada sipembuat compiler
–       Syntax directed repair.
contohnya :

1.      Diketahui persamaan sebagai berikut :
Z := (A+2/B2)*C
Dari persamaan tersebut, buatlah menjadi bentuk :
a.      Triple Notation
b.      Quadruple Notation
c.      Koda Antara Assembly Accumulator Tunggal
  Z := (A+2/B2)*C
           1)     Triple Notation
a.      *, B, B
b.      +, A, 2
c.      /, 2, 1
d.      *, 3, C
e.      :=, Z, 4
       2)     Quadruple Notation
a.      *, B, B, T1
b.      +, A, 2, T2
c.      /, T2, T1, T3
d.      *, T3, C, Z
       3)     Kode Antara Assembly Accumulator Tunggal
a.      LOAD     B
MUL       B
STO        T1

b.      LOAD     A
ADD        2
STO        T2

c.      LOAD     T2
DIV         T1
STO        T3

d.      LOAD     T3
MUL       C
STO        Z

Komentar