Jumat, 18 November 2011

Sistem pakar 2


1.      SISTEM PAKAR
            Secara umum, sistem pakar (Expert system) adalah sistem yang berusaha mengadopsi pengetahuan manusia ke komputer, agar komputer dapat menyelesaikan masalah seperti yang biasa dilakukan oleh para ahli. Sistem pakar yang baik dirancang agar dapat menyelesaikan suatu permasalahan tertentu dengan meniru kerja dari para ahli. Dengan sistem pakar ini, orang awampun dapat menyelesaikan masalah yang cukup rumit yang sebenarnya hanya dapat diselesaikan dengan bantuan para ahli. Bagi para ahli, sistem pakar ini juga akan membantu aktivitasnya sebagai asisten yang sangat berpengalaman.
            Sistem pakar pertama kali dikembangkan oleh komunitas Artificial Intellegence (AI) pada pertengahan tahun 1960. Sistem pakar yang muncul pertama kali adalah General-pupose Problem Solver (GPS) yang dikembangkan oleh Newel dan Simon. GPS (dan program-program yang serupa) ini mengalami kegagalan dikarenakan cakupannya terlalu luas sehingga terkadang justru meninggalkan pengetahuan-pengetahuan penting yang seharusnya disediakan.
Sampai saat ini sudah banyak sistem pakar yang dibuat, beberapa contoh diantaranya terlihat pada tabel berikut : (Kusumadewi, 2001)
Sistem pakar
Kegunaan
MYCIN
Diagnosis penyakit
DENDRAL
Mengidentifikasi struktur molekular campuran yang tak dikenal
XCON & XSEL
Membantu konfigurasi sistem komputer besar
SOPHIE
Analisis sirkit elektronik
Prospector
Digunakan di dalam geologi untuk membantu mencari dan menemukan deposit
FOLIO
Membantu memberikan keputusan bagi seorang manajer dalam hal stok broker dan investasi
DELTA
Pemeliharaan lokomotif listrik diesel



2. KONSEP DASAR SISTEM PAKAR
Menurut Turban(1995) konsep dasar sistem pakar mengandung keahlian (expertise), pakar (expert), pengalihan keahlian (transfering expertise), inferensi (inferencing), aturan (rules) dan kemampuan menjelaskan (explanation capability).
Keahlian (expertise) adalah suatu kelebihan penguasaan pengetahuan di bidang tertentu yang diperoleh dari pelatihan, membaca atau pengalaman. Pengetahuan tersebut memungkinkan para ahli untuk dapat mengambil keputusan lebih cepat dan lebih baik daripada seseorang yang bukan ahli.
Pakar (Expert) adalah seseorang yang mampu menjelaskan suatu tanggapan, mempelajari hal-hal baru seputar topik permasalahan (domain), menyusun kembali pengetahuan jika dipandang perlu, memecah aturan-aturan jika dibutuhkan, dan menentukan relevan tidaknya keahlian mereka.
Pengalihan keahlian (transfering expertise) dari para ahli ke komputer untuk kemudian dialihkan lagi ke orang lain yang bukan ahli, hal inilah yang merupakan tujuan utama dari sistem pakar. Proses ini membutuhkan 4 aktivitas yaitu :
1.      Tambahan pengetahuan (dari para ahli atau sumber-sumber lainnya)
2.      Representasi pengetahuan (ke komputer)
3.      Inferensi pengetahuan
4.      dan pengalihan pengetahuan ke user.
Pengetahuan yang disimpan di komputer disebut dengan nama basis pengetahuan. Ada dua tipe pengetahuan, yaitu fakta dan prosedur (biasanya berupa aturan).
            Salah satu fitur yang harus dimiliki oleh sistem pakar adalah kemampuan untuk menalar, Jika keahlian-keahlian sudah tersimpan sebagai basis pengetahuan dan sudah tersedia program yang mampu mengakses basisdata, maka komputer harus dapat diprogram untuk membuat inferensi. Proses inferensi ini dikemas dalam bentuk motor inferensi (inference engine)
            Sebagian besar sistem pakar komersial dibuat dalam bentuk rule based systems, yang mana pengetahuan disimpan dalam bentuk aturan-aturan. Aturan tersebut biasanya berbentuk IF-THEN.
Fitur lainnya dari sistem pakar adalah kemampuan untuk memberikan nasehat atau merekomendasi. Kemampuan inilah yang membedakan sistem pakar dengan sistem konvensional.

3. Struktur Sistem Pakar

Gambar 2.1. Arsitektur Sistem Pakar (Turban,1995).

Menurut Turban(1995), sistem pakar terdiri dari dua bagian pokok, yaitu : lingkungan pengembangan (development environment) dan lingkungan konsultasi (consultation environment). Lingkungan pengembangan digunakan sebagai pembangun sistem pakar baik dari segi pembangun komponen maupun basis pengetahuan. Lingkungan konsultasi digunakan oleh seseorang yang bukan ahli untuk berkonsultasi.

Komponen-komponen yang ada pada sistem pakar seperti pada Gambar 2.1 sebagai berikut :


