1) Bahasa Pemrograman
Suatu program akan lebih mudah dan alami untuk kita peroleh jika
bahasa pemrograman yang digunakan cukup sesuai dengan tipe masalah yang
kita hadapi. Di dalam bahasa pemrograman ini harus mengandung susunan serta
struktur yang mencerminkan terminologi elemen yang digunakan dalam
penyajian masalah.
2) Translator
Suatu input dari sebuah penerjemah atau translator dari suatu program
disebut dengan program sumber atau source program. Selanjutnya program
sumber ini diterjemahkan ke dalam sebuah program objek atau program target.
Program sumber ini ditulis kedalam suatu bahasa sumber (source language) dan
program objek dalam suatu bahasa objek (object language).
Jika bahasa sumber adalah bahasa rakitan dan program objek yang
bersangkutan merupakan program dalam bahasa mesin , maka penerjemah /
translator tersebut dinamakan assembler. Bahasa rakitan menyerupai bahasa
mesin. Di dalam bahasa mesin elementer , banyak diantara instruksinya
merupakan suatu simbol simbolik dari instruksi bahasa mesin yang bersesuaian.
Setiap instruksi bahasa rakitan terdiri dari sebuah himpunan terurut(ordered set)
dari suatu field. Misalnya field pertama harus mewakili suatu label yang diikuti
suatu field operasi.
Berikut ini adalah beberapa jenis translator untuk menerjemahkan suatu source
sumber agar dikenali oleh mesin diantaranya :
1) Assembler
Source code adalah bahasa assembly, object code adalah bahasa mesin.
2) Compiler
Source code nya adalah bahasa tingkat tinggi , object code adalah bahasa
mesin atau bahasa assembly.
3) Interpreter
3) Model Kompilator
Pekerjaan untuk membuat sebuah kompilator untuk suatu bahasa sumber adalah
sangat sulit. Kerumitan serta sifat dari suatu proses kompilasi tergantung pada
tingkat keluasan dari bahasa sumber. Kerumitan kompilator dapat dikurangi jika
perancang bahasa pemrograman mempertimbangkan bermaca-macam faktor dalam
perancangan.
Suatu kompilator harus melaksanakan dua tugas utama yaitu tugas analisis
terhadap program sumber dan tugas sintesis memadukan menjadi program objek
yang ekivalen. Tugas analisis berhubungan dengan pemisahan bagian dari program
sumber menjadi bagian-bagian dasar dan menggunakan bagian-bagian ini dalam
tugas sintesis dalam membangun modul program objek yang ekivalen.
Suatu program sumber adalah suatu untai atau string dari symbol yang
umumnya berupa huruf, angka atau symbol khusus seperti + , - , * dsb.
- Nama variable
- Label
- Konstanta
- Kata kunci (reserved word) maupun operator
-
Pembuatan compiler
Kompiler yang bagus adalah yang dapat bekerja dengan baik pada mesin-mesin
komputer dan tidak membutuhkan proses yang lama
Ada beberapa cara dalam membuat suatu penerjemah dalam hal ini misalnya compiler,
dan bahasa yang digunakan untuk membuat compiler pun dapat beragam misalnya :
Bahasa mesin :
Assembly :
Bootstrap
Hirarki Chomsky
Keterangan :
Tipe 0 / Bahasa Natural : Tidak ada batasan aturan produksi Contoh : Abc → De
Tipe 1 / Context Sensitive : Panjang string ruas kiri harus lebih kecil atau sama dengan
ruas kanan. Contoh : Ab → DeF , CD → eF
Tipe 2 / Context Free Grammar : Ruas kiri haruslah tepat satu symbol variable .
Contoh B→CDeFG
Tipe 3/ Regular : Ruas Kanan hanya memiliki maksimal satu symbol non terminal
yang diletakan di paling kanan sendiri. Contoh :
A →e
A → efg
A → efgH
Aturan Produksi
Aturan produksi digunakan agar penerapan pada pembuatan tata bahasa
dikomputer dapat lebih mudah dan menghasilkan suatu penerjemah yang dapat
diandalkan.
T → a, T menghasilkan a
Diagram state
Bagi pembuat penerjemah yaitu manusia harus sering menguji tata bahasa yang
dibuat , salah satu ilustrasi pengujian agar yang diinginkan sesuai dengan yang diharap
kan maka, digunakan suatu gambar yaitu dinamakan dengan diagram state.
Untuk alas an efiesiensi , kepada setiap kelas dari token diberikan suatu
bilangan yang mewakili harga internalnya , secara unik . Sebagai contoh
suatu nama varibel mungkin disajikan atau diwakili oleh suatu bilangan 1,
suatu konstanta disajikan dengan bilangan 2, suatu label dengan bilangan 3 ,
operator penjumlahan dengan bilangan 4 dsb.
Hal ini merupakan suatu pendekantan yang menguntungkan karena semua token
diwakili oleh panjang informasi yang tetapi , yang terdiri dari suatu alamat (atau
pointer) dan suatu bilangan bulat.
(A+B)*(C+D)
Rutin ini mungkin memerikasa apakah kedua operand yang ditambahkan sudah
dideklarasikan , serta apakah mempunyai tipe yang sama (jika tidak , bisa saja rutin
tersebut menjadi sama) dan apakah kedua operand mempunyai nilai . Penganalisi
semantic sering berinteraksi dengan berbagai tabel dari kompilator dalam
menjalankan tugasnya .
Aksi Penganalis semantic mungkin mengandung bentuk intermediate dari kode
sumber. Untuk ekspresi (A+B)*(C+) , bentuk intermediate dari kode sumber
mungkin berbentuk seperti :
Bentuk yang tepat dari bahasa sumber intermediate ke bentuk intermediate yang
disebut dengan Notasi Polish. Sebuah ekspresi infix (A+B)*(C+D) dapat
dikonversikan sehingga ekivalen dengan suffix-polish(Postfix-polish) AB+CD+*.
Ekspresi yang terakhir ini mengandung operator aritmetika dalam urutan
sebagaimana ia dilaksanakan . Jenis lain dari bentuk ini dapat berupa sebuah pohon
sintaks yang menyatakan hasil uraian atau parse dari program sumber.
Gambar : Kelas yang dihasilkan dari analisis sintaks ke dalam bentuk pohon(tree)
Syntax Tree
Bagian kedua dari compiler yaitu Analisis sintaks secara umum bertugas memeriksa
kebenaran dan urutan dari token-token yang terbentuk oleh lexical analysis. Dimana
tugasnya adalah :
- Pengelompokan token-token de dalam class syntax (bentuk syntax)
seperti procedure, statement, dan expression.
- Penurunan terkiri (leftmost derivation : symbol variable yang paling kiri diturunkan
(tuntas) dahulu
S -> a AS | a,
A -> SbA | ba
- Penurunan kiri :
S => aAS
aSbAS
aabAS
aaabbaS
aabbaa
- Penurunan Kanan
S => aAS
aAa
aSbAa
aSbbaa
aabbaa
- Waktu eksekusi
- Penanganan kesalahan
- Penanganan Kode
- Top-down : penulusuran dari root ke leaf atau dari symbol awal ke symbol
terminal metode ini meliputi :
S → aAD | aB
A →b | c
B → ccd | ddc
Contoh :
S → dS
B → adB
Contoh :
S → Sd
B → B ad
- Beda dengan turing yang selalu maju dan mundur dalam melakukan
parsing