Senin, 02 April 2012

Syntax

- Kumpulan aturan yang mendefinisikan suatu bentuk bahasa.  
- Syntax mendefinisikan bagaimana suatu kalimat dibentuk sebagai barisan/urutan dari pemilihan suatu kata dasar. 
- Kata dikonstruksikan dengan karakter-karakter alfabet. 
   contoh keyword (reserve word) dalam bahasa C : while, do, if, else, dll. 
- Syntax mengatur cara mengkombinasikan kata-kata tersebut ke dalam suatu statement dengan bentuk yang benar sehingga dapat disusun suatu program yang dapat berjalan dengan benar. 
- Syntax tidak mengerti arti atau isi dari suatu kalimat, semantic yang bisa mengartikannya. 
- Syntax menyediakan bentuk-bentuk notasi untuk kominikasi antara programmer dan pemroses bahasa pemrograman, sehingga mempermudah pembuatan suatu program. 
- Syntax dari bahasa pemrograman didefinisikan dengan dua kumpulan aturan, yaitu aturan lexical dan aturan syntactic. 
- Aturan leksikal menspesifikasikan kumpulan karakter yang terdapat dalam alfabet dari bahasa dan cara supaya karakter-karakter tersebut dikombinasikan ke dalam kata-kata yang valid dan dapat diterima. 
- Contoh adalah bahasa Pascal yang tidak memperhatikan huruf besar dan huruf kecil, sedangkan bahasa C dan Ada memperhatikan dan membedakan hal tersebut.

Kriteria Syntax
1) Readability : Mudah dibaca.
2) Writeability : Mudah ditulis.
3) Verifiability : Verifikasi program (konsep kebenaran).
4) Kemudahan Translasi : Penerjemah yang cepat & menghasilkan kode yang efisien.
5) Pengurangan Ambiguitas :  Dua arti atau lebih, contoh Array (pemanggilan fungsi)

 Fungsi Syntax
Sintaks berfungsi menyediakan bentuk-bentuk notasi untuk komunikasi antar programmer dan pemroses bahasa pemrograman sehingga dapat mempermudah pembuatan suatu program.

Elemen-Elemen Syntax
  1. Himpunan Karakter :  Sintaks berfungsi menyediakan bentuk-bentuk notasi untuk komunikasi antar programmer dan pemroses bahasa pemrograman sehingga dapat mempermudah pembuatan suatu program.
  2. Identifier : Sintaks dasar dari identifier yang sering digunakan adalah string dari huruf dan angka yang dimulai dengan huruf. Namun, banyak juga variasi dari bahasa pemrograman yang menggunakan suatu identifier dengan tanda “.” Atau “-“. Hal ini akan berpengaruh pada kemudahan dalam pembacaan program.
  3. Simbol untuk operator : Kebanyakan bahasa pemrograman menggunakan karakter “+” dan “-“ untuk merepresentasikan dua buah operasi dasar aritmetika, dan menggunakan kombinasi serta memanfaatkan karakter-karakter spesial. Untuk suatu operator, atau menggunakan string untuk operator seperti pada FORTRAN dengan .EQ. untuk membandingkan kesamaan dan ** untuk perpangkatan.
  4. Komentar : Penambahan komentar dalam suatu program merupakan hal penting dari dokumentasi suatu program. Bahasa pemrograman mengijinkan komentar dalam beberapa bentuk. Baris komentar yang terpisah di dalam program seperti pada  FORTRAN. Penggunaan karakter khusus yang tidak memedulikan baris seperti /* dan */ di bahasa C. Dimulai dari sembarang tempat disuatu baris dengan diawali suatu karakter khusus, seperti “-“ di Ada, “//” di C++ atau “!” di FORTRAN.
  5. Noise Word : Merupakan kata pilihan yang disisipkan dalam statemen untuk meningkatkan readibility. Sebagai contoh adalah statemen GO TO label. GO merupakan keyword yang harus ada, sedangkan TO merupakan optional yang akan meningkatkan readibility.
  6. Keyword & Reserved Word : Keyword merupakan merupakan suatu identifier yang digunakan sebagai bagian tetap dari sintaks suatu statemen. Misalnya IF untuk memulai suatu statemen kondisi atau DO untuk memulai suatu perulangan dalam bahasa FORTRAN. Keyword merupakan reserved word jika tidak digunakan sebagai identifier yang dipilih oleh programmer. Misalnya dalam bahasa FORTRAN, identifier IF dan DO dapat dipilih sebagai nama variabel oleh programmer sehingga suatu statemen yang dimulai dengan IF belum tentu merupakan statemen kondisi.
  7. Blank : Aturan penggunaan spasi pada bahasa pemrograman sangat beragam. Sebagai contoh adalah bahasa C. Biasanya spasi diabaikan, kecuali jika ada simbol “=+” yang merupakan operator tunggal. Bila dipisahkan dengan spasi maka akan terjadi kesalahan sintaks.
  8. Delimiter & Tanda Kurung : Delimiter merupakan elemen syntactic yang digunakan untuk menandai suatu awalan atau akhiran dari suatu syntactic unit seperti statemen atau ekspresi. Tanda kurung biasanya berpasangan dengan delimiter, misalnya kurung kurawal atau pasangan kata begin … end. Delimiter berguna untuk meningkatkan readability suatu program dan juga dapat menghilangkan ambiguitas suatu statemen karena dapat digunakan secara eksplisit untuk memisahkan statemen-statemen yang mirip
  9. Ekspresi : Merupakan suatu fungsi yang mengakses data dalam suatu program dan mengembalikan suatu nilai. Ekspresi merupakan dasar dari blok syntactic dari statemen yang dibangun.