1.      Subsistem penambahan pengetahuan.
Bagian ini digunakan untuk memasukkan pengetahuan, mengkonstruksi atau memperluas pengetahuan dalam basis pengetahuan. Pengetahuan itu bisa berasal dari: ahli, buku, basisdata, penelitian, dan gambar.
2.      Basis pengetahuan.
Berisi pengetahuan-pengetahuan yang dibutuhkan untuk memahami, memformulasikan dan menyelesaikan masalah
3.      Motor Inferensi (inference engine).
Program yang berisi metodologi yang digunakan untuk melakukan penalaran terhadap informasi-informasi dalam basis pengetahuan dan blackboard, serta digunakan untuk memformulasikan konklusi. Ada 3 elemen utama dalam motor inferensi, yaitu :
a.        Interpreter : mengeksekusi item-item agenda yang terpilih dengan menggunakan aturan-aturan dalam basis pengetahuan yang sesuai.
b.       Scheduler : akan mengontrol agenda
c.        Consistency enforcer : akan berusaha memelihara kekonsistenan dalam merepresentasikan solusi yang bersifat darurat
4.      Workspace
Merupakan area dalam memori yang digunakan untuk merekam kejadian yang sedang berlangsung termasuk keputusan sementara. Ada 3 tipe keputusan yang dapat direkam yaitu :
a.        Rencana : bagaimana menghadapi masalah
b.       Agenda : aksi-aksi yang potensial yang sedang menunggu untuk dieksekusi
c.        Solusi : calon aksi yang akan dibangkitkan
5.      Antarmuka
Digunakan untuk media komunikasi antara user dan program
6.      Subsistem penjelasan
Digunakan untuk melacak respon dan memberikan penjelasan tentang kelakukan sistem pakar secara interaktif melalui pertanyaan :
-          Mengapa suatu pertanyaan ditanyakan oleh sistem pakar?
-          Bagaimana konklusi dicapai?
-          Mengapa ada alternatif yang dibatalkan?
-          Rencana apa yang digunakan untuk mendapatkan solusi?
7.      Perbaikan.
Sistem ini digunakan untuk mengevaluasi kinerja sistem pakar itu sendiri untuk melihat apakah pengetahuan-pengetahuan yang ada masih cocok untuk digunakan di masa mendatang.

4. BASIS PENGETAHUAN (KNOWLEDGE BASE)
Basis pengetahuan berisi pengetahuan-pengetahuan dalam penyelesaian masalah, tentu saja di dalam domain tertentu. Ada 2 bentuk pendekatan basis pengetahuan yang sangat umum digunakan, yaitu :
a.       Penalaran berbasis aturan (Rule-Based Reasoning)
Pada penalaran berbasis aturan, pengetahuan direpresentasikan dengan menggunakan aturan berbentuk: IF-THEN. Bentuk ini digunakan apabila kita memiliki sejumlah pengetahuan pakar pada suatu permasalahan tertentu, dan si pakar dapat menyelesaikan masalah tersebut secara berurutan. Disamping itu bentuk ini juga digunakan apabila dibutuhkan penjelasan tentang jejak (langkah-langkah) pencapaian solusi.
b.      Penalaran berbasis kasus (Case-Based Reasoning)
Pada penalaran berbasis kasus, basis pengetahuan akan berisi solusi-solusi yang telah dicapai sebelumnya, kemudian akan diturunkan suatu solusi untuk keadaan yang terjadi sekarang (fakta yang ada). Bentuk ini digunakan apabila user menginginkan untuk tahu lebih banyak lagi pada kasus-kasus yang hampir sama (mirip). Selain itu, bentuk ini juga digunakan apabila kita telah memiliki sejumlah situasi atau kasus tertentu dalam basis pengetahuan.

5.  MOTOR INFERENSI (INFERENCE ENGINE)
Mesin inferensi adalah bagian yang mengandung mekanisme fungsi berpikir dan pola-pola penalaran sistem yang digunakan oleh seorang pakar. Mekanisme ini akan menganalisa suatu masalah tertentu dan selanjutnya akan mencari jawaban atau kesimpulan terbaik.
Secara deduktif mesin inferensi memilih pengetahuan yang relevan dalam rangka mencapai kesimpulan. Dengan demikian sistem ini dapat menjawab pertanyaan pemakai meskipun jawaban tersebut tidak tersimpulkan secara eksplisit di dalam basis pengetahuan. Mesin inferensi memulai pelacakannya dengan mencocokan kaidah-kaidah dalam basis pengetahuan dengan fakta-fakta yang ada dalam basis data.

Ada dua teknik  yang dapat dikerjakan dalam melakukan inferensi, yaitu :
1.      Forward Chaining
Pencocokan fakta atau pernyataan dimulai dari bagian sebelah kiri (IF dulu). Dengan kata lain, penalaran dimulai dari fakta terlebih dahulu untuk menguji kebenaran hipotesis. Gambar 2.2 menunjukkan diagram Forward chaining.
 

Gambar 2.2. Diagram Forward Chaining

1.      Backward Chaining
Pencocokan fakta atau pernyataan dimulai dari bagian sebelah kanan (THEN dulu). Dengan kata lain, penalaran dimulai dari hipotesis terlebih dahulu, dan untuk menguji kebenaran hipotesis tersebut harus dicari fakta-fakta yang ada dalam basis pengetahuan.(Gambar 2.3)


 
Gambar 2.3. Diagram Backward Chaining

 
Kedua metode inferensi tersebut dipengaruhi oleh tiga macam penelusuran, yaitu Depth-first search, Breadth-first search dan  Best-first search.                       
  1. Breadth-first search, Pencarian dimulai dari simpul akar terus ke level 1 dari kiri ke kanan dalam 1 level sebelum berpindah ke level berikutnya. Gambar 2.4 menunjukkan breadth first search pada suatu pohon 2 level.


Gambar 2.4. Pohon Breadth First Search

Keuntungan BFS:
    1. Breadth first search tidak akan menemui jalan buntu.
    2. Jika ada 1 solusi maka breadth first search akan menemukannya. Jika terdapat lebih dari 1 solusi, maka solusi minimum akan ditemukan.


Kelemahan BFS:
1.      Membutuhkan memori yang cukup besar, karena menyimpan semua simpul dalam suatu pohon.
2.      Membutuhkan waktu yang cukup lama, karena akan menguji n level untuk mendapatkan solusi pada level yang ke-(n+1).

  1. Depth-first search, Pencarian dimulai dari simpul akar ke level yang lebih tinggi. Proses ini dilakukan terus hingga solusinya ditemukan atau jika menemui jalan buntu. Gambar 2.5 menunjukkan suatu pohon depth first search.
 

