Ø Bahasa Pemrograman
Manusia dapat melakukan interaksi secara efektif
dengan menggunakan media
bahasa. Bahasa memungkinkan penyampaian gagasan dan
pemikiran, tanpa itu
komunikasi akan sulit terjadi. Dalam lingkungan
pemrograman komputer, bahasa
pemrograman bertindak sebagai sarana komunikasi
antara manusia dan
permasalahannya dengan komputer yang dipakai untuk
membantu memperoleh
pemecahan.
Bahasa pemrograman berdasarkan tingkat
ketergantungannya dengan mesin bisa
meliputi: 1.
Bahasa Mesin
Merupakan bentuk terendah dari bahasa komputer.
Setiap instruksi dalam program
direpresentasikan dengan kode numerik, yang secara
fisik berupa deretan angka 0
dan 1. 2. Bahasa Assembly
Merupakan bentuk simbolik dari bahasa mesin. Setiap
kode operasi memiliki kode
simbolik, misalnya ADD untuk penjumlahan (Addition)
dan MUL untuk perkalian
(Multiplication). Pada bahasa assembly tersedia alat
bantu untuk diagnostik atau
debug yang tidak terdapat pada bahasa mesin. Contoh
produk yang ada untuk
pengembangan dan debug bahasa assembly di pasaran
saat ini, misalnya Turbo
Assembler dari Borland, Macro Assembler dari
Microsoft, Debug yang tersedia
pada DOS, dan lain – lain.
3.
Bahasa tingkat tinggi (User Oriented)
Disebut tingkat tinggi karena lebih dekat dengan manusia.
Memberikan fasilitas
yang lebih banyak, kontrol program yang terstruktur,
kalang (nested), block, dan
prosedur. Contohnya : Pascal, C, Basic, dan lain –
lain. 4. Bahasa yang Problem Oriented
Memungkinkan penyelesaian untuk suatu masalah atau
aplikasi yang spesifik.
Contohnya : SQL (Structured Query Language) untuk
aplikasi database, COGO
untuk aplikasi teknik sipil. Bahasa yang problem
oriented kadang dimasukkan
pula sebagai bahasa tingkat tinggi.
Keuntungan bahasa tingkat tinggi dibandingkan bahasa
tingkat rendah adalah sebagai
berikut. 1. Kemudahan untuk dipelajari. 2. Lebih
mendekati permasalahan yang akan diselesaikan. 3. Pemrogram tidak perlu
mengetahui bagaimana representasi data ke dalam bentuk
internal di memory
. 4. Memberikan banyak pilihan struktur kontrol
seperti :
·
Kondisional (IF – THEN – ELSE)
·
Looping
·
Struktur Blok (Begin ... End)
·
Nested Statement
·
5. kompabilitas dan dokumentasi yang lebih
baik dalam pengembangan program.
Translator
Sebuah translator melakukan pengubahan source code /
source program (program
sumber) ke dalam target code / object code / object
program (program objek). Source
code ditulis dalam bahasa sumber, sedang object code
bisa berupa suatu bahasa
pemrograman lain atau bahasa mesin pada suatu komputer.
Ada beberapa macam
translator.
1. Assembler
Menerjemahkan langsung dari source code ke object
code. Source Code adalah
bahasa assembly sedangkan object code adalah bahasa
mesin. Contohnya adalah
TASM.
Contoh yang menghasil .Com adalah : Debug, TASM
(bila linker dilakukan
dengan perintah Tlink/x/t), emu8086,
Contoh yang menghasilkan .Exe adalah : TASM dengan
perintah linker Tlink,
HLA, MASM32, FASM
Khusus TASM terkadang file .Com yang dihasilkan akan
lebih baik daripada file
.Exe yang dihasilkan sebagai contoh adalah pada
program berikut :
.Model Small ,Code ,Org 100h ,Main : , Jmp Mulai ,
Pesan db 'Selamat Datang!','$' , Mulai : ,
Mov Ah,09H , Mov dx,offset pesan ,
int 21h , mov ah,4ch , int 21h ,end Main.
2.
Kompilator (Compiler)
Source Code adalah bahasa tingkat tinggi (misal
bahasa Pascal), object code
adalah bahasa mesin atau bahasa assembly. Source
Code dan data diproses pada
saat yang berbeda. Contohnya : Turbo Pascal,
C++.
3.
Interpreter
Interpreter tidak membangkitkan Object Code, hasil
translasi hanya dalam bentuk
Run Time Code.
Contohnya : Bahasa Basica, Dbase/Foxbase
File.ASM
Assembler File .Exe
atau .Com
Source File
Compiler Object Code
File Executable
Perbedaan antara Interpreter dengan Compile
Interpreter 1. Menerjemahkan instruksi per instruksi
2. Tidak menghasilkan objek program 3. Tidak menghasilkan executable program 4.
Source program terus dipergunakan karena tidak dihasilkan executable
program.
Compiler 1. Menerjemahkan secara keseluruhan sekaligus
2. Dihasilkan objek program 3. Dihasilkan executable program 4. Source program
tidak dipergunakan lagi untuk menjalankan program.
Model
Kompilator
Pengembangan kompilator untuk sebuah bahasa
merupakan pekerjaan yang
kompleks. Kompleksitas kompilator bisa dikurangi
bila perancang bahasa
pemrograman mempertimbangkan bermacam – macam faktor
perancangan. Karena
kita berhubungan dengan bahasa tingkat tinggi,
bagaimanapun suatu model dasar dari
kompilator dapat diformulasikan.
Sebuah kompilator umumnya memiliki 2 tugas pokok :
1. Fungsi Analisis
Fungsi analisis biasa disebut sebagai Front End.
Tugasnya melakukan
dekomposisi program sumber menjadi bagian – bagian
dasarnya. 2. Fungsi Sintesis
Fungsi sintesis biasa disebut sebagai Back End.
Tugasnya melakukan
pembangkitan dan optimasi program objek.
Source Code
Interpreter Run Time Code
Model sebuah kompilator bisa dilihat pada gambar di
bawah ini.
Keterangan gambar :
·
Scanner : memecah program sumber menjadi
besaran leksikalnya.
Beberapa kegiatan pada tahap scanner ini diantaranya
adalah : - Menangani kesalahan
Contohnya : A = +B 1 - Membuang Blank
Contohnya : A = B
+ 1 - Mengenali besaran
leksikal
Contohnya di sini adalah mengenali apakah huruf atau
angka - Dan lain – lain
·
Parser : Memeriksa kebenaran dan urutan
kemunculan token
Seperti : - Samping kiri ”=” pasti variabel -
Samping kanan ”=” pasti ekspresi - Tiap operator +, -, *, /, tidak boleh
double. Contohnya : A = 3++7
Source Code
Lexical Analyzer (Scanner)
Syntetic Analyzer (Parser)
Code Optimizer
Sematic Analyzer Intermediate Code Generator
Object Code
Intermediate Code
Code Generator
Tabel Informasi
Analysis Synthesis
·
Analisis semantik : Melakukan analisa
semantik, biasanya dalam realisasi akan
digabungkan dengan intermediate code generator
(bagian yang berfungsi
membangkitkan kode antara.
Seperti : - Triples Notation - Quadruples Notation
·
Code Generator : Membangkitkan kode
objek. Bagian ini merupakan bagian yang
bersifat abstrak, artinya tidak dilaksanakan oleh
programmer. Tetapi dilakukan
oleh bahasa pemrograman yang dilakukan oleh
programmer dalam perancangan
compiler. Di sini kode antara dari program biasanya
ditranslasi ke bahasa
assembly atau bahasa mesin.
·
Code Optimizer : Upaya untuk memperkecil
hasil dan mempercepat proses
·
Tabel Informasi : Menyimpan semua
informasi yang berhubungan dengan proses
kompilasi.
Pada beberapa kompilator, bagaimanapun, fase – fase
kompilasi tersebut bisa
dikombinasikan. Bisa kita lihat, misalnya interaksi
antara scanner dan parser terdapat
dua kemungkinan : 1. Scanner menghasilkan suatu
token untuk diproses oleh parser. Parser akan
memanggil scanner bila token berikutnya diperlukan.
2. Scanner menghasilkan semua token yang berhubungan dengan source program
sebelum memneruskan ke parser. Pada kasus ini
scanner telah memeriksa
keseluruhan source program.
Mutu Kompilator
Misalkan saja kita pernah menggunakan kompilator
untuk bahasa Basic seperti Turbo
Basic dan Quick Basic. Kemudian kita bisa mengatakan
bahwa salah satu lebih baik
dari lainnya. Tentu ada beberapa hal yang menjadi
pertimbangan kita, dalam hal ini
bisa kita sebut sebagai mutu dari kompilator yang
bersangkutan. Mutu sebuah
kompilator bergantung dari beberapa faktor, yaitu : 1.
Kecepatan dan waktu proses kompilasi.
Bisa Anda bayangkan misalkan saat Anda menekan F9
(Compile) dalam
kompilator Turbo Pascal untuk melakukan kompilasi
suatu program. Berapa lama
kita harus menunggu untuk memperoleh hasil kompilasi
itu merupakan waktu
proses kompilasi.
Mutu ini tergantung dari :
·
Penulisan algoritma kompilator : yaitu
algoritma yang digunakan untuk
menuliskan program kompilator tersebut. Misalkan
saja bisa dikatakan bahwa
suatu kompilator lebih cepat melakukan kompilasi
dibandingkan lainnya,
karena para pemrogramnya menggunakan algoritma yang
lebih baik saat
membuat kompilator tersebut.
·
Kompilator pengkompilasi : sebuah
program khusus yang menghasilkan
kompilator tersebut. Bisa kita bayangkan kompilator
Turbo Basic, misalnya,
tentu saja tidak dibuat dengan bahasa Basic, tetapi
menggunakan bahasa lain
dan dikompilasi.dengan kompilator lain. Kalau sebuah
kompilator dibuat
dengan bahasa C, misalnya , kompilator C tersebut
juga ikut menentukan mutu
kompilator yang dibuat.
v Bootstrap
Gagasan dari Bootstrap adalah kita bisa membangun
sesuatu yang besar dengan
lebih dulu membuat bagian intinya. Cara ini
diperkenalkan oleh Niklaus Wirth
saat membuat kompilator untuk bahasa Pascal.
Pada gambar di atas, P0 dibangun dengan assembly, P1
dibangun dengan P0, P2
dibangun dengan P1. Jadi kompilator untuk bahasa P
bisa dibuat tanpa harus
secara keseluruhan menggunakan assembly.