Senin, 14 Februari 2011

analisa leksikal

Analisa leksikal (scanner) merupakan antarmuka kode program sumber dan analisa sintaktik(parser). Atau sebuah proses yang mendahului parsing sebuah rangkain karakter. Scanner melakukan pemeriksaan karakter pada teks masukan, memecah sumber program menjadi bagian-bagian disebut token. Proses parsing akan lebih mudah dilakukan bila inputnya sudah berupa token.
Analisa leksikal mengerjakan pengelompokkan urutan-urutan karakter ke dalam komponen pokok : identifier, delimeter, symbol-simbol operator, angka, keyword, blank, komentar, dan seterusnya menghasilkan suatu token leksikal yang akan digunakan pada analisa sintaktik. Model dasar untuk memebentuk suatu analisa leksikal adalah finite state automata.
tahap tahap pada analisa leksikal:
- Pemindaian (scanning) : sanner biasanya dibuat berdasarkan prinsip finite state machine (“mesin dengan jumlah keadaan terbatas”). Pada tahap ini, scanner akan membaca input karakter ke karakter, mengubah keadaannya sendiri berdasarkan karakter yang tengah dibaca. Setiap kondisi final (input dianggap valid) akan dicatat bersama dengan lokasi input. Pada akhirnya scanner akan menemui keadaan penolakan, yang tidak akan berubah dengan input karakter apapun. Deteksi rekursi semacam ini akan mengakhiri proses pemindaian dan memindahkan keadaan scanner ke keadaan final terakhir, dan karenanya menyimpan informasi jenis dan besar lexeme valid yang terpanjang di dalam input.
Namun lexeme tersebut belum punya nilai semantic apapun. Pemberian nilai semantic pada setiap unit leksikal adalah tugas dari evaluator yang memeriksa semua karakter setiap lexeme dan memberinya nilai tertentu. Saat sebuah lexeme telah memiliki informasi mengenai tipe dan nilainya, ia dapat secara valid disebut sebagai token.
Analisis leksikal membuat pekerjaan sebuah parser menjadi lebih mudah daripada mambangun nama setiap fungsi dan variable dari karakter-karakter yang menyusunnya, dengan analisis leksikal parser cukup hanya berurusan dengan sekumpulan token dan nilai sintaksis masing-masing. Terlepas dari efisiensi pemrograman yang dapat dicapai dari penggunaannya, proses kerja analisis leksikal yang membaca lebih dari sekali setiap karakter dari input yang diberikan menjadi penganalisa leksikal sebagai sub-sistem yang paling intensif melakukan komputasi, terutama bila digunakan dalam kompilator.
Kompilator adalah sebuah program yang membaca suatu program yang ditulis dalam suatu bahasa sumber (source language) dan menterjemah-kannya ke dalam suatu bahasa sasaran (target language).
Dalam penguraian struktur kalimat, penganalisa leksikal menganalisa setiap kata dalam kalimat, kemudian menentukan jenis kelas katanya. Hasil dari penganalisa leksikal ini digunakan oleh penganalisa sintaks yang akan memeriksa urutan simbol-simbol kelas kata tersebut dalam kalimat. Analisa kata dalam kalimat ini dilakukan oleh penganalisa leksikal berdasarkan kecocokan kata dengan aturan-aturan leksikal berupa ekspresi regular yang sudah didefinisikan. Bentuk aturan-aturan leksikal ini sudah didefinisikan oleh Iskak Hendrawan pada penelitiannya.

Dua aspek penting pembuatan Analisa 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. Analisa Leksikal harus mengirim token ke parser. Untuk mengirim
token, scanner harus mengisolasi barisan karakter pada teks sumber yang merupakan
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 symbol sendiri setelah konversi menjadi bentuk internal.

Analisa Leksikal merupakan komponen kompilasi independen yang berkomunikasi dengan parser lewat antarmuka yang terdefinisi bagus dan sederhana sehingga pemeliharaan analisa leksikal menjadi lebih mudah dimana perubahan-perubahan terhadap analisa leksikal tidak berdampak pada pengubahan kompilator secara keseluruhan. Agar dapat memperoleh fitur ini, maka antarmuka harus tidak berubah. Kebanyakan kode yang menyusun analisa leksikal adalah sama untuk seluruh kompilator, tidak peduli bahasa.

Pada analisa leksikal yang dituntun tabel (table-driven lexical analyzer), maka satu-satunya yang berubah adalah tabel itu sendiri. Kadang diperlukan interaksi analisa leksikal dan analisa sintaktik yang lebih kompleks. Sehingga analisa 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.

Analisa Sintaktik dapat memasukkan string ke tabel simbol, mengidentifikasi
sebagai Type atau typedef, sehingga analisa leksikal dapat memeriksa tabel simbol untuk menentukan apakah lexeme adalah tipe token atau identifier.


Tugas Analisa leksikal