Gambar 2.5. Pohon Depth First Search
Keuntungan DFS :
    1. Membutuhkan memori yang cukup kecil, karena hanya simpul-simpul pada lintasan yang aktif saja yang disimpan.
    2. Secara kebetulan, pencarian mendalam pertama mungkin dapat menemukan suatu solusi tanpa harus menguji lebih banyak lagi dalam ruang keadaan.
Kelemahan DFS:
1.      Metode depth first search memungkinkan tidak ditemukannya tujuan yang diharapkan.
2.      Hanya akan mendapatkan 1 solusi pada setiap pencarian.
  1. Best-first search, bekerja berdasarkan kombinasi kedua metode sebelumnya.
            Dalam memilih apakah akan menggunakan pelacakan ke depan atau pelacakan ke belakang, semuanya bergantung masalah yang akan dibuat sistem pakarnya, dan belum dapat dibuktikan mana yang lebih baik di antara kedua metode inferensi ini.
            Untuk sebuah sistem pakar yang besar, dengan jumlah rule yang relatif banyak, metode pelacakan ke depan akan dirasakan sangat lamban dalam pengambilan kesimpulan, sehingga untuk sistem-sistem yang besar digunakan metode pelacakan ke belakang.

 


Sistem Pakar


Definisi
Sistem pakar adalah suatu program komputer yang dirancang untuk mengambil keputusan seperti keputusan yang diambil oleh seorang atau beberapa orang pakar. Menurut Marimin (1992), sistem pakar adalah sistem perangkat lunak komputer yang menggunakan ilmu, fakta, dan teknik berpikir dalam pengambilan keputusan untuk menyelesaikan masalah-masalah yang biasanya hanya dapat diselesaikan oleh tenaga ahli dalam bidang yang bersangkutan.
Dalam penyusunannya, sistem pakar mengkombinasikan kaidah-kaidah penarikan kesimpulan (inference rules) dengan basis pengetahuan tertentu yang diberikan oleh satu atau lebih pakar dalam bidang tertentu. Kombinasi dari kedua hal tersebut disimpan dalam komputer, yang selanjutnya digunakan dalam proses pengambilan keputusan untuk penyelesaian masalah tertentu.
Modul Penyusun Sistem Pakar
Suatu sistem pakar disusun oleh tiga modul utama (Staugaard, 1987), yaitu :
1.  Modul Penerimaan Pengetahuan Knowledge Acquisition Mode)
Sistem berada pada modul ini, pada saat ia menerima pengetahuan dari pakar. Proses mengumpulkan pengetahuan-pengetahuan yang akan digunakan untuk pengembangan sistem, dilakukan dengan bantuan knowledge engineer. Peran knowledge engineer adalah sebagai penghubung antara suatu sistem pakar dengan pakarnya

2.  ModulKonsultasi(ConsultationMode)
Pada saat sistem berada pada posisi memberikan jawaban atas permasalahan yang diajukan oleh user, sistem pakar berada dalam modul konsultasi. Pada modul ini, user berinteraksi dengan sistem dengan menjawab pertanyaan-pertanyaan yang diajukan oleh sistem.

3.  Modul Penjelasan(Explanation Mode)
Modul ini menjelaskan proses pengambilan keputusan oleh sistem (bagaimana suatu keputusan dapat diperoleh).
Struktur Sistem Pakar
Komponen utama pada struktur sistem pakar (Hu et al, 1987) meliputi:
1.  Basis Pengetahuan (Knowledge Base)
Basis pengetahuan merupakan inti dari suatu sistem pakar, yaitu berupa representasi pengetahuan dari pakar. Basis pengetahuan tersusun atas fakta dan kaidah. Fakta adalah informasi tentang objek, peristiwa, atau situasi. Kaidah adalah cara untuk membangkitkan suatu fakta baru dari fakta yang sudah diketahui. Menurut Gondran (1986) dalam Utami (2002), basis pengetahuan merupakan representasi dari seorang pakar, yang kemudian dapat dimasukkan kedalam bahasa pemrograman khusus untuk kecerdasan buatan (misalnya PROLOG atau LISP) atau shell sistem pakar (misalnya EXSYS, PC-PLUS, CRYSTAL, dsb.)

2.  Mesin Inferensi (Inference Engine)
Mesin inferensi berperan sebagai otak dari sistem pakar. Mesin inferensi berfungsi untuk memandu proses penalaran terhadap suatu kondisi, berdasarkan pada basis pengetahuan yang tersedia. Di dalam mesin inferensi terjadi proses untuk memanipulasi dan mengarahkan kaidah, model, dan fakta yang disimpan dalam basis pengetahuan dalam rangka mencapai solusi atau kesimpulan. Dalam prosesnya, mesin inferensi menggunakan strategi penalaran dan strategi pengendalian.
Strategi penalaran terdiri dari strategi penalaran pasti (Exact Reasoning) dan strategi penalaran tak pasti (Inexact Reasoning). Exact reasoning akan dilakukan jika semua data yang dibutuhkan untuk menarik suatu kesimpulan tersedia, sedangkan inexact reasoning dilakukan pada keadaan sebaliknya.
Strategi pengendalian berfungsi sebagai panduan arah dalam melakukan prose penalaran. Terdapat tiga tehnik pengendalian yang sering digunakan, yaitu forward chaining, backward chaining, dan gabungan dari kedua tehnik pengendalian tersebut.


3.  Basis Data (Database)
Basis data terdiri atas semua fakta yang diperlukan, dimana fakta-fakta tersebut digunakan untuk memenuhi kondisi dari kaidah-kaidah dalam sistem. Basis data menyimpan semua fakta, baik fakta awal pada saat sistem mulai beroperasi, maupun fakta-fakta yang diperoleh pada saat proses penarikan kesimpulan sedang dilaksanakan. Basis data digunakan untuk menyimpan data hasil observasi dan data lain yang dibutuhkan selama pemrosesan.

