Tuesday, October 18, 2011

Penerapan Konsep bahasa dan Automata

0 comments
Sejarah Teori bahasa dan automata
 
           
Sebelum kita mengkaji penerapan ataupun imlplementasi dari konsep bahasa dan Automata ada baiknya kita mengetahui perkembangan ataupun sejarah dari automata dan tiori bahasa
           
Otomata bermula sebelum komputer ada pada teori di bidang sistem logika matematika atau formal, ilmuwan David Hilbert telah mencoba menciptakan algoritma umum untuk pembuktian (seluruh) persoalan matematika secara otomatis yaitu mampu menentukan salah benarnya sembarang prosisi matematika.
           
Tahun 1931, KurtGdel mempublikasikan teori ketidaklengkapan dimana membuktikan prosedur/algoritma yang dikehendaki David Hilbert tersebut tidak akan pernah ada. KurtGdel membangun rumus di kalkulus predikat yang diterapkan pada bilangan bulat yang memiliki pernyataan-pernyataan definisi yang tidak dapat dibuktikan maupun dibantah di dalam sistem logika yang mungkin dibangun manusia.
           
Formalisasi argumen teorema ketidaklengkapan KurtGdel ini berikut penjelasan dan formalisasi selanjutnya dari prosedur efektif secara intuisi merupakan salah satu pencapaian intelektual terbesar abad 20, yaitu abad dimana formalisasi berkembang semarak.
            Pengembangan teori otomata, komputasi dan teori bahasa berikutnya difasilitasi perkembangan bidang psyco-linguistic. Bidang psyco-linguistic berupaya menjawab pertanyan-pertanyan berikut:
 
- Apakah bahasa secara umum?
- Bagaimana manusia mengembangkan bahasa?
- Bagaimana manusia memahami bahasa?
- Bagaimana manusia mengajarkan bahasa ke anak-anaknya?
- Apa gagasan-gagasan yang dapat dinyatakan dan bagaimana caranya?
- Bagaimana manusia membangun kalimat-kalimat dari gagasan-gagasan yang berada di pikirannya?
           
Sekitar tahun 1950-an, Noam Chomsky menciptakan model matematika sebagai sarana untuk mendeskripsikan bahasa serta menjawab pertanyaan-pertanyaan di atas. Saat ini dimulai pendalaman bidang bahasa computer.
           
Perbedaan antara bahasa komputer dan bahasa manusia adalah sampai sekarang belum diketahuinya bagaimana cara manusia mengartikan bahasa, sementara dengan pasti dapat mengartikan bahasa pada komputer.Noam Chomsky mengemukakan perangkat format disebut grammar untuk memodelkan properti-properti bahasa.Grammar berisi sejumlah aturan serta menspesifikasikan bahasa tertentu.Bahasa berisi semua string yang dapat dihasilkan menggunakan aturan-aturan grammar.
           
Meski pembahasan Chomsky terutama ditujukan untuk bahasa alami, grammar mempunyai nilai/manfaat sangat besar di ilmu informatika/komputer karena pencapaian ini digunakan untuk mendeskripsikan dan mendefinisikan sintaks bahasa pemrograman dan bahasa-bahasa formal lainnya.
           
Grammar diterapkan pada perancangan kompilator dan bidang-bidang di ilmu komputer.McCulloch dan Pittsmengemukakan Mesin Abstrak sederhana yaitu finite automata untuk memodelkan neuron nets.Finite automata juga digunakan untuk merancang switching circuit.
 
Studi mengenai teori otomata terkait bidang-bidang lain di ilmu komputer.Kemudian ekivalensi antara finite automata dan ekspresi reguler (reguler expression) dikemukakan Stephen Kleene. Sejak saat itu teori bahasa dikaitkan secara erat dengan teori bahasa formal. ubungan teori otomata dan teori pengkodean (coding theory) juga banyak diteliti.
           
Turing machine seperti komputer modern saat ini dapat mengolah (simbol-simbol di tape) dan mengahasilkan keluaran (simbol-simbol yang berada di tapenya setelah berakhirnya sebarisan pergerakkan) merupakan karya teoritis dari Alan Turing.
  • Penerapan Bahasa dan Automata Dalam konsep Keilmuan
            Teori automata yang selama ini lebih banyak diterapkan dalam bidang tata bahasa formal khususnya dalam pengembangan sebuah compiler, juga dapat digunakan untuk melakukan pemodelan dan pendekatan pemecahan masalah masalah yang berkaitan dengan aplikasi-aplikasi di dalam bidang kecerdasan Buatan. Bahkan pada beberapa masalah spesifik yang berkaitan dengan keputusan dan model mesin hanya tepat jika solusinya didasarkan pada solusi automata.Kelebihan penggunaan teori automata dibanding pohon keputusan dalam memodelkan ruang keadaan adalah lebih sederhana jika terdapat beberapa keadaan yang berulang. Penerapan teoritis automata untuk pengembangan suatu sistem adalah dengan menggunakan teori automata sebagai sebuah paradigma yang menggabungkan spesifikasi sistem, verifikasi dan sintesis.
 
