Cemes menggila :)

Cemes menggila :)
habis gamtek...photo2 ahh

Kamis, 01 Desember 2011

TEKNIK KOMPILER


Compiler Construction
comp_sma.jpg
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.
Simulator Automata 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/
Menggunakan wxWidgets dengan kompiler Borland C++
loadplug.jpg
wxWidgets adalah bingkai kerja GUI multiplatform paling poten yang pernah saya gunakan. Sebelumnya saya menggunakan FOX, yang meskipun inovatif dan lebih mudah digunakan, tapi… (topik itu rasanya berhak mendapat tulisan tersendiri). Aplikasi yang dibuat dengan wxWidgets secara otomatis dapat dikompilasi dalam semua platform dan dengan semua kompiler yang didukung oleh paket tersebut, dan kemungkinan keberhasilannya akan jauh lebih besar apabila si pemrogram membatasi diri hanya menggunakan fasilitas-fasilitas yang wxWidgets sediakan. Yang istimewa, pembatasan itu tidak kemudian mengurangi fungsionalitas platform yang dapat digunakan dalam aplikasi kita! Paket wxWidgets menyediakan beragam antarmuka portabel baik untuk jenis fasilitas standar yang disediakan secara natif dalam banyak platform, fasilitas yang hanya disediakan natif dalam platform tertentu namun harus diimplementasikan sendiri dalam platform lain, ataupun fasilitas yang kerap digunakan namun tidak cukup vital untuk disediakan natif dalam platform manapun. Sebagian contoh adalah fasilitas I/O file, koneksi database, kontrol untuk pengeditan rich-text, dan fasilitas koneksi TCP/IP.
Satu-satunya hambatan awal yang ditemui seseorang sebelum menggunakan paket ini adalah sistem build yang cukup kompleks, dirancang demikian tentunya untuk mengantisipasi idiosinkrasi setiap platform yang harus didukungnya. Di sini, saya akan menjelaskan langkah-demi-langkah pengaturan awal agar Anda dapat menggunakan pustaka ini dengan kompiler Anda. Saya sendiri menggunakan kompiler Borland C++ pada platform Microsoft Windows XP, dan akan mendasarkan penjelasan pada platform tersebut. Penyebutan bcc di bawah dapat disubstitusi dengan kompiler yang Anda gunakan (MinGW: mingw, Digital Mars: dm, dsb.), begitu pula untuk platform yang digunakan, msw. Penyebutan direktori WXBASE merujuk pada lokasi pustaka wxWidgets pada sistem Anda; saya, sebagai contoh, menggunakan E:\wxMSW-2.8.0. Penyebutan BCCDIR merujuk pada direktori dasar kompiler.
Pemrograman Java untuk Aplikasi Basis Data dengan Teknik XP Menggunakan IDE ECLIPSE
pemrgrmn-jva-utk-aplks.png
Java adalah bahasa pemrograman yang sangat populer saat ini. Kelebihannya antara lain adalah mampu digunakan sebagai tool untuk mengembangkan aplikasi Internet, selain aplikasi-aplikasi mandiri pada umumnya. Saat ini Java juga beranjak menjadi bahasa pemrograman yang populer karena ia mampu mengatasi masalah kompatibilitas antarberbagai platform perangkat keras dan perangkat lunak.
Saat ini tersedia kompiler Java yang mulai populer, yang menggunakan konsep Graphical User Interface), yaitu Eclipse. Eclipse mudah penggunaannya dan cukup berdaya-guna untuk mengembangkan aplikasi Java apa pun. Eclipse akan populer di masa yang akan datang karena biaya perolehannya yang sangat murah (gratis!) – dapat diperoleh dengan mem-download dari berbagai situs di Internet.
Buku ini menjelaskan berbagai fasilitas utama yang ada di Eclipse, konsep pemrograman Java secara umum, serta cara menggunakan Eclipse dalam pengembangan aplikasi yang bersifat umum yang user friendly, serta aplikasi yang bekerja dengan mengakses sistem basis data relasional menggunakan antarmuka Java Database Connectivity – Application Programming Interface.
Satu hal khusus yang ditawarkan oleh para pengembang Eclipse adalah pemrograman dengan metodologi eXtreme Programming, yang merupakan pengembangan aplikasi dengan basis testing.
Dengan pendekatan XP ini para pengembang aplikasi yang sudah familiar dengan tool yang digunakan akan dapat mengembangkan aplikasi yang berkualitas tinggi dengan waktu yang relatif pendek.
Penerapan metode XP untuk pengembangan aplikasi berbasis Java menggunakan Eclipse dibahas tuntas di dalam buku ini.
Dasar dasar C++
15731_c0.jpg
Tutorial ini untuk siapa saja, walaupun anda belum pernah melakukan pemrograman, atau jika andapun berpengalaman dalam pemrograman dengan bahasa pemrograman lain tapi ingin mempelajari bahasa C++, ada baiknya anda mengikuti penjelasan disini.
C++ adalah sebuah bahasa pemrograman yang memiliki banyak dialek, seperti bahasa orang yang banyak memiliki dialek. Dalam C++, dialek bukan disebabkan oleh karena si pembicara berasal dari Jepang atau Indonesia, melainkan karena bahasa ini memiliki beberapa kompiler yang berbeda. Ada empat kompiler umum yaitu : C++ Borland, C++ Microsoft Visual, C/386 Watcom, dan DJGPP. Anda dapat mendownload DJGPP atau mungkin saja anda telah memiliki kompiler lain.
Setiap kompiler ini agak berbeda. Setiap kompiler akan dapat menjalankan fungsi fungsi standar C++ ANSI/ISO, tetapi masing masing kompiler juga akan dapat menjalankan fungsi fungsi nonstandard (fungsi fungsi ini, agak mirip dengan ucapan yang tidak standar yang diucapkan orang diberbagai pelosok negeri. Sebagai contoh, di New Orleans kata median disebut neutral ground). Kadang kadang pemakaian fungsi nonstandard akan menimbulkan masalah pada saat anda hendak mengkompilasi kode sumber data (source code) (yaitu program berbahasa C++ yang ditulis oleh seorang programer) mempergunakan kompiler yang berbeda. Tutorial ini tidak terlepas dari masalah seperti itu.
Bila anda belum mempunyai sebuah kompiler, disarankan agar anda segera memiliki sebuah kompiler. Sebuah kompiler sederhana sudah cukup untuk dipergunakan oleh anda dalam mengikuti tutorial ini.
Bahasa pemrograman C++ adalah bahasa yang amat berbeda. Untuk kompiler C++ berbasis DOS, akan memerlukan beberapa kata kunci (keywords); keyword sendiri tidak cukup untuk difungsikan sebagai input dan output. Walau hampir semua fungsi dalam file library tampaknya bias diakses oleh header filenya. Coba kita lihat program sesungguhnya :
#include
int main()
{
cout<<”HEY, you, I’m alive! Oh, and Hello World!”;
return 0;
}
Marilah kita lihat elemen dari program diatas. Tanda #include adalah sebuah prosesor pengarah yang mengatakan kepada kompiler untukmeletakan kode dari header file iostream.h kedalam program. Dengan menyertakan header file, anda dapat mengakses banyak fungsi fungsi berbeda. Dalam contoh diatas, fungsi cout memerlukan file iostream.h.
Pada baris berikutnya yang penting adalah int main(). Baris ini mengatakan kepada kompiler bahwa ada sebuah fungsi bernama main, yang mana fungsi itu mengembalikan sebuah integer, sehingga diberi tanda int. Tanda kurung ({ dan }) menandakan awal dan akhir fungsi dalam program diatas dan menghentikan kode lainnya. Jika anda memakai bahasa Pascal, anda akan mempergunakan perintah BEGIN dan END.
Baris berikutnya dari program diatas agak aneh. Jika anda menulis sebuah program mempergunakan bahasa lain, anda akan mengetahui bahwa perintah print akan menampilkan text di layar monitor. Dalam bahasa C++ tidaklah demikian, pemakaian fungsi cout dipakai untuk menampilkan text di layar monitor anda. Itu juga memakai tanda atau symbol <;<; , yang diketahui sebagai operator pemasukan ( insertion operators). Tanda tersebut mengatakan kepada kompiler agar segera menghasilkan output sesuai dengan input anda. Tanda semicolon ditambahkan kedalam bagian akhir dari semua fungsi yang dipanggil dalam bahasa C++; tanda seterusnya memperlihatkan variable yang anda deklarasikan.
Pada baris itu juga ada kode yang memerintahkan fungsi main kembali ke 0. Pada saat satu kali kembali diproses, itu dilakukan melalui system operasi. Sebagai catatan, pendeklarasian fungsi main yang tidak diinginkan memiliki proses kembali, dapa ditambahkan – void main() – dan biasanya itu berfungsi dengan baik; namun cara ini merupakan cara yang kurang baik.
Tanda kurung terakhir berperan sebagai penutup agar fungsi dihentikan. Anda bias mencobamengoperasikan fungsi ini didalam sebuah kompiler. Anda dapat melakukan cut dan paste kode diatas kedalam sebuah file, dan menyimpannya sebagai file.cpp, dan kemudian anda buka file itu dari dalam kompiler anda. Jika anda memakai baris perintah kompiler seperti yang ada dalam Borland C++ 5.5, sebaiknya anda membaca dahulu instruksi kompiler tentang bagaimana cara melakukan kompilasi (how to compile).
Comment atau komentar sering dipakai dalam penulisan program. Ketika anda mengatakan kepada kompiler bahwa sebuah bagian dari program anda adalah tex komentar, kompiler tidak akan memasukan itu sebagai perintah pemrograman. Untuk membua sebuah komentar dipergunakan tanda //, yang mengaakan kepada kompiler bahwa baris berikut adalah komentar, atau memakai tanda /* dan kemudian diakhiri tanda */ untuk menandai bahwa segala yang ada antara kedua tanda ini adalah komentar. Beberapa kompiler akan mengubah warna area komentar, tetapi beberapa kompiler lain tidak. Berhati hatilah dalam menulis program anda agar kode program anda tidak dianggap sebagai komentar oleh kompiler karena dapat mempengaruhi output program yang anda buat.
Selanjutnya anda harus dapa menuliskan program sederhana untuk menampilkan informasi yang anda ketikan kedalamnya. Selain itu, program juga bisa dibuat untuk menerima input. Fungsi yang dipakai adalah cin, dan diikuti dengan tanda >>.
Tentu saja sebelum anda mencoba menerima input, anda harus memiliki tempat penyimpan input. Dalam pemrograman, input dan data disimpan dalam variable. Ada beberapa jenis variable. Pada saat anda ingin mengatakan kepada kompiler sebuah variable yang anda deklarasikan, anda harus menyertakan tipe data dan nama dari variable itu. Beberapa cara dasar adalah dengan menuliskan include char, int, dan float.
Sebuah variabel char menyimpan sebuah karakter tunggal; variabel int akan menyimpan integer (bukan bilangan desimal), dan variables float akan menyimpan bilangan desimal. Setiap variable – char, int, dan float – merupakan sebuah kata kunci (keyword) yang and pergunakan pada saat anda mendeklarasikan sebuah variabel. Untuk mendeklarasikan sebuah variable anda memakai syntax type . Ini diijinkan untuk mendeklarasikan variable multiple dari jenis variable yang sama pada baris yang sama; masing masing variabelnya dipisahkan dengan tanda koma. Deklarasi sebuah variable atau sekelompok variabel dapat diikuti tanda semicolon (Catatan, tanda ini sama dengan yang diterapkan pada prosedur dimana anda akan memanggil sebuah fungsi).
Jika anda tidak memakai sebuah variable yang dideklarasikan sebelumnya. program anda tidak akan dapat dioperasikan (atau di run), dan anda akan menerima pesan error yang memberitahu anda bahwa anda telah melakukan kesalahan.
Berikut adalah beberapa contoh deklarasi variable:
int x;
int a, b, c, d;
char letter;
float the_float;
Walaupun anda boleh memiliki banyak variable dengan jenis yang sama, anda tidak dapat memiliki variable dengan nama yang sama. Begitu pula anda tidak dapat memiliki variable dan fungsi dengan nama yang sama.
#include < iostream.h >
int
main()
{
int thisisanumber;
cout<<”Please enter a number:”;
cin>>thisisanumber;
cout<<”You entered: “<
return 0;
}
Coba kita bahas program diatas ini setiap barisnya. Keyword int mendeklarasikan thisisanumber menjadi sebuah bilangan integer. Fungsi cin>> membaca sebuah nilai ke dalam thisisanumber; user harus menekan tombol enter sebelum bilangan bias dibaca oleh program. Ingatlah, bahwa variable yang telah dideklarasikan adalah sebuah integer; jika user cenderung nmenulis bilangan decimal, itu akan diproses dengan tidak tepat (sebab komponen desimal dari bilangan itu akan ditolek). Cobalah menuliskan satu baris karakter atau bilangan desimal ketika anda mengoperasikan program diatas; hasil yang didapat bervariasi dari input ke input, tetapi bila tidak ada masalah akan tampak bagus. Ingatlah ketika mencetak sebuah variabel, tanda quotation tidak dipakai. Apabila ada tanda quotation, maka hasilnya adalah “You Entered: thisisanumber.”
Apabila tanda quotation dihilangkan, maka kompiler akan menganggap itu sebuah variabel, dan karena itu program akan melakukan pengecekan atas nilai variabel agar dapat mengganti nama variabel dengan variable pada saat eksekusi fungsi output. Jangan bimbang dengan adanya dua operator pemasukan dalam satu baris program. Anda bisa juga memasukan beberapa operator pemasuka dalam satu baris selama tiap operator pemasukan menghasilkan output yang berbeda; anda perlu memisahkan literal string (yaitu string yang tertutup dalam tanda quotation) dan variabel dengan menaruh masing masing operator pemasukannya (each insertion operators) (yaitu tanda <<).
Bila anda hendak mencoba untuk meletakan dua variabel bersama sama dalam satu baris program seperti tanda <;<; hasilnya adalah pesan eror; maka janganlah melakukan itu.
Jangan lupa untuk mengakhiri fungsi fungsi dan deklarasi dengan sebuah tanda semicolon. Jika anda lupa memberi tanda semicolon, kompiler akan memberi anda sebuah pesan eror pada saat anda melakukan kompilasi program anda.
Kompilator
movie.png
Kompilator (Inggris: compiler) adalah sebuah program komputer yang berguna untuk menerjemahkan program komputer yang ditulis dalam bahasa pemrograman tertentu menjadi program yang ditulis dalam bahasa pemrograman lain.
Terlepas dari pengertiannya yang demikian relatif luas, istilah kompilator biasa digunakan untuk program komputer yang menerjemahkan program yang ditulis dalam bahasa tingkat-tinggi (semacam bahasa Pascal, C++, BASIC, FORTRAN, Visual-Basic, Visual C#, Java, xBase, atau COBOL) menjadi bahasa mesin, biasanya dengan bahasa Assembly (assembler) sebagai perantara.
Kompilator berbeda dengan assembler karena biasanya kompilator akan menghasilkan kode obyek (object code) yang bisa berupa file executable pada sisten operasi Windows atau file bin pada sisten operasi berbasis Unix.
Kompilator melakukan proses kompilasi dengan cara menganalisis kode sumber secara keseluruhan, sehingga waktu yang dibutuhkan untuk melakukan kompilasi lebih lama, namun hasilnya lebih cepat dalam proses eksekusi daripada program yang dibuat dengan menggunakan teknik interpretasi dengan interprete

Tidak ada komentar:

Posting Komentar