4.  Antarmuka Pemakai (User Interface)
Fasilitas ini digunakan sebagai perantara komunikasi antara pemakai dengan sistem. Hubungan antar komponen penyusun struktur sistem pakar dapat dilihat pada Gambar di bawah ini :
Teknik Representasi Pengetahuan
Representasi pengetahuan adalah suatu teknik untuk merepresentasikan basis pengetahuan yang diperoleh ke dalam suatu skema/diagram tertentu sehingga dapat diketahui relasi/keterhubungan antara suatu data dengan data yang lain. Teknik ini membantu knowledge engineer dalam memahami struktur pengetahuan yang akan dibuat sistem pakarnya.
Terdapat beberapa teknik representasi pengetahuan yang biasa digunakan dalam pengembangan suatu sistem pakar, yaitu :
1.  Rule-Based Knowledge
Pengetahuan direpresentasikan dalam suatu bentuk fakta (facts) dan aturan (rules). Bentuk representasi ini terdiri atas premise dan kesimpulan

2. Frame-Based Knowledge
Pengetahuan direpresentasikan dalam suatu bentuk hirarki atau jaringan frame

4.  Object-Based Knowledge
Pengetahuan direpresentasikan sebagai jaringan dari obyek-obyek. Obyek adalah elemen data yang terdiri dari data dan metoda (proses)

5.  Case-Base Reasoning
Pengetahuan direpresentasikan dalam bentuk kesimpulan kasus (cases)