Komponen Utama Bahasa Pemrograman



Syntax adalah Kumpulan aturan formal yang menspesifikasikan komposisi suatu program yang terdiri dari huruf, angka, dan karakter lain.
Semantic adalah Mendefinisikan arti dari program yang benar secara syntax dari bahasa tersebut
 

Senin, 12 Maret 2012

Perbedaan Compiler dan Interpreter


1. Untuk menjalankan menjalankan program hasil kompilasi (hasil compiler) dapat dilakukan tanpa membutuhkan source code. Kalau interpreter membutuhkan source code.
2. Jika dengan kompiler, maka pembuatan kode yang bisa dijalankan mesin dilakukan dalam 2 tahap terpisah, yaitu parsing ( pembuatan kode objek ) dan linking ( penggabungan kode objek dengan library ) . Kalau interpreter tidak ada proses terpisah.
3.  Jika compiler membutuhkan linker untuk menggabungkan kode objek dengan berbagai macam library demi menghasilkan suatu kode yang bisa dijalankan oleh mesin. Kalau interpreter tidak butuh linker untuk menggabungkan kode objek dengan berbagai macam library.
4. Interpreter cocok untuk membuat / menguji coba modul ( sub-routine / program-program kecil ). Maka compiler agak repot karena untuk mengubah suatu modul / kode objek kecil, maka harus dilakukan proses linking / penggabungan kembali semua objek dengan library yang diperlukan.
5. Pada kompiler bisa dilakukan optimisasi / peningkatan kualitas kode yang bisa dijalankan. Ada yang dioptimasi supaya lebih cepat, ada yang supaya lebih kecil, ada yang dioptimasi untuk sistem dengan banyak processor. Kalau interpreter susah atau bahkan tidak bisa dioptimasikan.

INTERPRETER


  Perangkat lunak yang mampu mengeksekusi code program (yang ditulis oleh programmer) lalu menterjemahkannya ke dalam bahasa mesin, sehingga mesin melakukan instruksi yang diminta oleh programmer tersebut.
  Perintah-perintah yang dibuat oleh programmer tersebut dieksekusi baris demi baris, sambil mengikuti logika yang terdapat di dalam kode tersebut.
•Proses ini sangat berbeda dengan compiler, dimana pada compiler, hasilnya sudah langsung berupa satu kesatuan perintah dalam bentuk bahasa mesin, dimana proses penterjemahan dilaksanakan sebelum program tersebut dieksekusi

Skema Blok Kompilator

Keterangan :
  • Analisa Leksikal (Scanner) :
    Berfungsi memecah teks program sumber menjadi bagian-bagian kecil yang mempunyai satu arti yang disebut token, seperti : konstanta, nama variabel, keyword, operator. 
  • Analisa Sintaks (Parser) :
    Berfungsi mengambil program sumber (sudah dalam bentuk barisan token) dan menentukan kedudukan masing-masing token berdasarkan aturan sintaksnya dan memeriksa kebenaran dan urutan kemunculan token.
  • Analisa Semantik : Berfungsi menentukan validitas semantiks/keberartian program sumber. Biasanya     bagian ini digabung dengan Pembangkit kode antara (intermediate code generator)

  • Pembangkit Kode Antara : Berfungsi membangkitkan kode antara
  • Code Optimation : Berfungsi mengefisienkan kode antara yang dibentuk.
  • Code Generator : Berfungsi membangkitkan kode program target dalam bahasa target yang ekivalen dengan bahasa sumber .
  • Symbol Table Management : Berfungsi mengelola tabel simbol selama proses kompilasi. Tabel simbol adalah struktur data yang memuat record untuk tiap identifier dengan atribut-atribut identifier itu.
  • Penanganan Kesalahan (Error Handler) : Berfungsi menangani kesalahan yang berlangsung selama proses kompilasi.


Tahap Sintesa (Fase Synthesis)

  • CODE OPTIMATION (STORAGE ALLOCATION)
     Storage allocation adalah tahapan yang ada dalam allocation table.
   Kebutuhan storage dihitung dari beragam informasi seperti panjang dan dimensi peyimpanan dalam tabel dan unsur yang dialokasikan dalam machine address. Alamat pengalokasian dimasukkan ke dalam field dalam table yang mengacu pada unsur utama dalam intermediate code yang dapat dikonversi ke dalam storage allocation yang berkesesuaian dengan target code.
      Setelah storage alocation, symbol table tampak seperti berikut :
 Id         Type         Address
# 2 b     Real        2000
# 5 a     Real        2001
# 11 I    integer    2002
 
  • CODE GENERATION
  Code generation ditentukan oleh aspek pragmaticdari compiler. Pengetahuan mengenai insruction set, addressing mode dan sebagainya adalah pengetahuan tentang arsitektur komputer yang dignakan untuk men-generate target program instruction.
 
  Tahapannya adalah:
(i) menkonversi i ke dalam real dengan tanda i*
(ii) menambahkan i dengan b dan memberi tanda t
(iii) menyimpan t dalam a

Keputusan yang dibuat :
(a) urutan instruksi yang digunakan untuk tipe operasi konversi
(b) mode pengalamatan yang digunakan untuk mengakses I, b dan a
(c) mengambil nilai I* dan t di storage allocation atau machine register
  
 Beberapa hal terkait dengan arsitektur mesin. Dalam hal ini dibutuhkan aspek code optimisation yang akan menganalisis program dan mengumpulkan informasi yang berkaitan dengan progaram struktur dan pendefinisian pengggunaan data dalam program.