
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_FIREWALL
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
Kompilasi Kernel
22.22 | Label: Teknik Compiler | 0 Comments
Pengenalan bahasa C
![]()
Petualangan si Dudun di dunia pemrograman baru saja dimulai. Ia sering bertanya-tanya kepada siapa pun yang ia rasa sudah lama berkecimpung di dunia pemrograman, dari bahasa apakah sebaiknya ia belajar. Kebingungan si Dudun bukannya tanpa alasan, sekarang sudah terdapat banyak sekali bahasa pemrograman di dunia. Dari hasil riset dan observasinya (ehm.. kecil-kecilan) ia mendapatkan bahwa bahasa yang sering menjadi dasar dari bahasa pemrograman lain adalah bahasa C.
Bahasa C sebenarnya berasal dari bahasa B yang dikembangkan lebih lanjut oleh Dennis Ritchie sekitar tahun 1970-an. Semakin lama bahasa C semakin populer sehingga banyak pihak yang membuat berbagai versi dari bahasa ini untuk komputer mikro mereka masing-masing. Pada tahun 1983, ANSI (American National Standards Institute) menetapkan standar ANSI untuk bahasa C.
Fungsi dalam bahasa C
Seperti bahasa pemrograman lainnya, program yang ditulis dengan bahasa C mempunyai struktur. Secara umum program dengan bahasa C terdiri dari satu fungsi atau lebih.
“Lalu fungsi mana yang akan dijalankan terlebih dahulu?”, tanya si Dudun.
“Fungsi yang dijalankan terlebih dahulu adalah fungsi main()”.
Fungsi main()harus ada dalam sebuah program C. Kemudian dari fungsi ini kita bisa memanggil fungsi-fungsi lain yang diperlukan sesuai dengan tujuannya. Setiap fungsi dalam bahasa C ditandai dengan penulisan nama fungsi diikuti dengan definisi fungsi di dalam tanda kurung kurawal ({ dan }).
main()
{
// definisi fungsi
}
fungsi_lain()
{
//definisi fungsi
}
Fungsi-fungsi lain (selain fungsi utama) dapat diletakkan pada satu file yang sama dengan fungsi utama atau dituliskan di dalam file library. Jika fungsi tersebut dimasukkan ke dalam file library, maka nama file tersebut harus dilibatkan ke dalam program yang menggunakannya dengan preprocessot directive #include.
“Apaan tuh?”, Tanya si Dudun.
“Tenang saja, entar juga nyampe kok. Sabar ya..”
Mulai menulis kode
Akhirnya si Dudun akan memulai menulis program dengan bahasa C. Namun ia bingung, bagaimana sih sebenarnya cara membuat program itu. Dimana harus diketik, lalu habis itu diapakan tulisan tersebut. Ia pun mulai menjelajah untuk mendapatkan jawabannya. Beruntunglah ia, akhirnya semua teka-teki telah terpecahkan.
Sebelum dieksekusi, kode dalam bahasa C harus terlebih dahulu di-compile. Kode bahasa C yang berekstensi *.c (* berarti apapun, misal hello.c, apakabar.c, dll) di-compile oleh suatu compiler untuk menjadi sebuah file yang bisa dieksekusi. File yang bisa dieksekusi ini berekstensi *.exe (dalam Windows).
“Tunggu dulu sebentar. Apakah itu compiler?”, Tanya si Dudun penasaran.
“Compiler adalah sebuah program yang menerjemahkan kode ke dalam bahasa mesin sehingga dapat dieksekusi”.
Compiler untuk bahasa C yang bebas untuk digunakan salah satunya adalah GCC (GNU C Compiler).
“Lalu bagaimana cara kompilasinya?”, Tanya si Dudun.
Untunglah banyak sekali orang pandai dari seluruh dunia yang membuat suatu lingkungan pengembangan terpadu (IDE) untuk memudahkan pemula seperti kita untuk belajar bahasa C.
“IDE?”, Tanya si Dudun sambil garuk-garuk kepala.
IDE atau Integrated Development Environment adalah suatu lingkungan terpadu yang berfungsi membantu mempercepat pembuatan program. Di dalam IDE ini biasanya sudah terdapat editor dan compiler yang dibutuhkan. \IDE untuk bahasa C yang bebas untuk digunakan adalah Dev C++.
“Ok, aku dah dapet. Trus gimana programnya? Kasih contoh dong..”, si Dudun tak sabar ingin segera mulai membuat program.
Baiklah, kita akan membuat program yang sederhana. Program awal yang sangat terkenal di dunia pemrograman internasional.
“Program hello world?”, tebak si Dudun.
“Benar! Ayo kita mulai!”
// hello.c
#include
void main()
{
printf(“Hello World\n”);
System(“PAUSE”);
}
“Cuman segini??”, Tanya si Dudun tak percaya.
“Untuk saat ini segini saja dulu. Tapi kamu udah ngerti blum maksudnya??”
“ehmm… sebenarnya sih ga ngerti. Kok kayak bahasa planet ya?”, kata si Dudun *garuk-garuk.
Kira-kira begini nih penjelasannya programnya.
// hello.c
Baris ini adalah baris komentar, tidak akan di-compile oleh compiler. Tanda // menandakan komentar satu baris. Artinya kata-kata yang berada pada baris yang sama dengan tanda // dianggap sebagai komentar, sehingga tidak di-compile.
Selain tanda //, ada juga tanda /* … */. Ini berarti kata-kata yang berada di antara tanda /* dan */ akan dianggap sebagai komentar. Misal:
/*
Di sini adalah komentar
Di sini masih komentar
*/
Dua baris yang berada di antara tanda /* dan */ akan dianggap sebagai komentar.
#include
Seperti yang telah dijelaskan di atas, program hello.c ini mengambil referensi library ke file header stdio.h. Di dalam file header ini terdapat berbagai macam fungsi input dan output standar dari bahasa C.
void main()
Baris di atas adalah deklarasi dari fungsi. Baris tersebut mengatakan kepada komputer bahwa kita akan membuat fungsi dengan tipe kembali void bernama main tanpa menggunakan parameter.
Tipe kembali adalah tipe data yang akan dikembalikan oleh sebuah fungsi.
“Tipe data? Dikembalikan oleh fungsi? Tanpa parameter?”, Tanya si Dudun kebingungan.
Di dalam dunia komputer, setiap data memiliki tipe. Misalkan int (bilangan bulat), float (bilangan pecahan), char (karakter), dan sebagainya. Penjelasan mengenai tipe data akan dijelaskan lebih lanjut nanti pada bagian tipe data.
Sekarang mengenai tipe kembali. Misalkan kita memiliki sebuah fungsi, katakanlah fungsi sinus. Fungsi ini akan kita simpan ke sebuah variabel, misalkan y. Kalau kita notasikan sebagai berikut:
y = x +5
Maka x+5 akan memberikan suatu nilai atau dengan kata lain mengembalikan suatu nilai. Misalkan kita anggap bahwa nilai yang akan kita masukkan adalah bilangan bulat, maka kita akan menggunakan tipe data integer. Nilai x pada x+5 adalah nilai yang dimasukkan oleh pengguna dan nilainya dapat berubah-ubah. Inilah yang kita sebut sebagai parameter.
Sehingga jika kita menuliskan fungsi tersebut dalam bahasa C, kira-kira begini
int fungsi(int x)
{
// penjelasan fungsi
}
Hal ini akan dijelaskan lebih detail pada bagian fungsi.
Jadi void main() berarti fungsi main ini tidak akan mengembalikan suatu nilai (void).
Lanjut ke dalam baris program:
pritnf(“Hello world\n”);
Baris ini berarti program memanggil suatu fungsi printf yang berada dalam library stdio.h. Fungsi printf ini berfungsi menampilkan parameter yang diterimanya di layar. Dalam hal ini, parameternya adalah sebuah kalimat “Hello world\n”.
“Tapi kok setelah di-compile dan di-eksekusi keluarnya cumin Hello World ?”, Tanya si Dudun.
Oh ya. Tanda \n itu adalah escape character untuk new line atau ganti baris. Kursor nanti akan berada satu baris di bawah tulisan tersebut berada. Tenang saja, nanti juga akan dijelaskan lebih lanjut kok.
System(“PAUSE”);
Baris ini memanggil fungsi untuk menahan tampilan sementara sebelum program menutup dirinya setelah di-eksekusi. Sehingga kita masih sempat melihat hasil dari program kita sebelum program tersebut selesai dieksekusi.
Hal yang perlu diperhatikan dalam membuat program dengan bahasa C adalah bahwa bahasa ini bersifat case sensitive dan untuk setiap statementnya diakhiri dengan tanda titik koma (;). Case sensitive berarti bahwa setiap karakter kapital berbeda dengan karakter biasanya. Artinya printf dan Printf adalah dua buah entitas yang berbeda.
22.00 | Label: Teknik Compiler | 1 Comments
Menggunakan GNU Compiler Collection

