Bahasa Pemr0graman
Click here to load reader
-
Upload
cassper-nyuciex-capcap-cuaapph -
Category
Documents
-
view
66 -
download
0
Transcript of Bahasa Pemr0graman
Paradigma dapat diartikan sudut pandang atau sudut serang dalam suatu persoalan, realitas dsb. Begitu pula dalam pemrograman, ada pendekatan-pendekatan untuk menyelesaikan suatu persoalan yang disebut dengan paradigma pemrograman.
Paradigma Pemrograman
Paradigma pemrograman adalah bentuk pemecahan masalah mengikuti aliran
atau “genre” tertentu dari program dan bahasa. Empat paradigma
pemrograman yang sangat mendasar dan berbeda pada tiga dekade
terakhir adalah:
• Imperative programming
• Object-oriented programming
• Functional programming
• Logic programming
Beberapa bahasa dirancang mendukung lebih dari satu paradigma. Sebagai
contoh, C++ merupakan campuran antara bahasa imperative dan object-
oriented, sedangkan Leda dirancang untuk mendukung paradigma
pemrograman imperative, object-oriented, functional, dan logic.
Imperative Programming merupakan paradigma pemrograman paling tua,
yang dirancang berdasarkan model komputasi klasik “von Neumann-Eckert”.
Pada model ini, program dan variabelnya disimpan
bersama, dan program terdiri atas perintah-perintah yang membentuk
perhitungan, penyimpanan nilai ke variabel, membaca input, menghasilkan
output, atau mengarahkan kontrol dari deret instruksi dalam program.
Abstraksi prosedural membentuk blok untuk imperative programming,
misalnya penugasan (assignment), pengulangan (loop), sekuensial,
pernyataan kondisi, dan penanganan pengecualian (exception handling).
Bahasa Pemrograman yang masuk ke dalam paradigma ini antara lain Cobol,
Fortran, C, Ada, dan Perl.
Object-Oriented Programming (OOP) menyediakan model dimana
program merupakan kumpulan obyek
yang berinteraksi satu sama lain. Program dalam OOP membungkus
(encapsulate) data dan fungsi (atau prosedur) dalam suatu obyek yang
umumnya diimplementasikan sebagai suatu kelas (class). Klasifikasi obyek,
pewarisan, dan message passing merupakan prinsip-prinsip dasar dalam OOP.
Bahasa yang mendukung OOP antara lain Smalltalk, C++, Java, dan C#.
Functional Programming memodelkan suatu masalah komputasi sebagai
kumpulan fungsi matematiks, dimana setiap input merupakan domain atau
daerah fungsi, dan output berupa range atau wilayah fungsi. Hal ini
menjadikan functional programming sebagai bagian dari bahasa yang tidak
membenarkan pernyataan penugasan, seperti x = x + 1, yang tidak berlaku
baik pada functional programming maupun dalam matematika.
Fungsi berinteraksi dengan yang lain menggunakan komposisi fungsi,
kondisional, dan rekursif. Bahasa pemrograman yang masuk dalam kelompok
ini adalah Lisp (List Programming), Scheme, Haskell, dan ML.
Logic Programming atau juga disebut sebagai declarative programming
memodelkan masalah dengan menggunakan bahasa deklaratif, yang
diimplementasikan dalam bentuk fakta dan aturan. Maka dari itu, bahasa ini
juga disebut sebagai rule-based languages. Contoh bahasa pemrograman
kelompok ini adalah Prolog (Programming in Logic).
Generasi Bahasa Pemrograman
Bahasa pemrograman adalah software bahasa komputer yang digunakan dengan cara merancang atau membuat program sesuai dengan struktur dan metode yang dimiliki oleh bahasa program itu sendiri. Komputer mengerjakan transformasi data berdasarkan kumpulan printah program yang telah dibuat oleh program. Kumpulan perintah ini harus dimengerti oleh komputer, berstruktur terntentu (syntax), dan bermakna. Bahasa pemrograman merupakan notasi untuk memberikan secara tepat program komputer. Berbeda dengan bahasa, misalkan Bahasa Indonesia dan Inggris yang merupakan bahasa alamiah (natural language), sintaksis dan semantik bahasa pemrograman komputer ditentukan secara jelas dan terstruktur, sehingg bahasa pemrograman juga disebut sebagai bahasa formal (formal language).Menurut tingkatannya, bahasa pemrograman dibagi menjadi 3 tingkatan, yaitu:
1. Bahasa pemrograman tingkat rendah (low level language), merupakan bahasa pemrograman
generasi pertama, bahasa pemrograman jenis ini sangat sulit dimengerti karena instruksinya
menggunakan bahasa mesin. Biasanya yang mengerti hanyalah pembuatnya saja karena isinya
programnya berupa kode-kode mesin.
2. Bahasa pemrograman tingkat menengah (middle level language), merupakan bahasa pemrograman
dimana pengguna instruksi sudah mendekati bahasa sehari-hari, walaupun begitu masih sulit untuk
dimengerti karena banyak menggunakan singkatan-singkatan seperti “STO” artinya simpan (STORE)
dan “MOV” artinya pindahkan (MOVE). Yang tergolong dalam bahasa ini adalah assembler.
3. Bahasa pemrograman tingkat tinggi (high level language) merupakan bahasa yang mempunyai ciri
lebih terstruktur, mudah dimengerti karena menggunakan bahasa sehari-hari, contoh bahasa level ini
adalah: Delphi, Pascal, ORACLE, MS-SQL, Perl, Phyton, Basic, Visual Studio (Visual Basic, Visual
FoxPro), Informix, C, C++, ADA, Java, PHP, ASP, XML, dan lain-lain. Bahasa seperti Java, PHP, ASP,
XML biasanya digunakan untuk pemrograman pada internet, dan masih banyak lagi yang terus
berkembang yang saat ini biasanya dengan ekstensi .net (baca: dot net) seperti Visual Basic.NET dan
Delphi.Net yang merupakan bahasa pemrograman yang dikembangkan pada aran berbasis internet
Sejauh ini bahasa pemrograman dikelompokkan menjadi lima generasi. Setiap generasi bahasa
pemrograman memiliki karakteristik tersendiri. Semakin maju generasinya maka orientasi bahasa
pemrograman ini akan semakin dekat ke manusia.
Gambar di atas menunjukkan terjadinya kecenderungan pergeseran orientasi dalam bahasa-bahasa
pemrograman, dari pendekatan yang berorientasi kepada mesin menuju ke pendekatan yang
berorientasi pada manusia.
Bahasa Pemrograman Generasi I
Bahasa pemrograman generasi pertama berorientasi pada mesin. Program disusun dengan
menggunakan bahasa mesin. Tentu saja program generasi ini sangat sulit untuk dipahami oleh orang
awam dan sangat membosankan bagi pemrogram. Pemrogram harus benar-benar menguasai operasi
komputer secara teknis. Namun bahasa generasi ini memberikan eksekusi program yang sangat cepat.
Selain itu, bahasa mesin sangat bergantung pada mesin (machine dependent), artinya, bahasa mesin
antara satu mesin dengan mesin lainnya akan berbeda.
Bahasa Pemrograman Generasi II
Bahasa pemrograman generasi kedua menggunakan bahasa rakitan (assembly). Sebagai pengganti
kode-kode biner, digunakanlah kependekan dari kata-kata. Misalkan “MOV” untuk menyatakan “MOVE”
dan JNZ yang berarti “jump non-zero”. Setiap instruksi dalam bahasa rakitan sebenarnya identik dengan
satu instruksi dalam bahasa mesin. Bahasa ini sedikit lebih mudah dipahami daripada bahasa mesin.
Bahasa ini sedikit lebih mudah dipahami daripada bahasa mesin mengingat perintah dalam bentuk kata-
kata yang dipendekkan lebih mudah daripada mengingat deretan angka biner.
Berikut adalah contoh instruksi yang ditulis dalam bahasa rakitan akan menjadi seperti berikut:
Tampak bahwa penggunaan notasi seperti MOV AH, 02 jauh lebih mudah diingat atau dipahami
daripada penulisan instruksi dalam bahasa mesin: B402 atau 1011 0100 0000 0010.
Bahasa Pemrograman Generasi III
Bahasa pemrograman generasi ketiga menggunakan pendekatan prosedural. Sebagai bahasa
prosedural, pemrogram perlu menuliskan instruksi-instruksi yang rinci agar komputer melaksanakan
tugasnya. Program ditulis dengan menggunakan kata-kata yang biasa dipakai manusia, seperti WRITE
untuk menampilkan sesuatu di layar dan READ untuk membaca data dari keyboard.
Bahasa generasi ketiga seringkali disebut sebagai high level language disebabkan bahasa ini
menggunakan kata-kata yang biasa digunakan manusia. Beberapa contoh bahasa pemrograman yang
masuk dalam kategori generasi ketiga yaitu ADA, ALGOL, C, BASIC, COBOL, FORTRAN, dan
PASCAL.
Bahasa Pemrograman Generasi IV
Bahasa pemrograman generasi keempat dirancang untuk mengurangi waktu pemrograman dalam
membuat program sehingga diharapkan produktifitas pemrogram jadi meningkat dan program dapat
dibuat dalam waktu yang lebih singkat. Alhasil, bahasa pemrograman generasi keempat yang dikenal
dengan sebutan 4GL dapat dipakai oleh pemakai yang kurang mengetahui hal-hal teknis tentang
pemrograman tanpa bantuan pemrogram profesional. Sebagai contoh pemrogram dapat membuat
program dengan Microsoft Access di lingkungan PC dengan mudah.
Bahasa pemrograman generasi keempat biasa disebut sebagai high level language atau bahasa
berorientasi pada masalah (problem oriented language) karena memungkinkan pemakai menyelesaikan
masalah dengan sedikit penulisan kode dibandingkan pada bahasa prosedural. Bahasa pemrograman
generasi keempat menggunakan pendekatan non-prosedural. Untuk mendapatkan suatu hasil, seorang
pemakai tidak perlu memberitahukan secara detail tentang bagaimana mendapatkannya. Gambar di
bawah ini memberikan contoh yang menunjukkan perbedaan bahasa prosedural dan non-prosedural
dalam memperoleh data tentang seorang mahasiswa.
Bahasa Prosedural dan Non Prosedural
Bahasa Pemrograman Generasi V
Bahasa pemrograman generasi kelima merupakan kelompok bahasa-bahasa pemrograman yang
ditujukan untuk menangani kecerdasan buatan (artificial intelligence). Kecerdasan buatan adalah
disiplin dalam ilmu komputer yang mempelajari cara komputer meniru kecerdasan manusia. Berbagai
aplikasi kecerdasan manusia adalah sebagai berikut:
* Pemrosesan bahasa alami (natural language processing), yakni mengatur komputer agar bisa
berkomunikasi dengan manusia melalui bahasa manusia (Indonesia, Inggris, Spanyol, Prancis, dan
sebagainya).
* Pengedalian robotika dan sensor mata.
* Aplikasi sistem pakar (expert system) yang meniru seorang pakar di bidang tertentu sehingga bisa
menghasilkan nasehat atau pemikiran yang setara dengan seorang pakar.
Dengan menggunakan bahasa generasi kelima dimungkinkan untuk melakukan perintah dengan cara
percakapan seperti berikut:
“Tampilkan semua nama mahasiswa yang IPK-nya di atas 3,0 dan urutkan berdasarkan IP secara
descending”
PROLOG dan LISP merupakan dua contoh bahasa pemrograman yang ditujukan untuk menangani
kecerdasan buatan
level bahasa pemrogramanLevel rendah : Level bahasa yang mendekati level bahasa mesin, instruksi yang diberikan akan langsung dipahami oleh komputer. di level ini program yang diintruksikan berupa data angka angka kode heksa atau biner. contoh bahasa mesinLevel menengah : level bahasa yang merupakan gabungan intruksi mesin dan instruksi yang mulai mendekati bahasa manusia berkomunikasi. contoh bahasa assembler dan bahasa cLevel tinggi : bahasa pemrograman yang diberikan mendekati instruksi manusia berkomunikasi. contoh bahasa pascal, delphi, visual basic, oracle.
Aturan Lexical atau Lexical Analysis (Scanner)Berhubungan dengan bahasa, sering disebut dengan scanner, bertugas sebelum proses syntax Analyzer dan Intermediate Code dilakukan dimana tugas Lexical Analysis ini mendekomposisi program sumber menjadi bagian-bagian kecil.
Tugas-tugas Aturan Lexical atau Lexical Analysis secara detil adalah :
a. mengidentifikasi semua besaran yang membangun suatu bahasab. mentransformasikan ke token-token (symbol terminal dari teori
bahasa automata)c. menentukan jenis dari token-tokend. menangani kesalahane. menangani tabel symbolf. scanner di desain untuk mengenali keyword, operator, identifiercontoh :
Besaran Lexical : (tergantung program)
Identifier dapat berupa keyword seperti if, else, begin .. end (pada Pascal) , integer (Pascal), int float (pada C)
Konstanta : besaran yang berupa bilangan bulat (integer), bilangan pecahan(float / real), Boolean (true/false), string, dll
Operator : operator aritmatika (+, -, *, /), operator logika(< = >)
Delimiter : berguna bagi pemisah atau pembatas, seperti kurung buka, kurung tutup, titik, koma, titik dua, titik koma, white_space
White_space : pemisah yang diabaikan oleh program, seperti : enter, spasi, ganti baris dan akhir file
Program sumber merupakan input dari penganalis leksikal ala scanner. Analisis leksikal mempunyai tujuan untuk memisahkan naskah program sumber yang masuk menjadi bagian leksikografis terkecil atau Token seperti konstanta, nama varibel, reserved word dan operator.
Scanner biasanya berinteraksi dengan parser melalui salah satu dari 2 cara berikut. Yang pertama, scanner dapat mengolah program sumber secara terpisah, sebagai satu fasa sebelum Parser mulai bekerja. Kemudian token disimpan dalam sebuah file atau dalam sebuah file besar. Cara kedua melibatkan antara Parser dan Scanner yang saling berinteraksi, scanner dipanggil oleh parser bila token berikut dalam program sumber diperlukan.
Token hasil pekerjaan scanner biasanya disajikan dalam bentuk Bilangan Penyajian internal berupa bilangan bulat (integer) yang unik.
Contoh :
Nama variabel 1 operator perkalian 8Konstanta 2 operator pembagian 9Label 3 tanda baca koma 10Keyword 4 tanda baca titik dua 11Operator penambahan 5 tanda baca titik koma 12Operator penugasan 6 dan lain-lainOperator pengurangan 7
Token tersebut disimpan dalam suatu tabel label serta nama variabel akan dimasukkan kedalam tabel identifier, sedangkan konstanta dimasukkan ke tabel konstanta dan suatu token yang tidak berkaitan dengan label (seperti operator) maka lokasinya adalah 0 (nol).
Lexical Analysis, contoh :
Statement : Fahrenheit := 32 + celcius * 1.8Maka akan diterjemahkan ke dalam token-token sebagai berikut :
Identifier → FahrenheitOperator → :=Integer → 32Operator penjumlahan → +Identifier → celciusOperator perkalian → *Real / float → 1.8
Statement : Jumlah A = A + B GOTO KERJA
Buatlah tabel untuk penyajian Token :
Token Bilangan Penyajian Internal Lokasi KeteranganJumlah 3 1 Label : 11 0 Delimiter A 1 2 Identifier = 6 0 Assignment A 1 2 Identifier + 5 0 Operator Penjumlahan B 1 3 Identifier GOTO 4 0 Reserved word KERJA 1 4 Identifier
2. Pembahasan Semantics & Syntax Variabel &
Konstanta Tipe Data Data Terstruktur Ekspresi &
Pernyataan Bahasa Pemrograman – STMIK
SATYAGAMA - Ari Wibowo, S.Kom
3. Semantics & Syntax Semantics dari bahasa
pemrograman menspesifikasikan arti dari program Syntax
dari bahasa pemrograman menspesifikasikan struktur dari
program
4. Semantics If x > 2 Then z := x * 5 Else z := x; If x > 2
Then z := x * 5 Else z := x; Expression Evaluating If x > 2
Then z := x * 5 Else z := x; If x > 2 Then z := x * 5 Else z :=
x; Executing statements in TRUE condition block
Optionaly, execute statements in FALSE condition block
Mendeskripsikan bagaimana program berjalan
5. Syntax If x > 2 Then z := x * 5 Else z := x; If x > 2
Then z := x * 5 Else z := x; If x > 2 Then z := x * 5 Else z :=
x; KEYWORD EXPRESSION If x > 2 Then z := x * 5 Else
z := x; STATEMENTS Mendeskripsikan bagaimana
program ditulis
6. Semantics Dasar mekanisme abstraksi pada bahasa
pemrograman adalah penggunaan nama atau identifiers
Pada kebanyakan bahasa pemrograman, variabel,
konstanta dan prosedur dapat diberikan nama yang
didefinisikan oleh programmer
7. Atribut Arti dari nama ditegaskan oleh atribut yang
diasosiasikan oleh nama tersebut const phi = 3.14; { phi
merupakan sebuah konstanta} var x : integer; { x
merupakan sebuah variabel} procedure Cetak ; { Cetak
merupakan sebuah prosedur}
8. Binding Proses mengasosiasikan atribut ke nama
disebut dengan Binding const phi = 3.14; { static binding }
var x : integer; { static binding } x :=2; { dynamic binding }
9. Binding Time Language definition time : pada saat
pendeklarasian Language implementation time : pada
saat penggunaan Translation time : tipe-tipe dari variabel
Link time : pada saat pemanggilan fungsi external Load
time : lokasi global variabel Execution time : nilai dari
variabel, lokasi local variabel
10. Deklarasi Deklarasi merupakan prinsip dalam
menyediakan binding Umumnya diasosiasikan dengan
sebuah block Lokal , deklarasi yang ditempatkan didalam
block Global , deklarasi yang ditempatkan diluar block
11. Deklarasi program Test; Uses crt; var x: integer;
procedure Cetak(y: integer); var z: integer; begin z := 2 *
x; writeln (z + y); end ; begin x := 5; Cetak(x); Readln;
end . LOCAL GLOBAL
12. Ruang Lingkup ( Scope ) program Test; Uses crt;
var x: integer; procedure Cetak(y: integer); var z: integer;
begin z := 2 * x; writeln (z + y); end ; begin x := 5;
Cetak(x); Readln; end .
13. Ruang Lingkup ( Scope ) program Test; Uses crt;
var x: integer; procedure Cetak(y: integer); var z: integer;
begin z := 2 * x; writeln (z + y); end ; begin x := 5; z := 3;
Cetak(x); Readln; end . ERROR !!!
14. Syntax Lexical Structure menspesifikasikan
bagaimana kata dibentuk dari karakter Syntactic Structure
menspesifikasikan bagaimana kalimat dibentuk dari kata
characters words sentences Lexical Structure Syntactic
Structure
15. Lexical Structure Pada lexical structure, bahasa
pemrograman menggunakan tokens untuk membentuk
grammatical categories yang akan membentuk blok-blok
syntax Standar tokens: Keywords , seperti IF, WHILE,
REPEAT, dll Literals , seperti 10 (numeric literal) atau ‘A’
(string literal) Special Symbols , umumnya dipergunakan
untuk membentuk operator Identifiers , umumnya
dipergunakan untuk menamai routine (prosedur & fungsi)
Comments , baris program yang tidak akan dieksekusi
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 digit | integer digit digit
0 | 1 Integer : integer 1 binaryDigits 0 binaryDigits
16. Syntactic Structure Menggunakan notasi Backus-
Naur Form (BNF) untuk definisi formal Contoh : Binary :
binaryDigits
17. Parse Tree integer integer digit integer digit digit
digit digit digit 1 digit digit 1 2 digit 1 2 3 Sentential Form
Sentence 1 2 3 digit digit digit integer integer integer
Syntax adalah aturan menulis ‘kalimat’ agar mampu dimengerti dengan benar oleh bahasa
pemrograman.
Aturan syntax ini secara baku harus dipenuhi, karena saat proses compilasi setiap baris script
akan di-check dan dipastikan apakah Compiler benar2 mengerti maksud kalimat atau tidak. Jika
terdapat syntax yang salah maka compiler akan melaporkan kalo ada bagian kalimat yang dia
nggak faham atau istilahnya “error message” dan nggak bakalan meneruskan membikin
bytecode-nya.
Java memiliki syntax mirip syntax bahasa pemrograman C dan C++, itulah kenapa kalo kita
udah bisa C atau C++ maka Java akan terasa mudah sebagai contoh syntax adalah:
- Untuk menulis isi (body) suatu kelas harus di awali dengan { dan diakhir dengan }
——–
Semantics
adalah arti sebuah kalimat
Berbeda dengan bahasa sehari-hari yang sering memiliki lebih dari satu arti (ambigu), ‘kalimat’
dalam bahasa Pemrograman pasti hanya punya 1 arti!
contoh:
…..
————————————-
Errors
Ada 3 jenis/kemungkinan Error (kesalahan):
1. Compile-time error : kesalahan yang ditemukan oleh compiler saat di-compile! kesalahan
ini kemungkinan karena 2 hal: salah syntax! atau salah secara makna kata (semantics) misal
type data yang tidak sesuai! –> Executable file nggak bakalan dibikin.
2. Run-time error: kesalahan yang ditemukan saat program (executable file) di-eksekusi, misal
jika terhadap perhitungan pembagi nya bilangan 0 –> maka eksekusi program akan berhenti
pada titik tersebut.
3. Logical error: jika semua syntax, semantics okay tetapi lha kok hasil akhirnya salah!