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
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.
Belum ada tanggapan untuk "Pengertian Praposesor "
Posting Komentar