Matakuliah Otomata dan pengantar kompilasi untuk semester mendatang, membahas mengenai otomata dan teori bahasa formal beserta penerapannya pada suatu kompilator. Materi kuliah per pertemuan dapat diunduh di elisa dalam format ppt. Berikut ini materi kuliah per pertemuan :
- Pendahuluan, berisi konsep-konsep : karakter, string, kata, token,kalimat, bahasa; Beserta contoh tata bahasa dengan menggunakan istilah simbol terminal, non terminal, produksi, derivasi; serta serta hubungan tatabahasa dengan bahasa.
- Tipe bahasa.Klasifikasi tatabahasa Chomsky beserta perbandingan dan sifat khusus keempat tatabahasa : unrestricted, context sensitive, context free, regular, beserta contohnya.
- Proses kompilasi; Mulai dari jenis bahasa, perancangan bahasa pemrograman, translator, hingga pada proses kompilasi dari fase analisa (leksikal, sintaks, dan semantik) hingga ke fase sintesa (pembentukan dan optimalisasi kode) beserta contohnya, dilanjutkan dengan mutu kompilator
- Finite State Automata; definisi, jenis (NFA dan DFA), serta kegunaan dan jenisnya, penyajiannya serta penggunaannya di dalam kompiler; dibahas pula ekuivalensi dan pengembangannya
- NFA. Konsep NFA, perbedaan DFA dengan NFA, NFA dengan epsilon, serta penggabungan NFA; dibahas pula ekuivalensi NFA dan DFA;
- Ekspresi reguler, dan hubungan dengan bahasa reguler, serta hubungan dengan NFA, dibahas pula salah satu contoh aplikasi regex
- Analisa leksikal; istilah serta mekanismenya pada suatu compiler
- Analisa sintaks; leftmost dan rightmost derivation, pohon urai, parsing, ambiguitas serta sifat dan hubungan dengan tatabahasa bebas konteks
- Penyederhanaan tatabahasa bebas konteks, meliputi aturan produksi unit , useless dan e-move
- Bentuk normal chomsky, mekanisme pembuatannya dan parsing menggunakan algoritma CYK
- Analisa semantik dan kode antara. Mekanisme analisa semantik dan pembentukan berbagai kode antara menggunakan notasi postfix dan n-tuple.
- Optimasi. Fungsi, kriteria , jenis dan mekanisme optimasi, baik optimasi lokal maupun global
- Storage. Hirarki dan mekanisme storage pada kompiler, environtment, run time memory organization, serta mode passing parameter ditinjau dari sudut pandang compiler
- Cara penanganan kesalahan; jenis kesalahan langkah penanganan kesalahan;reaksi kompilator dalam menangani kesalahan
TEKNIK KOMPILASI
1.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.
2.TEKNIK KOMPILASI
Comments Dropped tinggalkan tanggapan
Definisi Compiler
Biasanya dipakai untuk menggenerate program yang akan dibuat. Misalnya sebuah source code di vsual basic akan dijadikan sebuah software aplikasi atau program….maka source code tersebut harus di-compile sedemikian rupa agar jadi sebuah aplikasi ato software dengan sebuah compiler…
CIRI – CIRI PROGRAM COMPILER
Ciri-cirinya :
1) Dapat memodifikasi Caption program sehingga menjadi nama lain. Misalnya sebuah program dicopy biasa dari komputer satu ke komputer lain maka captionnya akan sama…catatan bukan nama apliaksi or .exe nya yang diubah…tapi judul program yang ada di atas apliaksi tersebut.
2) Dapat mengganti gambar dari aplikasi tersebut. Misalnya gambar A.jpg diletakkan dalam sebuah program. Kalau dicopy secara biasa, otomatis gambar A.jpg akan ter-copy juga ke program tersebut. Tetapi bila dicompile…maka gambar dapat berubah.
FUNGSI PROGRAM COMPILER
Fungsi dari program compiler ini adalah :
1) Mengubah caption, sehingga jika suatu program dikunci oleh virus seperti regedit, msconfig, ms Dos shell dan lain – lain dapat tetap dijalankan, karena fungsi dari compiler tersebut merubah caption program. Biasanya virus mendeteksi dari caption program tersebut untuk menendang atau mematikan program dalamkode pertahanan virus. 2) Buat seneng- seneng and nambah program ajah….hahahahahhahaha
CARA KERJA COMPILER SEDERHANA
cara kerjanya sangat mudah, seperti yang disebutkan bahwa compiler disini adalah sangat sederhana sekalai. Sehingga masih menggunakan fasilitas dari VB berupa modul COPYFILE. Jadi bukan dicompiler secara murni, jadi Algoritma nya :
1) Program Dijalankan
2) Program akan mengecek apakah file yang diperlukan untuk compiler ada…disini saya memakai aplikasi rdfce.ext
3) Setelah menemukan file rdfce.ext maka program akan menjalankan modul COPYFILE untuk menyalin isi dari text dan gambar
4) Kemudian program akan mencompile aplikasi dan mengeluarkan file output sesuai dengan
nama file…kalau disini defaultnya test.exe
KOMPILER
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
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.
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.
S
ebelum 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:
1)Simulator Mesin Turing. Program ini memiki GUI berbasiskan Gtk.http://www.nuclecu.unam.mx/~arturo/gTuring/.
2)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/
3)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.
1)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/
2)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
3)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/
4)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
5)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 inihttp://www-cs-faculty.stanford.edu/~knuth/mmix.htmlhttp://mmixmasters.sourceforge.net/
Demonstrasi Visual
Untuk mendemonstrasikan beberapa pronsep dasar tentang mekanisme kompilasi, maka dapat juga diginakan beberapa perangkat bantu al:
1)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
2)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
1)ZIP.http://compilers.iecc.com/crenshaw/
Compilers and Compiler Generators an introduction with C++ oleh P.D. Terry, Rhodes
2)University, 1996.http://scifac.ru.ac.za/compilers/
3)Advanced Programming Language Design oleh Raphael Finkel.http://cseng.aw.com/book/related/0,3833,0805311912+20,00.html
4)Parsing Techniques – A Practical Guide oleh Dick Grune dan Ceriel J.H. Jacobshttp://www.cs.vu.nl/~dick/PTAPG.html
5)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
6)Introduction to Compilers. (Brown University) Ini adalah materi kuliah dari Brown University.http://www.cs.brown.edu/courses/cs126/
7)Automata and Formal Language Course. Materi dari Warwick University. Menggunakan JavaCChttp://www.dcs.warwick.ac.uk/~pwg/cs203/cs203index.html
8)A Bibliography of Compiler Constructionhttp://www.cs.qub.ac.uk/~D.McKeever/csc303/Reference/Bibliography.html
9)An Introduction to the Theory of Computation Eitan Gurari, Ohio State Universityhttp://www.cis.ohio-state.edu/~gurari/theory-bk/theory-bk.html
10)Review of existing LanguagesPerbandingan beberapa bahasa pemorgraman. Situs ini memberikan informasi singkat serta URL yang berkaitan dengan bahasa pemrograman.http://tunes.org/Review/Languages.html
11)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 :
1)Free Compiler Construction Toolshttp://www.thefreecountry.com/developercity/compiler.html
2)Gnu C Compilter (GCC). Banyk informasi mengenai compiler (terutama GCC)http://www.gnu.org/software/gcc/readings.html
3)Compiler Construction using Flex and Bisonhttp://cs.wwc.edu/~aabyan/464/Book/
4)A Compact Guide to Lex & Yacc by Thomas Niemannhttp://epaperpress.com/lexandyacc/index.html
5)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, YACChttp://rw4.cs.uni-sb.de/~martin/COMP/TK/
6)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/
7)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/
8)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 :
1)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.
2)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.
3)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.
4)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
C compiler
Bahasa C++ emang ribet!! Pusing sendiri gw ngebaca bukunya… Tapi gpp deh, semua yang gw tau gw tuangin disini.. Dengan begitu gw rasa gw bisa makin gampang ngingetnya ahahaha
Cara Meng-Compile
pertama2 elo masuk ke Dev-CPP, abis itu pencet file >> new >> source file. abis itu lo tulis code dibawah, setelah selesai elo pijit execute >> compile.. tunggu sebentar, abis itu kalo udah pencet execute >> run… dan selamat! program hello world pertama lo telah berjalan!
#include // membuat program untuk menampilkan data output ke layar monitor
int main()
// fungsi awal memulai eksekusi program
{
std::cout<< “Selamat Pagi DUNIA!!\n”; //tampilin pesen
system(”pause”); // command dos pause
return 0; // menampilkan bahwa program telah sukses dieksekusi
}
tinggal meng-compile source code tersebut agar menjadi sebuah program “Hello World” sederhana…
sederhana banget yah?? tapi itu adalah basic awal yang lo (gw jg) mesti ngerti bener.
***Berikut adalah penjelasan source diatas
setiap baris yang diberi tanda dua garis miring (//), adalah komen (comment). Programmer memasukkan comment dalam program untuk membantu orang lain dalam memahami program tersebut. Kata2 yang ada didalam comment bakalan di abaikan oleh compiler. Comment yang dimulai dengan (//) disebut dengan komen-satu-baris (single-line comment) karena comment itu berakhir di akhir baris. Sedangkan comment dengan menggunakan lebih dari satu line menggunakan tanda /* dan berakhir dengan */.
#include
Disebut Preprocessor directive, yang merupakan sebuah pesan ke prosesor C++. Baris yang dimulai dengan # diproses dolo sama prepocessor sebelum di compile. Line ini ngasih tau preprocessor untuk mengikut sertakan ke dalam program input/output stream header file (keluar-masuk) atau . File ini harus di ikut sertakan dalam setiap program agar bisa melakukan input/output..
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.- sumber : http://herucr.blog.upnyk.ac.id/2009/01/18/otomata-dan-pengantar-kompilasi/
- http://agusfarhanies.blogspot.com/2011/03/teknik-kompilasi.html
0 comments:
Post a Comment