Analisis sintaks = analisis rumus kalimat. Dilakukan perkalimat, yang bisa berarti perbaris kode pada sebuah naskah kode.
Blok demi blok, dimulai dengan blok terluar sebagai node awal, lalu urai ke blok2 berikut. Lalu dari setiap blok diurai ekspresi demi ekspresi.
Pada suatu ekspresi, bila dinyatakan sebagai kurung demi kurung, maka dibuat anak pohon baru (yg bisa tetap tersambung induknya atau terpisah) yang menyatakan pohon kurung demi kurung mulai dengan kurung dengan prioritas tertinggi sebagai node paling awal.
Pada suatu eksprsi jika terdapat ekspresi yang mengandung operasi2, maka dilakukan pembentukan anak pohon baru (yg boleh tersambung dengan induk atau terpisah), kemudian pohon dibentuk berdasrkan prioritas operasi. Node awal diisi oleh operasi dengan prioritas tertinggi.
·
Analisis Semantik
Merupakan analisis dengan melakukan pengecekan pada struktur akhir yang telah diperoleh dan diperiksa
kesesuaiannya dengan komponen program yang ada.
Penganalisis
semantik bekerja dengan memanfaatkan pohon sintaks yang telah dibuat oleh
parser. Secara teoritis, proses analisis sintaks dan semantik adalah dua proses
yang terpisah, tapi pada prakteknya hal itu sulit dilakukan karena kedua proses
tsb sangat erat kaitannya dan sulit untuk dipisahkan.
Untuk mengetahui makna, maka rutin analisa
semantik akan memeriksa :
a. Apakah variabel yang ada telah
didefenisikan didefenisikan sebelumnya
b. Apakah variabel-variabel tersebut
tipenya sama
c. Apakah operan yang akan dioperasikan
tersebut ada nilainya dan seterusnya.
Pengecekan yang dilakukan oleh analisa
semantik adalah:
Ø Memeriksa pemberlakuan nama-nama yang
meliputi Duplikasi (pengecekan apakah sebuah nama terjadi
duplikasi) dan Terdefenisi (Pengecekan apakah sebuah nama yang
dipakai pada tubuh program sudah terdefenisi atau belum)
Ø Memeriksa tipe disini dilakukan
pemeriksaan misal dalam penjumlahan
A+ B = C disini diperiksa apakah A,B dan C
bertipe number atau tidak.
Setelah pengecakan dilakukan dan proses
analisa semantik akan beraksi maka dibutuhkan tabel simbol. Tabel simbol
digunakan untuk pembuatan dan implementasi dari analisa semantik Tabel
simbol berfungsi untuk :
v Menyimpan inforamasi tentang :
· Nama variabel dan tipe datanya
· Informasi detail untuk record dan array
· Nama prosedur dan fungsi yang ada
· Jumlah, nama, tipe data dan parameter
fungsi/prosedur
· Nama label
· Konstanta dan String
v Membantu memeriksa kebenaran semantic
dari source code
v Membantu mempermudah dalam pembuatan
intermediate code dan code
generation.
·
Analisis Leksikal
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.
Implementasi Analisis Leksikal
1. Pengenalan Token
- Scanner harus dapat mengenali token
- Terlebih dahulu dideskripsikan token-token
yang harus dikenali
2. 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.
3. 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.
4. 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:
- "Panic mode" dengan menghapus
karakter-karakter berikutnya sampai analisis leksika 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.
·
Analisis Sintaksis
Analisis sintak lebih sering disebut
penguraian (parsing). Tujuan utama dari analisis sintak adalah memeriksa apakah
urutan token-token yang dihasilkan sesuai dengan tata bahasa dari bahasa yang
bersangkutan. Misalnya bahasa C mengenal kalimat: jumlah++; yang berarti
menaikkan harga variabel jumlah dengan angka satu. Tetapi kalimat di atas akan
salah jika dikompilasi dengan kompilator bahasa Pascal, karena tidak sesuai dengan
tata bahasa Pascal.
Dalam analisis sintak, tata bahasa yang digunakan untuk mendefinisikan aturan
sintak suatu bahasa disebut tata bahasa bebas konteks (Context Free Grammar).
Tata bahasa ini memiliki empat komponen penting yaitu himpunan simbol terminal,
himpunan non-terminal, himpunan produksi dan simbol awal. Dalam bahasa
pemrograman, yang disebut terminal adalah token. Contoh terminal adalah token.
Contoh token misalnya kata kunci (keyword) if, while, dan identifier serta
bilangan. Sedangkan non-terminal merupakan variabel-variabel sintak yang
menyatakan himpunan terminal maupun non-terminal.
Dalam proses parsing terjadi
proses penggantian suatu non terminal dengan sederetan himpunan non terminal
dan terminal yang berada dalam sisi kanan produksnya. Proses ini disebut
sebagai derivasi. Contohnya non-terminal if_stmt merupakan himpunan terminal
if, then, else, dan non-terminal expr dan stmt, yang membentuk aturan produksi
: if_stmt ?? if expr then stmt else stmt. Dari semua simbol non-terminal yang digunakan,
ada satu simbol yang bertindak sebagai simbol awal, yaitu simbol yang pertama
kali diderivasi. Aturan produksi menggambarkan bagaimana kombinasi non-terminal
dan terminal yang benar menurut tata bahasa yanbg bersangkutan. Dalam proses
penguraian, token-token yang dihasilkan dalam analisis leksikal dibentuk
menjadi pohon urai (parse tree).
Komentar
Posting Komentar