(Untuk mengetahui lebih jelasnya, Anda dapat membaca buku :
     Management Information System (J.A. O'Brien)
McGraw Hill. Arizona.USA.
     Decision Support and Expert Systems; Management Support Systems (E. Turban)
Prentice Hall. New Jersey.USA.
Buku-buku lain yang membahas tentang Sistem Pakar)

Sistem pakar adalah sistem yang mempekerjakan pengetahuan manusia yang ditangkap dalam komputer untuk memecahkan masalah yang biasanya membutuhkan keahlian manusia.  Adapun komponen-kompenen yang mungkin ada dalam sebuah sistem pakar adalah:
2. Basis pengetahuan
Basis pengetahuan berisi pengetahuan penting untuk pengertian, formulasi dan pemecahan masalah.  Basis pengetahuan memasukkan dua elemen (1) fakta (facts) seperti situasi masalah dan teori dari area masalah dan (2) heuristic khusus atau rule-rule yang menghubungkan penggunaan pengetahuan untuk pemecahan masalah spesifik dalam sebuah domain khusus. Informasi dalam basis pengetahuan tergabung dalam basis pengetahuan tergabung dalam sebuah program komputer oleh proses yang disebut dengan representasi pengetahuan.
5. User interface
Sistem pakar berisi bahasa prosesor untuk komunikasi yang bersahabat, berorientasi pada masalah antara pengguna dan komputer.  Komunikasi ini dapat secara baik dibawa oleh natural language, dan dalam beberapa kasus user interface ditambahkan dengan menu-menu dan grafik.
Sedangkan konsep dasar dalam sistem pakar menurut Turban, 1993 adalah:
5. Rule
6. Kemampuan memberikan penjelasanHYPERLINK "http://kmp.htm/" \t "right"

Akuisisi Pengetahuan 
Akuisisi pengetahuan adalah akumulasi, transfer dan transformasi dari keahlian pemecahan masalah dari beberapa sumber pengetahuan ke program komputer untuk konstruksi atau perluasan basis pengetahuan.  Sumber-sumber pengetahuan potensial termasuk pakar manusia, textbook, database, laporan penelitian khusus, dan gambar-gambar.
Pengakuisisian pengetahuan dari pakar adalah tugas kompleks yang sering membuat kemacetan dalam konstruksi sistem pakar sehingga dibutuhkan seorang knowledge engineer untuk berinteraksi dengan satu atau lebih pakar dalam membangun basis pengetahuan.

Teknik Kompilasi


I. Pendahuluan
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 antara lain sebagai berikut :
  • 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 :
1.      Proses analisis leksikal
2.       Proses analisis sintaktik
3.       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
4.      Proses yang menghasilkan kode (code generator)
5.      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 pendef


II. Analisis Leksikal
2.1 Pengertian
Analisis Leksikal/Analisis Linier/Pembacaan Sekilas (Scanner). Dalam kaitan ini aliran karakter yang membentuk program sumber dibaca dari kiri ke kanan dan

dikelompokkan dalam apa yang disebut token yaitu barisan dari karakter yang dalam suatu kesatuan mempunyai suatu arti tersendiri..
Analisis ini melakukan penerjemahan masukan menjadi bentuk yang lebih berguna untuk tahap-tahap kompilasi berikutnya. Analisis Leksikal merupakan antarmuka antara kode program sumber dan analisis sintaktik (parser). Scanner melakukan pemeriksaan karakter per karakter pada teks masukan, memecah sumber program menjadi bagian-bagian disebut Token. Analisis Leksikal mengerjakan pengelompokkan urutan-urutan karakter ke dalam komponen pokok: identifier, delimeter, simbol-simbol operator, angka, keyword, noise word, blank, komentar, dan seterusnya menghasilkan suatu Token Leksikal yang akan digunakan pada Analisis Sintaktik.

Model dasar untuk membentuk suatu Analisis Leksikal adalah Finite-State Automata, 2 aspek penting pembuatan Analisis Leksikal adalah:
·         Menentukan token-token bahasa.
·         Mengenali token-token bahasa dari program sumber.
Token-token dihasilkan dengan cara memisahkan program sumber tersebut dilewatkan ke parser. Analisis Leksikal harus mengirim token ke parser. Untuk mengirim token, scanner harus mengisolasi barisan karakter pada teks sumber yang merupakan 1 token valid. Scanner juga menyingkirkan informasi seperti komentar, blank, batas-batas baris dan lain-lain yang tidak penting (tidak mempunyai arti) bagi parsing dan Code Generator.
Scanner juga harus dapat mengidentifikasi token secara lengkap dan membedakan keyword dan identifier. Untuk itu scanner memerlukan tabel simbol. Scanner memasukkan identifier ke tabel simbol, memasukkan konstanta literal dan numerik ke tabel simbol sendiri setelah konversi menjadi bentuk internal.
Analisis Leksikal merupakan komponen kompilasi independen yang berkomunikasi dengan parser lewat antarmuka yang terdefinisi bagus dan sederhana sehingga pemeliharaan analisis leksikal menjadi lebih mudah dimana perubahan-perubahan terhadap analisis leksikal tidak berdampak pada pengubahan kompilator secara keseluruhan. Agar dapat memperoleh fitur ini, maka antarmuka harus tidak berubah. Kebanyakan kode yang menyusun analisis leksikal adalah sama untuk seluruh kompilator, tidak peduli bahasa.



Pada analisis leksikal yang dituntun tabel (table-driven lexical analyzer), maka satu-satunya yang berubah adalah tabel itu sendiri. Kadang diperlukan interaksi analisis leksikal dan analisis sintaktik yang lebih kompleks. Sehingga analisis leksikal harus dapat menganggap string sebagai token bertipe, bukan identifier. Untuk itu perlu komunikasi
tingkat lebih tinggi yang biasanya dilakukan suatu struktur data dipakai bersama seperti tabel simbol. Analisis Sintaktik dapat memasukkan string ke tabel simbol, mengidentifikasi sebagai Type atau typedef, sehingga analisis leksikal dapat memeriksa tabel simbol untuk menentukan apakah lexeme adalah tipe token atau identifier.

2.2 Tugas-tugas Analsis Leksikal
Tugas-tugas Analisis leksikal antara lain sebagai berikut :
1.      Konversi Program Sumber Menjadi Barisan Token. Mengubah program sumber yang dipandang sebagai barisan byte/karakter menjadi token.
2.      Menangani Kerumitan Sistem Masukkan/Keluaran. Karena analisis leksikal biasanya berhubungan langsung dengan kode sumber yang diwadahi file, maka analisis leksikal juga bertindak sebagai benteng untuk komponen-komponen lain di kompilator dalam mengatasi keanehan-keanehan sistem masukkan/keluaran sistem operasi dan sistem komputer.
Optimasi perlu dilakukan agar analisis leksikal membaca karakter degan sekaligus membaca sejumlah besar bagian file. Perangkat masukkan/keluaran benar-benar diisolasi agar tidak terlihat oleh parser dan komponen-komponen kompilator yang lain.

2.3 Tugas-tugas tambahan Analisis Leksikal
Tugas-tugas tambahan Analisis Leksikal antara lain sebagai berikut :
1.      Penghilangan komentar dan whitespace (tab,spasi,karakter lainnya).Tindakan housekeeping dilakukan scanner sehingga mengisolasikan dari parser dan komponen-komponen kompilator lain.
Peran ini menyederhanakan perancangan parser (dan grammar bahasa pemrograman). Scanner juga mencatat nomor baris saat itu sehingga penanganan kesalahan yang cerdas dapat mengirim pesan kesalahan dengan lebih akurat.

2.      Konversi literal/konstanta numerik menjadi tipe data tertentu. Analisis leksikal dapat mengirim token, dan nilainya. Nilai ini biasa disebut atribut. Namun demikian, bila analisis leksikal ditambahin dengan tugas-tugas tambahan yang terlalu banyak juga akan menjadi tidak baik. Karena itu membatasi analisis
leksikal hanya untuk melakukan tugas pengenalan pola token (ditambah membuang komentar) adalah mempermudah pemeliharaan.
2.4 Tahap-tahap Pelaksanaan Analisis Leksikal
Tahap Pelaksanaan Analisis Leksikal antara lain sebagai berikut :
ü Pada single one pass.
Terjadi interaksi antara scanner dan parser. Sacnner dipanggil saat parser memerlukan token berikutnya. Pendekatan ini lebih baik karena bentuk internal program sumber yang lengkap tidak perlu dibangun dan disimpan di memori sebelum parsing dimulai.
ü  Pada separate pass.
Scanner memproses secara terpisah, dilakukan sebelum parsing. Hasil scanner disimpan dalam file. Dari file tersebut, parsing melakukan kegiatannya.
Scanner mengirim nilai-nilai integer yang mempresentasikan bentuk internal token, bukan nilai-nilai string.
Keunggulan cara ini adalah ukurannya kecil dan tetap. Parser sangat lebih efisien bekerja dengan nilai integer yang mempresentasikan simbol daripada string nyata dengan panjang variabel.

2.5 Implementasi Analisis Leksikal
Implementasi Analisis Leksikal antara lain sebagai berikut :
ü  Pengenalan Token.
1.      Scanner harus dapat mengenali token
2.      Terlebih dahulu dideskripsikan token-token yang harus dikenali
ü  Pendeskripsian Token.
1.      Menggunakan reguler grammar. Menspesifikasikan aturan-aturan pembangkit token-token dengan kelemahan reguler grammar
menspesifikasikan token berbentuk pembangkit, sedang scanner perlu bentuk pengenalan.
2.      Menggunakan ekspresi grammar. Menspesifikasikan token-token dengan ekspresi reguler.
3.      Model matematis yang dapat memodelkan pengenalan adalah finite-state acceptor (FSA) atau finite automata.
ü  Implementasi Analisis Leksikal sebagai Finite Automata.
Pada pemodelan analisis leksikal sebagai pengenal yang menerapkan finite automata, analisis leksikal tidak cuma hanya melakukan mengatakan YA atau TIDAK. Dengan demikian selain pengenal, maka analisis leksikal juga melakukan aksi-aksi tambahan yang diasosiasikan dengan string yangsedang diolah.
Analisis leksikal dapat dibangun dengan menumpangkan pada konsep pengenal yang berupa finite automata dengan cara menspesifikasikan rutin-rutin (aksi-aksi) tertentu terhadap string yang sedang dikenali.
ü  Penanganan Kesalahan di Analisis Leksikal Hanya sedikit kesalahan yang diidentifikasi di analisis leksikal secara mandiri karena analisis leksikal benar-benar merupakan pandangan sangat lokal terhadap program sumber.
Bila ditemui situasi dimana analisis leksikal tidak mampu melanjutkan proses karena tidak ada pola token yang cocok, maka terdapat beragam alternatif pemulihan. yaitu:
1.      "Panic mode" dengan menghapus karakter-karakter berikutnya sampai analisis leksikal menemukan token yang terdefinisi bagus
2.      Menyisipkan karakter yang hilang
3.      Mengganti karakter yang salah dengan karakter yang benar
4.      Mentransposisikan 2 karakter yang bersebelahan.
Salah satu cara untuk menemukan kesalahan-kesalahan di program adalah menghitung jumlah transformasi kesalahan minimum yang diperlukan untuk mentransformasikan program yang salah menjadi program yag secara sintaks benar.

2.6 Input Buffering
Perancangan analisis leksikal seharusnya dapat membuat buffering masukkan yang membantu mempercepat proses pembacaan dari file serta mempunyai fleksibelitas yang tinggi agar analisis leksikal tidak bergantung platform sehingga mempunyai portabilitas yang tinggi. 


III. Analisis Semantik
Disini dilakukan pengecekan pada struktur akhir yang telah diperoleh dan diperiksa kesesuainnya dengan komponen program yang ada. Merupakan pusat dari tahapan translasi, struktur sintaktik yang dikenali oleh Analisis Sintaktik diproses, dan struktur objek eksekusi sudah mulai dibentuk. Analisis Semantik kemudian menjadi jembatan antara analisis dan sintesis dari translasi.
Analisis Semantik menghasilkan suatu kode objek yang dapat dieksekusi dalam translasi sederhana, tetapi biasanya bentuk dari kode objek yang dapat dieksekusi ini merupakan bentuk internal dari final program eksekusi, yang kemudian dimanipulasi oleh tahap optimisasi dari translator sebelum akhirnya kode eksekusi benar-benar dihasilkan.

IV. Analisis Sintaktik
Analisis Sintaktik/Analisis Hirarki/Parsing. Dalam tahap ini karakter atau token yang diperoleh pada analisis leksikal disusun dan dikelompokkan dalam suatu hirarki tertentu yang secara keseluruhan mempunyai arti tertentu..
Disinilah struktur program yang lebih besar diidentifikasi (statement, deklarasi, ekspresi, dan lainnya) menggunakan token leksikal yang dihasilkan Analisis Leksikal.
Analisis Sintaktik selalu bekerja bergantian dengan Analisis Semantik.
  • Pertama, Analisis Sintaktik mengidentifikasikan urutan Token Leksikal seperti ekspresi, statement, subprogram, dan lainnya.
  • Analisis Semantik kemudian dipanggil untuk proses unit ini.
Analisis Sintaktik berfungsi menghasilkan pohon sintaks program sumber yang didefinisi grammar. Simbol terminal pohon sintaks adalah token-token yang dihasilkan scanner. Sebelum akhirnya kode eksekusi benar-benar dihasilkan.

V. Code Generation
Code Generator/Pembentukan Kode. Dimana dalam tahap ini dibentuk antara dari bahasa sumber yang berupa suatu pohon sintaks diterjemahkan ke dalam suatu bahasa assembler atau bahasa mesin.
Bentuk antara yang diperoleh biasanya merupakan suatu perintah 3 alamat atau suatu kuadrupel (3-address code atau quadruples), sedangkan bahasa mesin yang dihasilkan adalah suatu bahasa assembler yang merupakan suatu perintah 1 alamat, 1 akumulator.

VI Code Optimizer
Code Optimizer/Optimasi Kode. Hasil pembentukan kode yang diperoleh kemudian dibuat kompak lagi dengan melakukan beberapa teknik optimasi supaya dapat diperoleh program yang lebih efesien.
Dalam hal ini dilakukan beberapa hal seperti pendeteksian suatu ekspresi yang sering terjadi, sehingga pengulangan tidak perlu terjadi dan lain sebagainya.

VII. Lexeme
Lexeme adalah string yang merupakan masukan dari analisis Leksikal.




VIII. Praposesor
Praposesor adalah suatu program khusus menanggulangi terjadinya beberapa modul yang terpisah saat melakukan penulisan bahasa sumber menjadi beberapa file ke dalam suatu program baru.
  • Suatu Praposesor menghasilkan suatu input bagi suatu kompilator. Hal ini mungkin dilakukan oleh suatu kompilator antara lain:
Pemroses Makro.
Makro yang merupakan kependekan dari suatu bagian program yang lebih panjang memungkinkan penulis program untuk memperpendek program yang ditulisnya.
Dalam hal ini perlu dilakukan dua hal yaitu :
1.      Mendefinisikan makro yang digunakan.
Parameter yang didefinisikan pada makro disebut dengan parameter formal
  • 2.      Melakukan pemanggilan makro yang mungkin juga mengandung beberapa parameter. Sedangkan parameter yang digunakan untuk memanggil makro disebut dengan paramater aktual.
Pengikutsertaan berkas (File Inclusion).
Suatu Praprosesor memungkinkan diikutsertakannya beberapa berkas program yang telah ditulis sebelumnya ke dalam program yang sedang ditulis.
Biasanya berkas program yang ditulis sebelumnya merupakan segmen program yang sekali digunakan, banyak manfaatnya dan sering terjadi sudah merupakan bagian dari sistem bahasa yang digunakan.
Misalnya pada bahasa C, isi dari berkas global.h dapat diikutsertakan dalam program yang sedang ditulis dengan menggunakan perintah #include global.h


Praposesor Rasional.
Praprosesor ini memberikan kemampuan baru dari suatu bahasa dengan fasilitas pengendalian aliran (flow-of-control) atau struktur data yang lebih baik.
Misalnya dengan menambahkan kemampuan perintah while, if-then-else pada bahasa yang pada mulanya tidak mempunyai fasilitas tersebut.
Hal ini biasanya dilakukan dengan menggunakan makro yang sudah ada dalam bahasa tersebut.
Perluasan Bahasa.
Praprosesor ini memungkinkan suatu bahasa untuk berinteraksi dengan sistem atau bahasa lainnya.
Misalnya pada bahasa C yang ditambahkan kemampuannya untk dapat mengakses data dalam suatu database.
Untuk itu praprosesor memungkinkan menggunakan tanda ## yang menyatakan bahwa bagian ini bukan merupakan bagian dari bahasa C, tetapi berhubungan dengan sistem suatu paket database lain yang sudah baku.
Dengan demikian bagian ini akan diterjemahkan kedalam pemanggilan procedure untukmelakukan akses database.

IX. Single One Pass
Single One Pass adalah Suatu kompilator dapat dibuat hanya dengan melakukan 1 kali pembacaan program sumber. Tetapi kompilator yang demikian biasanya tidak dapat melakukan optimasi kode dengan baik.
Namun demikian kebanyakan kompilator untuk bahasa yang terstruktur melakukan beberapa kali pembacaan untuk :
  • dapat melakukan deteksi kesalahan 
  • menemukan kembali kesalahan yang telah diperoleh 
  • melakukan proses debugging
Rancangan kompilator ini dimaksudkan untuk menerjemahkan suatu ekspresi matematika yang ditulis dalam notasi infix menjadi notasi yang ditulis dalam notasi postfix.
Penekanan yang diberikan hanya pada bagian depan dari proses kompilasi yang dilakukan yaitu:
  • Analisis Leksikal 
  • Penguraian (parser) 
  • Pembentukan Kode Antara
Suatu penerjemahan berdasarkan sintaks merupakan kombinasi dari proses Analisis Leksikal dan Pembentuk Kode Antara

X. Sintaks
Pendefisian Sintaks suatu bahasa dilakukan dengan menggunakan suatu notasi tata bahasa bebas konteks (context-free grammar) atau untuk memudahkan disebut tata bahasa saja.
Suatu tata bahasa secara alamiah menerangkan struktur hirarki dari banyak bentuk bahasa pemrograman. Misalkan perintah if-else dari bahasa C mempunyai bentuk:
                                if (ekspresi) perintah else perintah
Ket :
Dalam hal ini suatu perintah adalah gabungan dari :
  • kata kunci if 
  • kurung buka 
  • ekspresi 
  • kurung tutup 
  • perintah 
  • kata kunci else 
  • perintah lainnya
(Dalam bahasa C tidak ada kata kunci then).

Bila digunakan nama variabel expr untuk menyatakan suatu ekspresi dan variabel stmt untuk menyatakan suatu perintah, maka struktur aturan ini dapat dinyatakan sebagai berikut :
stmt → if (expr) stmt else stmt
Ket:
→ (tanda panah dibaca sebagai) "Dapat berbentuk suatu".
Aturan diatas disebut juga suatu produksi (production). Dalam suatu produksi seperti ini unsur leksikal seperti kata kunci if dan tanda kurung "(",")" disebut suatu token
Variabel seperti expr dan stmt disebut dengan non-terminal.
Secara lengkap suatu tata bahasa bebas konteks dapat mempunyai 4 komponen berikut:
  • Himpunan dari token yang dikenal dengan simbol token. 
  • Himpunan dari unsur non-terminal 
  • Himpunan dari produksi, di mana masing-masing produksi terdiri dari unsur non-terminal (bagian kiri tanda panah dari suatu produksi). Bagian kanan produksi berupa → (tanda panah) dan barisan dari token dan/atau non-terminal (sebelah kanan tanda panah). 
  • Salah satu unsur non-terminal yang telah ditentukan sebagai awal tata bahasa disebut sebagai simbol awal.
Aturan umum yang digunakan dalam menentukan suatu tata bahasa adalah dengan menuliskan produksi yang ada dengan dimulai dari produksi yang mengandung simbol awal.

Terminal dapat berupa angka-angka, tanda-tanda seperti <=, dan rangkaian karakter yang ditulis huruf tebal seperti while dan lain-lainnya juga nama lain yang tidak dicetak miring.
Non-teminal dapat berupa nama yang dicetak miring.
Untuk memudahkan penulisan, maka produksi yang mempunyai simbol non-teminal disebelah kiri yang sama bagian kanannya dapat dikelompokkan dengan menggunakan tanda "|" yang memisahkan pilihan bagian kanan yang ada. pengelompokkan seperti ini dapat dibaca sebagai "atau"

Contoh 1:
9-5+2, 3-1, 7 merupakan barisan dari angka-angka yang dipisahkan oleh tanda '+' atau '-'.

Tata bahasa berikut memberkan sintaks dari ekspresi-ekspresi di atas. Produksi yang ada adalah:
list → list + digiT
list → list – digit
list → digit
digit → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Bagian kanan dari produksi untuk unsur non-terminal list
list → list + digit
list → list – digit
list → digit
di bagian kiri dapat dikelompokkan menjadi 1 produksi yang setara, yaitu:
list → list + digit | list - digit | digit
  • Penulisan Produksi menjadi: list → list + digit | list - digit | digit digit → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
  • Token yang menjadi terminal digunakan adalah simbol +,-,0,1,2,3,4,5,6,7,8,9 
  • Sedangkan unsur non-terminal adalah nama-nama yang digaris miring seperti list dan digit 
  • Simbol Awal adalah produksi non-terminal list
Suatu unsur non-terminal dapat merupakan suatu produksi bila unsur non-terminal tersebut timbul dibagian kiri dari produksi.

Barisan token adalah barisan dari nol atau lebih token. Unsur yang mengandung nol token ditulis sebagai ε, dan disebut dengan nama barisan kosong.
Suatu bahasa diperoleh dari :
  •  barisan-barisan yang dimulai dari simbol awal 
  • bagian kanan yang masih berupa non-terminal (bukan token/terminal) dari produksi dapat diganti dengan mencari acuan pada bagian kiri dari produksi yang ada dengan non-terminal yang sama. 
  • mengganti unsur non-terminal pada bagian kiri produksi dengan bagian kanan dari produksi non-terminal tersebut. 
  • Barisan token pada bagian kanan produksi yang menjadi pengganti unsur non terminal acuan pada bagian kiri produksi merupakan akhir dalam pembentukan bahasa.
Contoh 2:
Bahasa yang didefinisikan oleh tata bahasa pada contoh 1 terdiri dari barisan angkaangka yang dipisahkan oleh tanda '-' atau '+'.
Kesepuluh produksi dari unsur nonterminal digit (digit → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9) dapat digunakan sebagai penganti token-token yang berhubungan dengan angka yaitu 0,1,2,3,4,5,6,7,8,9 dari produksi list → digit, maka dapat dikatakan bahwa 1 angka yang berdiri sendiri adalah suatu list juga, yaitu :
Pada produksi list → digit
0 merupakan bahasa yang dibentuk list
1 merupakan bahasa yang dibentuk list
2 merupakan bahasa yang dibentuk list
3 merupakan bahasa yang dibentuk list
4 merupakan bahasa yang dibentuk list
5 merupakan bahasa yang dibentuk list
6 merupakan bahasa yang dibentuk list
7 merupakan bahasa yang dibentuk list
8 merupakan bahasa yang dibentuk list
9 merupakan bahasa yang dibentuk list
Pada produksi lainnya
list → list + digit
list → list – digit
menyatakan bahwa list yang diikuti oleh tanda '+' atau '-' dan diikuti oleh list akan
membentuk suatu list baru.
Ternyata semua produksi yang digunakan pada contoh 1 adalah produksi-produksi yang diperlukan untuk dapat mendefinisikan bahasa yang diinginkan untuk ekspresi 9-5+2, 31, 7
9-5+2 merupakan salah satu anggota dari bahasa yang dibentuk list, dimana list adalah simbol awal. Hal ini dapat ditunjukkan sebagai berikut:
  • 9 merupakan list dari produksi "list → digit" dimana digit membentuk 9 pada
"digit → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9" atau secara terpisah menjadi
digit → 0
digit → 1
digit → 2
digit → 3
digit → 4
digit → 5
digit → 6
digit → 7
digit → 8
digit → 9.
  • 9-5 merupakan list dari produksi "list → list - digit" dimana 9 sudah berupa list dan digit membentuk 5 pada "digit → 5". 
  • 9-5+2 merupakan list dari produksi "list → list + digit" = (9-5) + 2. Dimana 9-5 sudah berupa list dan digit membentuk 2 pada "digit → 2".
Hal ini dapat dilihat pada gambar 1 berikut ini



Gambar 1 Pohon urai dari ekspresi 9-5+2 menurut tata bahasa contoh 1
Pada gambar ini setiap nodal (titik pertemuan antar garis) pada pohon urai diberi label salah satu simbol tata bahasa.
Nodal dalam (internal node / nodal di atas nodal yang lain) dan anak-anaknya (nodal yang terletak di bawah nodal dalam) berhubungan dengan suatu produksi.
Nodal dalam berhubungan dengan bagian kiri dari produksi, sedangkan anak-anaknya berhubungan dengan bagian kanan dari produksi yang sama.
Pohon demikian disebut pohon urai dari ekspresi yang diberikan.


Contoh 3
Pada bahasa Pascal dapat dijumpai dalam cakupan blok begin-end. Salah satu perbedaan yang sangat mencolok yang terdapat pada contoh adalah adanya list dari perintah-perintah yang mungkin kosong diantara token-token begin dan end.
Untuk itu dikembangkan suatu tata bahasa yang mengandung produksi berikut:
block → begin opt_stmts end
opt_stmts → stmt_list | ε
stmt_list → stmt_list εstmt | stmt
Pada produksi opt_stmts, kemungkinan ke-2 bagian kanan pada "opt_stmts → stmt_list | ε" adalah perintah yang boleh memilih "ε", yang mengartikan rangkaian kosong dari simbol-simbol. Jadi suatu blok dapat hanya terdiri dari 2 token yaitu begin dan end

Pada produksi stmt_list sangat mirip dengan produksi list pada contoh 1, dimana tanda "|" menggantikan operator "+" dan "-" (list → list + digit | list - digit | digit). Unsur non-terminal stmt menggantikan unsur non-terminal digit.

XI. Token
Token merupakan unit atau elemen dasar bahasa komputer (seperti 'kata' di bahasa manusia), dimana unit tersebut tidak terbagi lagi. Token merupakan bagian hasil dari pemecahan sumber program yaitu penerjemahan lexeme pada saat melakukan scanner.
Token mereprentasikan nama :
  •  identifier -> nama variabel, fungsi, tipe atau nama yang didefinisikan pemakai. 
  • Keyword 
  • literal string 
  • operator 
  • label 
  • simbol tanda -> tanda kurung, koma, titik koma.