Tugas – tugas analisa leksikal antara lain :
a. Melakukan pembacaan kode sumber dengan merunut karakter demi karakter.
b. Mengenali besaran leksik (identifier, keywords, dan konstanta).
c. Mentransformasi menjadi sebuah token dan menentukan jenis tokennya.
d. Mengirimkan token.
e. Membuang atau mengabaikan white-space dan komentar dalam program.
f. Menangani kesalahan.
g. Menangani tabel symbol

Tahap Pelaksanaan Analisa Leksikal

- Pada single one pass
Terjadi interaksi antara scanner dan parser. Scanner 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 / multi 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 nilainilai
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.
Implementasi Analisa Leksikal

a. Pengenalan Token
- Scanner harus dapat mengenali token
- Terlebih dahulu dideskripsikan token-token yang harus dikenali

b. Pendeskripsian Token
- Menggunakan reguler grammar. Menspesifikasikan aturan-aturan pembangkit
token-token dengan kelemahan reguler grammar menspesifikasikan token berbentuk
pembangkit, sedang scanner perlu bentuk pengenalan.
- Menggunakan ekspresi grammar. Menspesifikasikan token-token dengan ekspresi
reguler.
- Model matematis yang dapat memodelkan pengenalan adalah finite-state acceptor
(FSA) atau finite automata.

c. Implementasi Analisa Leksikal sebagai Finite Automata
Pada pemodelan analisa leksikal sebagai pengenal yang menerapkan finite automata,
analisa leksikal tidak cuma hanya melakukan mengatakan YA atau TIDAK. Dengan
demikian selain pengenal, maka analisa leksikal juga melakukan aksi-aksi tambahan
yang diasosiasikan dengan string yangsedang diolah. Analisa 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.
d. Penanganan Kesalahan di Analisa Leksikal
Hanya sedikit kesalahan yang diidentifikasi di analisa leksikal secara mandiri karena
analisa leksikal benar-benar merupakan pandangan sangat lokal terhadap program
sumber. Bila ditemui situasi dimana analisa leksikal tidak mampu melanjutkan proses
karena tidak ada pola token yang cocok, maka terdapat beragam alternatif pemulihan,
yaitu:
- "Panic mode" dengan menghapus karakter-karakter berikutnya sampai analisa
leksikal menemukan token yang terdefinisi bagus
- Menyisipkan karakter yang hilang
- Mengganti karakter yang salah dengan karakter yang benar
- 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.
Input Buffering

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

Membangun Analisa Leksikal

Scanner diimplementasikan dengan Automata Hingga Deterministik (AHD). Pada
kuliah Teori Bahasa dan Automata (atau Pengantar Automata, Bahasa Formal, dan
Kompilasi) telah dipelajari siklus transformasi : GR ® ER ® AHN ® AHD ® GR.
Sumber :
http://dannaru.blogspot.com/2010/04/analisa-leksikal.html
http://arispermana.wordpress.com/2010/04/18/analisa-leksikal-scanner/

Jumat, 11 Februari 2011

jaringan komputer

Jaringan komputer adalah sebuah sistem yang terdiri atas komputer dan perangkat jaringan lainnya yang bekerja bersama-sama untuk mencapai suatu tujuan yang sama.
Agar jaringan dapat berfungsi, dibutuhkan layanan-layanan yang dapat mengatur pembagian sumber daya. Dibutuhkan aturan-aturan (protocols) yang mengatur komunikasi dan layanan-layanan secara umum untuk seluruh sistem jaringan.
disini akan dijelaskan mengenai jenis-jenis berdasarkan arsitekturnya saja.
1. cliet-server.
Definisi:
Server (back end) = penyedia layanan yang menyediakan akses ke sumber daya jaringan
Client (front end) = komputer yang meminta layanan dari server
Client/Server yaitu jaringan komunikasi data yang terdiri dari banyak client dan satu atau lebih server.
Keuntungan:
Penyimpanan data yang terpusat memberikan kemudahan untuk pengelolaan dan backup data
Penggunaan spesifikasi server yang optimal mempercepat proses komunikasi di jaringan
Kemudahan mengatur user dan sharing peralatan mahal
Keamanan lebih terjamin
Keuntungan:
Biaya pembelian hardware dan software server
Dibutuhkan administrator jaringan

2. peer to peer
Sebuah workgroup, dimana setiap komputer dapat berfungsi sebagai client dan server sekaligus
Keuntungan:
Tidak ada biaya tambahan untuk pembelian hardware dan software server
Tidak diperlukan administrator jaringan
Kekurangan:
Sharing sumber daya membebani proses di komputer yang bersangkutan
Keamanan tidak terjamin

3. hybrid
Menggabungkan keuntungan jaringan client/server dan peer-to-peer
User dapat mengakses sumber daya yang di-share oleh jaringan peer-to-peer, dan secara bersamaan dapat menggunakan sumber daya yang disediakan oleh server

referensi :
http://www.kuliah-it.co.cc/2009/08/jaringan-komputer.html
http://combine-arsipku.blogspot.com/2010/07/materi-jaringan-komputer.html