GNU Compiler Collection pertama kali di tulis oleh Richard M Stallman, yang awalnya hanya untuk meng-compile program yang di tulis dengan C. GCC tidaklah hanya tersedia pada Linux tetapi juga pada sistem yang Unix-Like lain seperti Freebsd, Netbsd,Openbsd seperti halnya pada Windows via Cygwin, Mingw32 dan lain2. GCC mendukung suatu platform yang luas seperti Intel x86 Arsitektur, AMD x86-64 , Alfa dan SPARC arsitektur.
GCC akan menjadi sangat penting ketika kita membutuhkannya untuk meng-compile sebuah program atau ingin meng-install sebuah program yang berbentuk source. Dalam Linux system GCC di gunakan sebagai compiler utama dalam meng-compile program2nya, bahkan kernel pun menggunakan GCC untuk meng-compile. Pada beberapa Distro ada yang menyertakannya secara default dalam systemnya paket GCC dan ada beberapa distro yang mungkin untuk tujuan desktop tidak menyertakannya. Untuk mengetahui apakah di system anda sudah tertanam GCC cek dengan perintah berikut.
Debian Family
# dpkg -l | grep gcc
Redhat Family
# rpm -q gcc
Slackware Family
# (sorry aku ga’ apal)
Atau
# gcc -v
Kalau sudah ada kita siap untuk codding, Jika belum maka kita mengambil paket dari mirror distribusi yang kita gunakan, karena kita tidak bisa mengi-compile GCC dari source tanpa GCC itu sendiri :D.
Debian Family
# apt-get install gcc jika offline # dpkg -i [file_paket_gcc]
Redhat Family
# rpm -ivh [paket-gcc]
Slackware Family
# pkgtool -i [paket_gcc]
Setelah beres kita lanjutkan yah, kita coba buat 2 buah listing program. yang pertama helloword.h
// helloworld.h
#define COUNT 2
static char hello[] = "hello world";
Listing yang kedua adalah helloword.c
// helloworld.c
#include
#include "helloworld.h"int main(){
int i;for(i = 0;i <= COUNT; i++)
{printf("%s - %dn",hello,i);
}return 0;
}
Compile program diatas dengan perintah…
# gcc -v -o helloworld helloworld.c
Kemudian program binary dapat di exekusi dengan perintah ./helloword
Sekian tutor kecil dan sepele-nya, tetap semangat belajar codding dengan codding kita dapat beberapa keuntungan-nya belajar C.
21.25 | Label: Teknik Compiler | 0 Comments
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
21.08 | Label: Teknik Compiler | 0 Comments
Virus Tutorial : MEMBUAT COMPILER SEDERHANA DENGAN VB