A.Kecerdasan buatan
 
            Kecerdasan Buatan adalah bidang ilmu yang mendasarkan bagaimana sebuah komputer bisa bertindak seperti dan sebaik manusia. Dewasa ini, Penggunaan kecerdasan buatan dibutuhkan diberbagai disiplin ilmu. Irisan antara psikologi dan kecerdasan Buatan melahirkan area cognition and psycolinguistic. Irisan antara teknik elektro dengan kecerdasan buatan melahirkan ilmu : pengolahan citra, teori kendali, pengenalan pola dan robotika. Irisan ilmu manajemen dan kecerdasan buatan menghasilkan sistem pendukung keputusan. Adanya irisan penggunaan kecerdasan buatan diberbagai disiplin ilmu menyebabkab cukup rumitnya untuk mengklasifikasikan lingkup bidang ilmu kecerdasan buatan, sehingga pengklasifikasian lingkup kecerdasan buatan didasarkan pada output yang diberikan yaitu pada aplikasi komersial.
Lingkup aplikasi kecerdasan buatan meliputi :
 
1. sistem pakar
 
2. Pengolahan bahasa alami
 
3. Pengenalan ucapan
 
4. Robotika dan sistem sensor
 
5. Computer vision
 
6. Problem solving and planning
 
7. Permainan
 
 
 
 
Sumber Internet
 
  • Http//www.globalkomputer.com
 
 
 
Sumber buku
 
  • B. Hariyanto, Teori Bahasa, Otomata, dan Komputasi serta terapannya, Informatika Bandung
  • (Teknik dan Aplikasinya), Edisi Pertama, Penerbit Graha Ilmu, 2003

Tuesday, October 4, 2011

Otomata dan Pengantar Kompilasi

0 comments

compilerMatakuliah 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 :

  1. 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.
  2. Tipe bahasa.Klasifikasi tatabahasa Chomsky beserta perbandingan dan sifat khusus keempat tatabahasa : unrestricted, context sensitive, context free, regular, beserta contohnya.
  3. 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
  4. Finite State Automata; definisi, jenis (NFA dan DFA), serta kegunaan dan jenisnya, penyajiannya serta penggunaannya di dalam kompiler; dibahas pula ekuivalensi dan pengembangannya
  5. NFA. Konsep NFA, perbedaan DFA dengan NFA, NFA dengan epsilon, serta penggabungan NFA; dibahas pula ekuivalensi NFA dan DFA;
  6. Ekspresi reguler, dan hubungan dengan bahasa reguler, serta hubungan dengan NFA, dibahas pula salah satu contoh aplikasi regex
  7. Analisa leksikal; istilah serta mekanismenya pada suatu compiler
  8. Analisa sintaks; leftmost dan rightmost derivation, pohon urai, parsing, ambiguitas serta sifat dan hubungan dengan tatabahasa bebas konteks
  9. Penyederhanaan tatabahasa bebas konteks, meliputi aturan produksi unit , useless dan e-move
  10. Bentuk normal chomsky, mekanisme pembuatannya dan parsing menggunakan algoritma CYK
  11. Analisa semantik dan kode antara. Mekanisme analisa semantik dan pembentukan berbagai kode antara menggunakan notasi postfix dan n-tuple.
  12. Optimasi. Fungsi, kriteria , jenis dan mekanisme optimasi, baik optimasi lokal maupun global
  13. Storage. Hirarki dan mekanisme storage pada kompiler, environtment, run time memory organization, serta mode passing parameter ditinjau dari sudut pandang compiler
  14. Cara penanganan kesalahan; jenis kesalahan langkah penanganan kesalahan;reaksi kompilator dalam menangani kesalahan 
  15. 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.  
  16. sumber : http://herucr.blog.upnyk.ac.id/2009/01/18/otomata-dan-pengantar-kompilasi/
  17.                 http://agusfarhanies.blogspot.com/2011/03/teknik-kompilasi.html
Related Posts Plugin for WordPress, Blogger...