Newest Post
// Posted by :Unknown
// On :Selasa, 08 September 2015
NAMA : BERNAD Y NGEFAK
NIM : 13110271
Tugas pertama yang diberikan oleh bapak dosen di dalam mata kuliah Teknik Kompilasi dimana kami harus mencari arti dari :
-Proses Analisis Leksikal
-Proses Analisis Sintetik
-Proses Analisis Semantik
Yang di buat dalam sebuah Laporan....
Laporan Tugas 1 Teknik Kompilasi
1.
Analisis Leksikal
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:
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.
1.1 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.
1.2 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.
1.3 Tahap-tahap Pelaksanaan
Analisis Leksikal
Tahap Pelaksanaan Analisis
Leksikal antara lain sebagai berikut :
1. 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.
2. 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.
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.
1.4 Implementasi Analisis Leksikal
Implementasi Analisis Leksikal
antara lain sebagai berikut :
1. Pengenalan
Token.
a. Scanner
harus dapat mengenali token
b. Terlebih
dahulu dideskripsikan token-token yang harus dikenali
2. Pendeskripsian
Token.
a. Menggunakan
reguler grammar. Menspesifikasikan aturan-aturan pembangkit token-token dengan
kelemahan reguler grammar menspesifikasikan token berbentuk pembangkit, sedang
scanner perlu bentuk pengenalan.
b. Menggunakan
ekspresi grammar. Menspesifikasikan token-token dengan ekspresi reguler.
c. 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 . 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.
3. 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.
1. Pertama,
Analisis Sintaktik mengidentifikasikan urutan Token Leksikal seperti ekspresi,
statement, subprogram, dan lainnya.
2. 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.