Hallo...ketemu lagi ma aat shadewa...
Kali ini bakalan membahas soal compiler....emmm....tapi sederhana aja sih....soalnya kita
juga buildernya pakek visual basic....so...kayaknya gak kayak visual c++ yang emang bisa
jadi compiler karena OOP-nya ituh....gitu deh...tapi senoga bisa berguna buat pengetahuan
membuat virus dan program buat kalian....okeh....just check it out!!!!!!
COMPILER
Apa sih compiler ituh?????apa yah....kalo secara ilmiah saya gak bisa jelasin tapi 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
Mudah kan.....
PENERAPAN
Hal jahat :
Bisa diterapkan di aplikasi virus, misalkan untuk memberi penanda pada virus yang akan
digandakan. Misalnya virus a diberi penanda karakter A, otomatis untuk menyebarkan virus
tersebut agar tidak terdeteksi antivirus, maka kita harus memberi penanda lain. Dengan
menjalankan modul compiler tersebut kita dapat memberi penanda virus A dengan karakter B.
Tul gak.
Hal Baik:
Bisa diterapkan di aplikasi pembunuh virus seperti show kill process. Anda bisa donlot
showkillprocess di www.virologi.info. Tapi biasanya sebuah virus sudah menandai, jika
showkillprocess.exe berjalan, maka program tersebut akan dimatikan (Seperti brontok yang
menendang apliaksi regedit). Nah dengan menjalankan modul compiler ini kita dapat mengubah
isi caption dari program showkillprocess.exe sehingga caption-nya berbeda dan aplikasi
tersebut tidak ditendang oleh virus tersebut.
BEDAH PROGRAM
di dalam source code ada sebuah variabel :
Dim PropBag As New PropertyBag
- yang berarti variabel bebas. Variabel ini berisi caption, gambar dan password yang akan
diberikan kepada file compiler tersebut.
With PropBag
.WriteProperty "Caption", txtCaption.Text
.WriteProperty "Text", txtText.Text
.WriteProperty "Picture", imgPic.Picture
.WriteProperty "Protected", chkPass.Value
.WriteProperty "Password", txtPass.Text
End With
- Nah disini kita bisa mengeset apakah caption, gambar atau password.
FileCopy App.Path & "\rdfce.ext", App.Path & "\" & txtExeFile.Text
- Menyalin file sumber dan meng-compile sesuai caption, gambar dan password
Open App.Path & "\" & txtExeFile.Text For Binary As #1
BeginPos = LOF(1)
varTemp = PropBag.Contents
Seek #1, LOF(1)
Put #1, , varTemp
Put #1, , BeginPos
Close #1
- Membuat file compiler sesuai nama yang diinginkan, kalau di sini defaultnya test.exe
Nah coba jalankan program tersebut, kemudian isi caption, gambar and password sesuai
keinginan deh...okay!!!!!
SOURCE CODE DAN PROGRAM DAPAT DIDOWNLOAD DI SINI :
a href="http://www.virologi.info/download/compiler.zip">SOURCE CODE DAN PROGRAM COMPILER
SELAMAT MENCOBA.....
21.02 | Label: Teknik Compiler | 0 Comments
Teknik Kompilasi
Merupakan Teknik dalam melakukan pembacaan suatu program yang ditulis dalam bahasa sumber, kemudian diterjemahkan ke dalam suatu bahasa lain yang disebut bahasa sasaran.
Dalam melakukan proses penerjemahan tersebut, sudah barang tentu kompilator akan melaporkan adanya keanehan-keanehan atau kesalahan yang mungkin ditemukannya. Proses penerjemahan yang dilakukan oleh kompilator ini disebut proses kompilasi (compiling).
Bila dipandang sepintas lalu, maka akan timbul beranekaragam kompilator yang dapat dibuat,
- Bahasa Sumber seperti bahasa FORTRAN, PASCAL, C dan juga bahasa-bahasa lainnya yang sifat dan pemakaiannya agak spesifik atau khusus, seperti bahasa untuk program DBASE, SPSS dan lain sebagainya.
- Bahasa Sasaran dapat berupa bahasa sumber lain seperti C, FORTRAN dan lain sebagainya atau Bahasa Mesin (Machine Language) yang digunakan oleh suatu prosessor mikro atau sumber komputer besar maupun komputer super.
Sejarah perkembangan suatu kompilator sudah dimulai sejak lama, yaitu pada saat mulai ditemukannya komputer pada awal 1950-an.
Sejak waktu tersebut teknik dan cara pembentukan suatu kompilator telah berkembang dengan sangat pesat dan pembentukkan suatu kompilator dapat dilakukan makin mudah.
Demikian pula program bantu (tools) untuk membuat suatu kompilator sudah dapat diperoleh sehingga pembentukan suatu kompilator dapat dilakukan dengan cepat.
Kompilator pertama yang dibuat adalah kompilator untuk bahasa FORTRAN yang pada saat itu dikembangkan dengan memakan sejumlah tenaga ahli yang setara dengan pekerjaan yang dilakukan oleh 18 orang.
Dengan adanya program bantu dan tata cara pembentukan yang sistematis dan tertata dengan baik serta pendefinisian struktur bahasa yang cermat, maka suatu kompilator untuk bahasa yang terstruktur seperti PASCAL atau C dapat dikembangkan.
Proses kompilasi dari suatu kompilator pada dasarnya dapat dibagi ke dalam 2 bagian utama yaitu bagian analisis dan bagian sintesis.
- Tahap analisis program yang ditulis dalam bahasa sumber dibagi dan dipecah ke dalam beberapa bagian yang kemudian akan dipresentasikan ke dalam suatu bentuk antara dari program sumber.
Operasi-operasi yang dilakukan oleh program sumber ditentukan dan dicatat dalam suatu struktur pohon (tree) yang disebut dengan nama pohon sintaks (sintax tree) Dalam hal ini setiap nodal pada tree tersebut menyatakan suatu operasi, sedangkan anak dari nodal (titik) tersebut memberikan argumen yang diperlukan
Secara umum proses dalam tahap analis terdiri dari 3 bagian utama, yaitu
a. Proses analisis leksikal
b. Proses analisis sintaktik
c. Proses analisis semantik
- Tahap sintesis yang berikutnya program sasaran dibentuk berdasarkan representasi antara yang dihasilkan pada tahap analisis.
Untuk tahap sintetis terdiri dari 2 bagian utama, yaitu
a. Proses yang menghasilkan kode (code generator)
b. Proses optimasi kode (code optimizer)
Sebelum Bahasa sasaran dapat dihasilkan, dalam melakukan ini tiap bagian utama akan berhubungan dan berkomunikasi dengan suatu berkas tabel yang disebut tabel simbol (symbol table) yaitu suatu tabel yang berisi semua simbol yang digunakan dalam bahasa sumber.
Selain kompilator masih diperlukan beberapa program lainnya sebelum dapat dibentuk bahasa sasaran yang dapat dijalankan. Seperti suatu bahasa sumber dapat dituliskan dalam beberapa modul yang terpisah dan disimpan dalam beberapa file yang terpisah.
Untuk menanggulangi hal ini, maka suatu program khusus yang disebut dengan suatu praprosesor digunakan untuk mengumpulkan modul-modul yang saling lepas ini ke dalam suatu program baru. Praposesor dapat pula melengkapi singkatan-singkatan atau ungkapan-ungkapan maupun kependekan-kependekan yang digunakan dalam bahasa sumber seperti pendefinisian makro dan lain sebagainya.
10.43 | Label: Teknik Compiler | 0 Comments
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.
Saat ini dengan ketersediaan beragam perangkat bantu bebas (GPL) maka proses mengajarkan teori ini dapat dilakukan secara lebih menarik. Misal untuk menerangkan tentang konsep mesin Turing yang abstrak itu, dapat juga digunakan suatu simulator. Memang mesin Turing dapat juga di"demonstrasikan" dengan menggunakan "tissue WC - tissue gulung" seperti dalam buku Computer Power and Human Reason karangan Joseph Weizenbaum. Tapi jelas akan lebih mudah bila digunakan program bantu yang memungkinkan siswa merancang "instruction set" dan menjalankan instruction set, dan program yg didisain untuk mesin "khayalannya" itu.
Ada juga simulator (program) yang akan menjalankan mesin Turing sesuai masukan yang diberikan pengguna. Misal dapat diperoleh di http://www.csee.umbc.edu/~squire/cs451_sim.html#TM
Program ini tertulis dalam C++. Menerima masukan dari source kode. Sayangnya program ini tidak memberikan simulasi secara visual. Simulasi secara visual akan menarik siswa tahun ke 2-3 di Indonesia. Beberapa simulator yang memiliki tampilan visual dapat didownload dari Internet, antara lain:
- Simulator Mesin Turing. Program ini memiki GUI berbasiskan Gtk.
http://www.nuclecu.unam.mx/~arturo/gTuring/. - Visual Turing. Suatu IDE yang memungkinkan pengguna mengedit, menjalankan mesin Turing. Dengan editor visual yang memberikan fungsi Cut, Copy&Paste maka akan membantu proses simulasi. Mesin dapat juga dijalankan dengan breakpoint, step by step dan variabel dapat diperiksa.
http://www.cheransoft.com/vturing/ - Automaton Simulator. Program ini memungkinkan disimulasikan beberapa mesin teori termasuk deterministic finite automata, nondeterministic finite automata, deterministic push-down automata, Turing machines. Tertulis dalam bahasa JAVA.
http://www.users.csbsju.edu/~cburch/proj/autosim/
Simulator Prosesor
Di samping simulator mesin teori, seringkali dalam memahami proses kompilasi perlu penjelasan dari tingkat instruksi di level prosesor. Untuk itu penjelasan akan lebih mudah dilakukan bila memanfaatkan suatu simulator prosesor. Memang sebetulnya pengetahuan instruksion set design ataupun simulator ini diperoleh di Arsitektur Komputer. Akan tetapi simulator prosesor ini dapat juga dimanfaatkan untuk memberikan pemahaman teknik pembuatan dan ekseskusi suatu kompilasi. Sehingga tahapan "menjalankan kompiler, dan hasil kompilasi yang dibentuk dapat berupa" :
Program aplikasi bahasa A
|
V
Kompiler/interpreter bahasa A
|
V
Bahasa mesin prosesor X
|
V
Simulator prosesor X
|
V
Sistem Operasi "Host" (misal Windows, Linux dll)
Dengan cara itu mahasiswa dapat mempelajari bagaimana proses kompilasi dilakukan dan bagaimana dijalankan pada mesin virtualnya. Sehingga pengamatan dapat dilakukan dg mudah. Faktor lain adalah dg menggunakan "prosesor virtual" maka kita dapat mendefinisikan :
- Prosesor X adalah suatu prosesor virtual yg sederhana
- Bahasa A merupakan bahasa yg didisain mahasiswa secara sederhana (misal hanya bisa interger, dan operasi sederhana saja)
- Kompiler yg disusun akan menghasilkan "kode biner" untuk proesor X yg sederhana tersebut (misal register terbatas, dan metoda pengalamatan terbatas)
Dengan cara di atas, student tidak dihadapi oleh "instruction set" yang kompleks, dan architecture processor, dan juga bahasa pemorgraman yg rumit. Tetapi konsep kompilasi dapat lebih mudah dipahami secara mendasar. ketimbang harus menggunakan prosesor "real" dan bahasa "real" yang jelas memiliki scope sangat luas.
Berikut ini adalah beberapa simulator prosesor yang dapat dimanfaatkan dalam memberikan pemahaman lebih dalam mengenai teori dan praktis kepada para mahasiswa.
- mic1. mic1 ini berbasiskan Java yang mengimplementasikan arsitektur mikro Mic-1 pada Bab 4 buku Andrew S. Tanenbaum, Structured Computer Organization,
http://www.ontko.com/mic1/ - DLXOS. Merupakan suatu sistem "komputer" yang dijelaskan pada buku Arsitektur oleh Hennessy & Patterson. Sistem ini terdiri dari DLX Processor (instruction set dan spesifikasi), DLX hardware simulator, DLX compiler dan assembler, DLX Operating System. Karena semua tersedia source code, jadi dapat menjelaskan secara gamblang, bagaimana suatu sistem komputer dibangun, dari "prosesor" hingga "sistem operasi".
http://www.cse.ucsc.edu/~elm/Software/Dlxos/index.shtml - MIX. Emulator ini ditulis oleh David A Smallberg (1982), dan mensimulasikan prosesor MIX (yang diteragnkan dalam buku milik Donald Knuth).
http://www.swiss.ai.mit.edu/~adler/MIX/ - MIXAL. Merupakan lingkungan mensimulasikan kerja MIX, MIX adalah model komputer yang merupakan penyederhanaan model CISC (Complex Instruction Set Computer), assembly dari model ini mirip dengan komputer sesungguhnya. Di situ ini terdapat tutorial dan juga SIMULASI GRAFIS.
http://www.gnu.org/software/mdk/mdk.html - MMIX MMIX merupakan prosesor teoritis ciptaan Prof. Donald Knuth, yang merupakan penmgembangan dari MIX. Prosesor bertipe Reduced Instruction Set Computer (RISC).
http://bitrange.com/mmix/
Untuk informasi lainnya tentang prosesor ini dapat dibaca di URL berikut ini
http://www-cs-faculty.stanford.edu/~knuth/mmix.html
http://mmixmasters.sourceforge.net/
Demonstrasi Visual
Untuk mendemonstrasikan beberapa pronsep dasar tentang mekanisme kompilasi, maka dapat juga diginakan beberapa perangkat bantu al:
- Pate. Pate merupakan perangkat bantu visual dan interatkfi untuk melakukan parsing, dan transformasi grammar. Pate dapat menyajikan secara tekstual ataupun visualisasi grafis dari turunan suatu grammar. Pada visualisasi grafis suatu tree parsing akan ditampilkan juga. Ditulis dalam JAVA.
http://www.cs.duke.edu/~rodger/tools/pateweb/ - JFLAP. JFLAP merupakan suatu paket grafis yang dapat digunakan untuk mengajarkan konsep Bahasa Formal dan Teori Automata. Awalnya ditulis dg C/C++ tapi sekarang tersedia dalam Java.
http://www.cs.duke.edu/~rodger/tools/jflap/index.html
Literatur online
Dengan adanya Internet jelas memudahkan kita untuk memperbaiki materi, karena beberapa materi telah ada dan siap di-download (jadi alasan tidak ada dana buat beli buku, bisa dicoret, dan tidak ada sarana buat download bisa diabaikan karena hanya perlu ke kampus Margonda). Kalau alasan "malas baca" ya mau tidak bisa dan tidak perlu dibahas lagi.
Beberapa buku online ataupun materi kuliah berkaitan dengan teknik kompilasi dapat diperoleh di URL berikut ini.
- Let's Build a Compiler, by Jack Crenshaw. Bahasa yang digunakan dalam bukut teks ini adalah PASCAL. Walau sudah cukup lama 1988-1996, materi ini cukup ringan ditulis sebagai pengantar pembuatan kompiler. Tersedia juga berkas siap download dalam format ZIP.
http://compilers.iecc.com/crenshaw/ - Compilers and Compiler Generators an introduction with C++ oleh P.D. Terry, Rhodes University, 1996.
http://scifac.ru.ac.za/compilers/ - Advanced Programming Language Design oleh Raphael Finkel.
http://cseng.aw.com/book/related/0,3833,0805311912+20,00.html - Parsing Techniques - A Practical Guide oleh Dick Grune dan Ceriel J.H. Jacobs
http://www.cs.vu.nl/~dick/PTAPG.html - Introduction to Compilers (University of Manitoba - Canada) Di site ini juga tersedia catatan kuliah, dan slidenya. Sehingga dapat dimanfaatkan setelah dilakukan modifikasi bobot dan bahasanya.
http://www.cs.umanitoba.ca/~cs329/notes.html - Introduction to Compilers. (Brown University) Ini adalah materi kuliah dari Brown University.
http://www.cs.brown.edu/courses/cs126/ - Automata and Formal Language Course. Materi dari Warwick University. Menggunakan JavaCC
http://www.dcs.warwick.ac.uk/~pwg/cs203/cs203index.html - A Bibliography of Compiler Construction
http://www.cs.qub.ac.uk/~D.McKeever/csc303/Reference/Bibliography.html - An Introduction to the Theory of Computation Eitan Gurari, Ohio State University
http://www.cis.ohio-state.edu/~gurari/theory-bk/theory-bk.html - Review of existing Languages
Perbandingan beberapa bahasa pemorgraman. Situs ini memberikan informasi singkat serta URL yang berkaitan dengan bahasa pemrograman.
http://tunes.org/Review/Languages.html - Programming Language Research. Berisi tentang informasi mengenai riset, dan pengembangan bahasa pemrograman.
http://www-2.cs.cmu.edu/~mleone/language-research.html
Tentu saja akan lebih memudahkan bila materi-materi buku tersebut di atas di "mirror" di server Univeristas-universitas. Sehingga memudahkan para dosen/mahasiswa untuk mencari materi. Saya memiliki daftar buku gratis/online lainnya, bila ada yang tertarik.
Perangkat bantu
Tentu saja, setelah perbaikan materi perkuliahan, materi praktikum atau latihan yang diberikan kepada para mahasiswa, sebaiknya disesuikan sehingga mahasiswa dapat lebih mudah mempelajari, bagaimana proses pembuatan suatu kompiler. Mahasiswa sebaiknya diajak bukan saja menggunakan suatu perangkat kompiler, tetapi juga melihat "ke dalam source code" suatu kompiler sesungguhnya. Jangan "silau dan terpaku" dengan bahasa pemrograman yg penuh dg "hype" sehingga tidak mempelajari hal mendasar ini.
Suatu compiler tentu saja biasanya ditulis dengan memanfaatkan bahasa pemrograman lain misal C, atau C++. Untuk memudahkan proses pengajaran bagaimana menulis kompiler, tentu tidak mungkin dilakukan dari awal menulis semua perangkat bantu (misal scanner dlsb). Untuk itu digunakan beberapa perangkat bantu untuk mempermudah proses pembuatan kompiler.
Perangkat bantu yang lazim digunakan untuk memberikan materi compiler biasanya adalah perangkat bantu scanner, lexical analyzer dlsb. Dapat digunakan seperti Flex, Bison, Lex, Yacc. Perangkat bantu ini tersedia secara bebas (FREE), ada yang dapat juga digunakan di atas platform DOS atau Linux yang tak membutuhkan perangkat keras terlalu tinggi. Jadi nggak perlu pakai alasan menunggu upgrade hardware) Beberapa informasi yang berkaitan dengan perangkat bantu ini :
- Free Compiler Construction Tools
http://www.thefreecountry.com/developercity/compiler.html - Gnu C Compilter (GCC). Banyk informasi mengenai compiler (terutama GCC)
http://www.gnu.org/software/gcc/readings.html - Compiler Construction using Flex and Bison
http://cs.wwc.edu/~aabyan/464/Book/ - A Compact Guide to Lex & Yacc by Thomas Niemann
http://epaperpress.com/lexandyacc/index.html - TASSKAF. Bahasa TASSKAF ini merupakan subset dari Java. Dapat disusun suatu program ke byte code yang dapat dijalankan di Java Virtual Machine (JVM). Pada site tersebut juga tersedia informasi materi kuliah dengan LEX, YACC
http://rw4.cs.uni-sb.de/~martin/COMP/TK/ - GENTLE. Gentle ini merupakan perangkat bantu (toolkit) modern untuk menulis compier dan mengimplemntasikannya pada bahasa tertentu. Perangkat bantu ini mendukung semua proses translasi, dari definisi tree sintaks abstrak, pater matching, smart traversal dan lain sebagainya. Toolkit ini telah digunakan secara luas di riest dan industri.
http://www.first.gmd.de/gentle/ - ELI. Merupakan suatu lingkungan pemrograman yang memungkinkan membuat suatu implementasi bahasa pemrograman secara lengkap dari suatu sepsifikasi. Perangkat bantu ini menangani struktural analisis, analisis nama, type, value dlsb dan akan menghasilkan kode C.
http://www.cs.colorado.edu/~eliuser/ - SUIF. Tool ini merupakan perangkat bantu yang digunakan di proyek National Compiler Infrastructure di USA.
http://suif.stanford.edu/suif/suif2/doc/
Pembuatan Modul
Tentu saja adanya pembaharuan materi (upgrade) sering diberi response "Ah.. repot, bagaimana ini, jaman saya dulu kuliah belum belajar ini. Belajar lagi repot, tidak ada waktu". Untungnya saat ini kita sebagai dosen tidak perlu berfungsi sebagai "instruktur murni", cukuplah sebagai fasilitator saja. Yang penting kita mau membaca secara global, dan bersedia menyusun puzzle-puzzle yang dikerjakan oleh para mahasiswa kita.
Nah untuk itu jelas kita bisa mengajak para mahasiswa belajar bersama-sama. Mungkin para dosen tidak perlu "gengsi" untuk menyatakan bahwa tidak menguasai hal praktis A dan mengajak para mahasiswa belajar bersama-sama. Normal koq di jaman ini, di Jerman aja, Profesor bisa dan sah-sah saja ngaku kurang menguasai suatu masalah, dan pada mata kuliah tertentu (biasanya seminar) akan mengerjakan bersama-sama suatu hal dengan mahasiswa.
Metoda itu bisa kita adopsi misal :
- Dosen yg mengajarkan materi sejenis (teknik kompilasi) misal sepakat membuat suatu penambahan materi ini. Semua URL, alat bantu, informasi tambahan dikumpulkan. Akan lebih mudah dan baik bila diletakkan pada suatu web page.
- Dilakukan pembagian tugas ke mahasiswa, dalam hal ini dipilih satu kelompok mengerjakan tugas tertentu, sehingga ketika dikumpulkan dapat menjadi suatu "kumpulan informasi berharga". Jangan lupa dipublikasi secara bebas. Meminta mahasiswa mengerjakan tugas penerjemahan telah biasa dilakukan para dosen. Cara ini dapat juga dilakukan. Setiap kelompok mengerjakan suatu modul kecil.
- Lalu sediakan modul tersebut secara bebas di Internet, sehingga akan digunakan secara luas, dan menjadi "standard pengajaran di Indonesia". Misal sekelompok mengerjakan masalah scanner, sebagian masalah lexical analyser, sebagian membahas ELI atau tool pendisain pemrograman, dan lain sebagainya.
- Bila materi petunjuk ini telah tersedia, mungkin dapat ke tingkat membuat petunjuk praktikum yg menuju ke disain dan penyusunan kompiler. Bisa dimulai misal dengan membuat spesifikasi suatu bahasa pemrograman "rekaan". Lalu menggunakan perangkat bantu bahasa pemgorgraman itu dibuat.
Nah tentu saja bagi kelompok mahasiswa di atas "rata-rata" (misal yang mengikuti lomba ACM) mereka dapat mengkontribusikan kemampuannya di dalam tugas seperti ini.
Selamat bermimipi (eh salah nggak koq, saat ini saya dibantu beberapa rekan di "virtual world" sudah mulai mengkoleksi beberapa petunjuk compiler construction dan tertulis dalam bahasa Indonesia). Ini proyek iseng, dan nggak pakai "SK" 8-), tapi siapa saja yg tertarik mau bergabung silahkan.
Bielefeld, 2 Mei 2002
IMW
10.42 | Label: Teknik Compiler | 0 Comments
C compiler
“Fifty years of programming language research, and we end up with C++?”
Richard A. O’Keefe
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
}
Gyahhaahah selamat DUDE! Lo 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..
int main()
Ini adalah bagian di setiap program C++. Baris setelah main nunjukin itu adalah baris dari program yang disebut fungsi (function). program C++ biasanya terdiri dari satu atau lebih fungsi dan kelas (classes, nanti bakalan kita pelajari lebih lanjut, gw juga blom blajar :p). Satu fungsi dalam setiap program harus merupakan main. Yang hanya mengandung satu fungsi. C++ program mulai meng-eksekusi dari fungsi main, bahkan jika main bukan fungsi pertama dalam program. Sedangkan kata int di samping kiri main menunjukkan kalo main “kembali” ke nilai integer (angka). sebuah kata dalam kode adalah disediakan oleh C++ untuk penggunaan yang spesifik. nanti gw bakal jelasin artinya dari sebuah fungsi ke “kembali ke sebuah nilai” tapi itu entar :D… dan mungkin nanti kita bakalan mendalami hal ini lebih lanjut. untuk sekarang, kita ikut sertakan aja kata int disebelah kiri dari main disetiap program kita.
Tanda kurung kiri ({), harus dimulai di badan (body) dari setiap fungsi. Sedangkan kurung kiri (}), harus ada disetiap akhir badan fungsi.
std::cout<< “Selamat Pagi DUNIA!!\n”;
Ini menyuruh komputer untuk melakukan sebuah aksi yang disebutkan, untuk nge-print string dari karakter huruf yang terdapat diantara dua tanda kutip. Sebuah string kadang2 disebut karakter string (character string), pesan (message) ato sebuah string literal. Tapi sebenernya string sendiri itu apa sih?? string itu adalah seperti yang tadi udah disebut, adalah kata2 di tengah2 tanda kutip. Sedangkan karakter spasi dalam string akan diabaikan oleh compiler.
seluruh baris ini, termasuk std::cout, dan operator (<<), juga string “Selamat Pagi DUNIA!!\n” dan semicolon (;) (gw ga tau bahasa indonya semicolon :D), disebut juga pernyataan (statement). Dalam setiap statement program C++ harus diakhiri dengan semicolon (juga biasa disebut dengan Statement Terminator). Preprocessor Directive (kayak #include) ga diakhiri dengan semocolon. Output dan Input dalam C++ sukses dengan karakter stream. dan ketika di eksekusi akan mengirimkan karakter Selamat Pagi DUNIA!!(\n) ke Standard Output Stream Object (std::cout) yang secara normal tersambung ke monitor. kita akan mendiskusikan std::cout nanti (bahasannya beda lagi, dan gw jg blom blajar :D) yaitu Stream Input/Output.
Sadar ga kalo gw naro std::cout sebelom cout? Ini dibutuhkan ketika kita gunain nama (name) yang kita bawa ke program oleh preprocessor directive #include . Notasi std::cout menunjukan kita menggunakan sebuah nama, dalam hal ini adalah cout yang termasuk “namespace” std. nama cin (standard input stream) dan cerr (standard error stream) juga termasuk namespace std (akan kita bahas nanti). namespaces adalah fiture advanced dalam C++ (otak gw lom nyampe bwkaakakak :)) ). untuk sekarang seh, kita harus ingat untuk memasukkan std:: sebelum cout, cin, dan cerr dalam sebuah program.
Disini bagian yang agak sulit (susah ngerangkai kata2nya :D)tanda operator (<<) disebut Stream Insertion Operator. Ketika program di eksekusi, nilai (value) yang disebelah kiri operator, dan yang kanan (operand), dimasukkan kedalam output stream. Perhatiin arah operator dimana data pergi. Karakter di sebelah kanan operand di tunjukkan persis seperti apa yang ditampilkan di dalam tanda kutip. Tapi karakter \n gak di tampilin di layar monitor. garis miring (\) (blackslash) disebut juga escape character, yang artinya garis baru (newline). hal ini menyebabkan cursor (current screen-possition indicator) untuk bergerak ke awal baris selanjutsnya di atas monitor (kalo mo lebih gampang, sebut aja garis baru, emang bahasa komputer suka bertele2 =)) ). beberapa rangkaian escape character bisa dilihat dibawah..
\n = garis baru, memposisikan kursor ke awal baris. (kayak lo pencet enter aje.)
\t = Horizontal tab.. fungsinya sama kayak elo pencet tab
\r = Carriage Return. bikin layar kursok kembali ke awal (ke apus semua, kecuali diluar escape sequence ini)
\a = Alert. bikin bunyi alarm (cocok buat iseng :)) )
\\ = Blackslash. untuk menghasilkan blackslash (\)
\’ = Single Quote. untuk menghasilkan tanda kutip (‘)
\” = Double Quote. Untuk menghasilkan tanda kutip dua (“)
system(”pause”);
Ini gak laen adalah untuk ngasih perintah pause (berhenti) dalam dos, nanti gw bikinin deh tutornya soal batch file. Untuk sementara gini dolo yeee :D. Ato kalo mau mengerti lebih lanjut, lo coba aja ilangin baris ini, nanti hasilnya akan membuat lo lebih ngerti.
Phew.. capek juga.. sekarang kita sampe ke baris terakhir program kita…
return 0;
Ini digunakan untuk keluar dari sebuah fungsi (exit a function). Ketika statement return digunakan di akhir main, seperti yang ditunjukkan diatas, value 0 menunjukkan kalo program telah berhasil di matikan. Mungkin nanti kita akan mendiskusikan fungsi lebih detail. Untuk sekarang, taro aja statement ini disetiap program (di akhir fungsi), ato compiler akan menghasilkan sejumlah peringatan ke system sebagai. sedangkan kurung kurawal sebelah kanan (}) menunjukkan akhir dari fungsi main…..
10.27 | Label: Teknik Compiler | 0 Comments
Bag II Operator, Deklarasi Dan Tipe Data
2.1 Deklarasi
Dalam setiap penulisan bahasa pemograman deklarasi sangat digunakan apabila dalam penulisan program dibutuhkan indentifier atau tanda pengenal. Indentifier pada umumnya di buat oleh progremmmer yang digunakan untuk mewakili nilai dari suatu object.
Indentifier yang dikenal dalam Delphi adalah label, konstanta, tipe, fungsi, procedure maupun variabel.
2.1.1. Deklarasi Konstanta
Deklarasi konstanta adalah tanda pengenal dalam Delphi yang mempunyai nilai yang sudah tetap. Definisi konstanta diawali dengan kata baku Const diikuti dengan kumpulan indentifier yang diberi sebuah nilai.
Contoh
procedure TForm2.etertulisChange(Sender: TObject);
const
nil1:='30000';
begin
end;
2.1.2. Deklarasi Variabel
Deklarasi variabel adalah tanda pengenal dalam Delphi yang mempunyai nilai yang mana nilai tersebut akan terus berubah selama proses berjalan. Definisi variabel diawali dengan kata baku Var diikuti dengan kumpulan identifier yang diikuti dengan tipe data yang dibutuhkan.
Contoh
procedure TForm2.EpraktekKeyPress(Sender: TObject; var Key: Char);
var
praktek,nil2,nil1 :real;
begin
if (key = #13) then
begin
nil1 := strtofloat(ehtulis.Text);
praktek:= strtofloat(epraktek.Text);
nil2:= 0.4 * praktek;
ehpraktek.Text := floattostr(nil2);
form2.ActiveControl := cmi;
emurni.Text := floattostr(nil1 + nil2);
if nil1 > 60 then
egrade.Text := 'Lulus'
else
egrade.Text := 'Gagal'
end;
end;
2.2 Tipe Data
Secara sederhana tipe data dapat didefinisikan dengan istilah tempat untuk menentukan pemberian nilai terhadap suatu variabel sesuai atau tidak dengan nilai yang diberikan oleh user. Dalam versi lain tipe data juga diartikan sebagai batasan terhadap fungsi tanda pengenal terhadap semua nilai yang diterima. logika yang dapat kita berikan adalah ketika kita menempatkan tanda pengenal harga hanya mengenal angka, maka ketika kita memberikan nilai berupa string maka secara otomatis data tersebut akan ditolak karena nilai tersebut tidak dikenali oleh tipe data yang diberikan.
2.2.1 Tipe Data Numeric Integer
Tipe data integer merupakan tipe data bilangan bulat yang hanya mengenal bilangan decimal. Dimana tipe data Integer tidak mengenal pecahan
Bentuk Umum
Var
Nil1:integer;
Begin
Nil1:=5000;
2.2.2 Tipe Data Real
Tipe data numeric real adalah tipe data dari suatu tanda pengenal selain mengenal bilangan bulat utuh tipe data ini juga mengenal nilai angka yang mengenal pecahan.
Bentuk Umum
Var
Nil:real;
Begin
Nil1:=20,5;
2.2.3 Tipe Data String
Tipe data string merupakan salah satu jens tipe data selain mengenal angak disini tipe data dapat juga mengenla data berupa huruf maupun tanda baca.
Bentuk umum
Var
Nama:string;
Begin
Nama:=’Anton’;
2.2.4 Tipe Data Char
Secara fungsi tipe data char sama dengan tipe data string tetapi dari segi kapsitas ruang diperoleh tipe data char jauh lebih sedikit karena hanya mengenal 1 karakter.
2.3. Dasar umum merancang Program aplikasi berbasis visual
a. Merancang tampilan program (user interface) hal ini meliputi = Form dan toolbox
b. Desain properties. Hal ini digunakan untuk merubah tampilan icon yang asli toolbox agar sesuai dengan tampilan yang tampilan yang diinginkan.
c. Jendela Code Editor , digunakan sebagai media komunikasi antar object pada form dengan system yang ada.
2.4. Mengenal Komponen label, edit & Button
Label Hanya untuk menampilkan Teks
Edit Untuk menampilkan dan input data (1 baris)
Button Digunakan untuk melakukan eksekusi terhadap suatu proses
2.5. Mengenal Operator
Delphi mengenal banyak operator, sama seperti bahasa pemograman yang lain, operator menjadi satu hal penting yang harus ada untuk perancangan program.
2.5.1. Operator Penugasan (assignment Operator)
Symbol operator digunakan untuk melakukan suatu proses atas suatu nilai dengan memberikan nilai baru pada suatu variabel
Lambang operator Penugasan “ := “
Bentuk Umum penulisan
Var := perintah;
Contoh =
A:=”B”;
Label1.caption := “Irnawan”
C:= A + B;
2.5.2. Operator Aritmatika
Operator aritmatika berfungsi untuk melakukan suatu proses aritmatika yang meliputi perkalian, pembagian, penjumlahn, pengurangan maupun pengurangan terhdap suatu nilai variabel yang tersimpan dalam suatu object, dengan memberikan nilai baru.
Symbol yang dikenal dalam delphi
Symbol Keterangan
+ Penjumlahan
- Pengurangan
* Perkalian
/ Pembagian
Div Pembagian Integer
Mod Sisa Pembagian
Contoh
B := 15 + 2; hasil B = 17
B := 15 div 2 B = 7
B := 15/2 B = 7,5
B := 15 * 2 B = 30
B := 15 mod 2 B = 1
2.5.3. Operator String
Digunakan untuk menggabungkan dua teks/string atau lebih.
Symbol yang digunakan = +
Contoh =
Bentuk Umum
A := teks1 + teks2
Contoh
A : = “Aku”;
B := “Bisa”;
C := A + B;
Hasil C = Aku Bisa
2.5.4. Merancang Aplikasi Dengan Delphi
a. Hasil ketika form dijalankan
Gambar 2.1 Form Operator
b. Desain Form
Gambar 2.2 Desain Form Operator
c. Desain Properties
Object Name Caption
Label 1 Label 1 Program pengenalan dasar operator Delphi
Label 2 Label 2 Nilai Praktek I
Label 3 Label3 Nilai Praktek II
Label 4 Label4 Nilai Perhitungan
Label5 Label5 Hasil
Label6 Label6 Hasil
Label7 Label7 Hasil
Label8 Label8 Hasil
Object Name Text
Edit1 Nil1 -
Edit2 Nil2 -
Edit3 Ehtambah -
Edit4 ehkali -
Edit5 Ehbagi -
Edit6 ehkurang -
Object Name Caption
Button1 Btambah Tambah
Button2 Bkali Kali
Button3 Bbagi Bagi
Button4 Bkurang Kurang
Button5 Bclose Close
d. Listing Program
Catatan =
Dalam bahasa pemograman Delphi semua data yang diinput melalui edit box dideklarasikan dengan tipe data string, sehingga ketika kita akan melakukan proses perkalian atau pengurangan kita tidak bisa mengalikan secara langsung edit box yang dimaksud tetap kita perlu merubah menjadi nilai dengan tipe data yang dapat dikalikan.
1. Program Tambah
Digunakan untuk menampilkan hasil penjumlahan antara nilai praktek 1 dengan nilai praktek II, cara double klik pada buton tambah dan tuliskan kode berikut ini =
procedureTForm2.BtambahClick(Sender: TObject);
var
nil1, nil2 : real;
tambah: real;
begin
nil1 := strtofloat(enil1.text);
nil2 := strtofloat(enil2.text);
tambah := nil1 + nil2;
ehtambah.text := floattostr(tambah);
end;
Catatan
Var
Nil1,nil2 : real;
Tambah ; real;
Var digunakan untuk mendeklarasikan suatu nama varibael yag dibuat oleh programmer yang berfungsi untuk menyimpan nilai atau data selama proses program berjalan.
Nil1,nil2 dan tambah adalah nama variabel baru yang dibentuk oleh progrmmer
Real adalah nama dari sekeian banyak tipe data yang dikenal dalam bahasa peograman Delphi. Cakupan tipe data real adalah membaca bilangan angka dalam bentuk decimal.
Strtofloat adalah fungsi yang digunakan merubah nilai dari tipe data string menjadi tipe data numeric.
Floattostr adalah fungsi yang digunakan merubah nilai pecahan menjadi data string.
2. Program untuk kali
procedure TForm2.BkaliClick(Sender: TObject);
var
bil1,bil2:real;
kali : real;
begin
bil1 := strtofloat(enil1.text);
bil2 := strtofloat(enil2.text);
kali := bil1*bil2;
ehkali.text := floattostr(kali);
{ehkali.text := inttostr(strtoint(enil1.text) * strtoint(enil2.text));}
end;
3 Program untuk bagi
procedureTForm2.BbagiClick(Sender: TObject);
var
bil1,bil2 : real;
bagi : real;
begin
bil1 := strtofloat(enil1.Text);
bil2 := strtofloat(enil2.Text);
bagi := bil1/bil2;
ehbagi.Text := floattostr(bagi);
end;
4. Program untuk kurang
procedureTForm2.BkurangClick(Sender: TObject);
var
bil1,bil2,kurang : real;
begin
bil1 := strtofloat(enil1.Text);
bil2 := strtofloat(enil2.Text);
kurang := bil1 - bil2;
ekurang.Text := floattostr(kurang);
end;
5. Program untuk keluar
procedureTForm2.bcloseClick(Sender: TObject);
begin
messageDlg('Ingin Menutup form',mterror, [mbok],0);
close;
end;
Catatan
Messagedlg adalah penggalan program yang digunakan untuk menampilkan kotak pesan.
Close digunakan untuk menutup form.
2.5.5. Latihan Program Pembayaran
a. Form setelah dijalankan
Gambar 2.3 Gambar Toko
b. Ketentuan yang diinginkan pemilik toko
1. Nama barang, harga barang dan jumlah merupakan media input bagi user mengenai detail nama barang, harga barang serta jumlah yang dibeli.
2. Bayar digunakan untuk menampilkan perkalian dari jumlah yang dibeli dengan harga barang, dengan cara mengklik hitung.
3. Untuk menutup form user tinggal mengklik exit, dengan menampilkan pesan untuk user.
Catatan :
1. Untuk Menambah Form Baru pilih dan klik icon New Form
2. Untuk Mengaktifkan Form Yang Pernah Dibuat adalah pilih dan klik View Form , pada jendela View Form pilih form yang ingin diaktifkan dan klik OK
3. Untuk Menjalankan Form yang diinginkan dari beberapa form yang telah dibuat adalah dengan cara pilh Project| option. Pada combo Project Option, pilih dan klik form yang diingikan dengan mengaktifkan Combo Main form. Setelah selesai klik OK.
4. Untuk menyimpan semua project pilih dan klik Save All.
http://materi-praktek.blogspot.com/2007/02/bag-ii-operator-deklarasi-dan-tipe-data.html
10.24 | Label: Teknik Compiler | 0 Comments
error: C compiler cannot create executables
Mungkin bagi anda yang sedang mengcompile program di linux pernah menemui error seperti ini. Kebetulan saya adalah salah satunya:D Ketika saya mau install snmp ternyata terdapat error dengan kubuntu saya, yang salah satu errornya adalah error: C compiler cannot create executables. HHhhhmm…..coba pikir sebentar, ada apa yah dengan gcc xubuntu saya?? Dengan rasa penesaran langsung tanya ke Om Google, setelah lama bertanya akhirnya ketemu juga jawabannya:)
Ooohh..masalahnya ternyata file library gcc yang belum lengkap, tapi kok bisa yah?? Tanya saja pada yang buat paket xubuntu:)) mungkin ada pertimbangan lain, sepertinya paket ini tidak di sertakan karena kebanyakan orang mals kalu harus meginstall program dengan cara compile terlebih dahulu. Oke, langsung saja daripada panjang lebar, tinggal kita install saja file-file yang dibutuhkan, antara lain build-essential g++ g++-4.0 gcc libc6-dev libstdc++6-4.0-dev linux-kernel-headers. Langkahnya adalah :
#sudo apt-get install build-essential
setelah proses ini berhasil, anda tinggal compile program yang anda butuhkan. Biasanya langkah-langkahnya seperti ini :
#./configure
#make
#make install
Selesai deh.:)
Tip’s : apabila anda menggunakan repository lokal IIX dan ternyata gagal, dengan menemui error atau paket yang anda cari tidak ketemu ketika menjalankan perintah #apt-get install build-essential, anda dapat menggganti file repository anda di lokasi /etc/apt/sources.list dengan repository dari ubuntu international (server ubuntu langsung).
10.17 | Label: Teknik Compiler | 0 Comments
Setting Compiler Java di Windows
Setelah kita menginstall compiler java(jdk), biasanya java tidak bisa digunakan langsung, sehingga kita harus men-setting terlebih dahulu agar compiler tersebut bisa digunakan. Langkah-langkahnya cukup sederhana.
Adapun Langkah-Langkahnya adalah :
1. klik kanan pada my computer,terus klik properties
2. klik tab advance, kemudian klik button Environment Variables
3. Di bagian system variables, bagian path klik button edit
4. Copykan link bin tempat java jdk terinstall (sebelum itu beri pemisah ; pada ending varible value sebelumnya, misalnya ;C:\Program Files\Java\jdk1.5.0_07\bin
5. klik ok
6. Cek java apa sudah ok atau belum dengan masuk ke cmd, kemudian ketikkan javac,tekan tombol enter. kemudian ketikkan java, tekan tombol enter. Jika tampilannya kurang lebih seperti ilustrasi di bawah ini, maka setting berhasil.
10.14 | Label: Teknik Compiler | 0 Comments
FreePascal, free open-source compiler
FreePascal
Another Free Open Source Pascal Compiler
Halo, ketemu lagi dengan Simba. Kali ini kita akan membahas topik tentang pemrograman.
Temen2 yang pernah atau sedang belajar pemrograman pasti kenal dengan (Borland) Turbo Pascal yang sangat handal sebagai kompiler berbasis bahasa object-Pascal, apalagi yang versi 7. Tapi rekan2 juga pasti tau, kompiler tsb tidaklah free, apalagi open-source, dan adanya hanya buat DOS dan M$ Windows.
Nah, aku pengen memperkenalkan sebuah kompiler yang sama2 berbasis object-Pascal, tapi yang ini (abosolutely) free, open-source, multiplatform support, dan lebih handal daripada Turbo Pascal. Namanya FreePascal.
Lalu, apa aja sih kehandalannya jika dibandingkan dengan Turbo Pascal (7)? Ada banyak sekali kelebihannya, antara lain:
- 32 bit compiler
FreePascal telah menggunakan teknologi 32 bit dalam proses kompilasi dan file executable yang dihasilkannya.
- Multiplatform support
FreePascal tidak hanya untuk M$ Windows, tapi juga tersedia di Linux, FreeBSD, OS2, BeOS, Solaris, dan beberapa sistem operasi lainnya. Dengan demikian, developer cukup "write once, compile and run everywhere". Sama dengan konsep yang digotong ama Kylix.
- Fitur yang lebih banyak
Jika dibandingkan dengan Turbo Pascal, fitur2 yang dimiliki FreePascal jauh lebih banyak. Mulai dari akses ke sistem operasi, networking (TCP/IP), advanced text, graphical interface, hingga database. Mau bikin aplikasi client/server yang terkoneksi dengan mySQL di Linux? Gampang. :)
- Dukungan yang lebih luas
FreePascal pada dasarnya hanyalah kompiler Pascal 32 bit. Tapi karena sifatnya yang open-source, banyak dukungan yang diberikan dari komunitas open-source. Mulai dari class/package, komponen, hingga editor.
- Arsitektur FCL (FreePascal Component Library)
FreePascal adalah compiler Pascal yang bersifat OOP (Object Oriented Programming). Dalam FreePascal hal ini diwujudkan dalam arsitektur FCL. Konsep teknologi ini mengadopsi teknologi VCL (Visual Component Library) dari Delphi, tapi telah dimodifikasi sedemikian rupa khusus untuk FreePascal.
Selain lima keunggulan di atas, aku pengen menambahkan satu lagi kelebihannya. Yaitu kompabilitasnya dengan kompiler2 Pascal lainnya. Dengan Turbo Pascal, kompabilitasnya 99%. Ketidak-kompabilitasnya terletak pada konstanta2 standar yang ada di Turbo Pascal. Hal ini disebabkan FreePascal sifatnya multiplatform support sehingga beberapa konstanta harus disesuaikan kembali.
So, tidak ada alasan lagi untuk mempertahankan penggunaan Turbo Pascal, apalagi yang bajakan. :) Kalo masih ada dosen yang menyuruh pake Turbo Pascal, sebaiknya rekan2 menganjurkan untuk menggunakan FreePascal.
Lebih detil informasinya, kunjungi: www.freepascal.org.
Semoga bermanfaat.
Salam,
-Simba-
09.13 | Label: Teknik Compiler | 0 Comments