Kamis, 18 Oktober 2012

MATERI SEMANTIK


SEMANTIK
Syntax mendefinisikan suatu bentuk program yang benar dari suatu bahasa. Semantik mendefinisikan arti dari program yang benar secara syntax dari bahasa tersebut.
Semantik suatu bahasa  membutuhkan semacam ekpresi untuk mengirimkan suatu nilai kebenaran (TRUE, FALSE, NOT atau nilai INTEGER). Dalam  banyak  kasus,  program  hanya  dapat  dieksekusi  jika  benar  serta mengikuti aturan syntax dan semantic.
Semantic  suatu  bahasa  pemrograman  mempunyai  banyak  potensial, beberapa diantaranya adalah:
1.  Standarisasi bahasa pemrograman
Banyak usaha yang dilakukan untuk menstandarisasi bahasa
pemrograman  seperti COBOL, PASCAL, FORTRAN,dsb  untuk  lebih memudahkan programmer menggunakannya.
2.  Referensi untuk user
Programmer  membutuhkan  suatu  dokumentasi  yang  pasti  supaya
user dapat mengoperasikan program yang dibuat dengan baik
3.  Pembuktian dari program yang benar
Secara matematis, program tidak mungkin bekerja dan berjalan jika
tidak ada semantic
4.  Referensi untuk implementor
Semantis akan mencegah suatu gaya bahasa yang tidak kompatibel yang  diwujudkan  dalam   suatu  implementasi  berbeda  walaupun dengan bahasa yang sama
5.  Implementasi otomatis
Suatu  tool  dapat  secara  otomatis  membuat  translasi  bahasa  yang
melebihi   parsing.   Hal   ini   dapat   dilakukan   jika   semantic   sudah dirumuskan.
6.  Pemahaman yang lebih baik dari desain bahasa
Jika suatu rumusan semantic sulit untuk dideskripsikan secara formal maka  rumusan  semantic  tersebut  juga  akan  sulit  digunakan  oleh programmer.


Dua  alasan  mengapa  perlu  memahami  suatu  desain  bahasa  pemrograman dengan lebih baik yaitu :
1.  Memahami  dengan  lebih  baik  suatu  desain  bahasa  pemrograman berarti membantu menguasai dan menggunakan bahasa tersebut.
2.  Memahami  dengan  lebih  baik  suatu  desain  bahasa  pemrograman secara  detail  membantu  programmer  untuk  memperbaiki  proses pengembangan program menjadi lebih baik.


Teknik Semantic :
1.  Operational Semantic
Pendekatan ini  mendefenisikan suatu mesin buatan (abstrak) dengan
instruksi-instruksi  primitive,  tidak perlu realistic, tetapi  dengan cukup sederhana  supaya  tidak  muncul  kesalahpahaman.  Deskripsi  semantic dari   bahasa   pemrograman   menetukan   suatu    translasi   ke   kode. semantik   operasional   menceritakan   bagaimana   perhitungan   yang dilakukan      dengan      mendefinisikan      bagaimana      mensimulasikan pelaksanaan program.
2.  Detonational Semantic
menggambarkan apa yang diproses dengan objek matematika.
Pendefinisian  denotasi  sebuah  bahasa  terdiri  dari  tiga  bagian: sintaks    abstrak    dari    bahasa    itu,    aljabar    semantik    yang menggambarkan model komputasi dan fungsi nilai
Pada pendekatan ini diberikan suatu fungsi yang memetakan program- program komputer yang ditunjukkan ke dalam bentuk nilai-nilai abstrak secara matematika (angka, nilai kebenaran, fungsi matematika, dsb)
3.  Axiomatic Semantic
Aksiomatik semantik bahasa pemrograman mendefinisikan sebuah teori
matematika
program yang ditulis dalam bahasa.
Pada   pendekatan   ini   dedefenisikan   suatu   tindakan   program   yang dibangun  dengan  properti  logika  yang  menyimpan  status  computer sebelum dan sesudah dieksekusi.
 Rumus semantik terbagi jadi 3:
 {P} c {Q}
 Di mana c adalah struktur kendali dalam bhs pemrograman, P dan Q adalah  pernyataan  sehubungan  dengan  properti  dari  objek  program (seringkali variabel). P adalah prekondisi dan Q adalah poskondisi.
 Arti dari
 {P} c {Q}
 Adalah jika c dilaksanakan di mana P sudah dipenuhi dan c sudah selesai, maka c diselesaikan pada saat pernyataan Q dipenuhi
Contoh :
Program to compute S = sumi=1
nA[i]
S,I := 0,0 while I < n do
S,I := S+A[I+1],I+1 end
4.  Algebraic Semantic
Semantik Aljabar menggambarkan arti sebuah program dengan definisi
aljabar.
Pada  pendekatan  ini  dipertimbangkan  suatu  objek  komputasi  yang
menjadi     syarat-syarat     dalam     aljabar     multi     stored.     Program
mengimplementasikan  fungsi  yang  dapat  diwujudkan  dengan  suatu persamaan di antara syarat-syarat tersebut.




Contoh :
Defenisi aljabar dari integer Stack
 Domains:
 Nat (the natural numbers
 Stack ( of natural numbers)
 Bool (boolean values)
 Functions:
 newStack: () -> Stack
 push : (Nat, Stack) -> Stack
 pop: Stack -> Stack
 top: Stack -> Nat
 empty : Stack -> Bool
 Axioms:  or
       •  pop(push(N,S)) = S
        top(push(N,S)) = N
        empty(push(N,S)) = false
        empty(newStack()) = true

 Errors:
 pop(newStack())
 Defining Equations:
 newStack() = []
 push(N,S) = [N|S]
 pop([N|S]) = S
 top([N|S])  =  N

5.  Translation Semantic
Menterjemahkan  sebuah  program ke bahasa lain, biasanya bahasa
mesin Seperti  dalam  pengambilan keputusan secara alamiah dengan  logika,
program diberi suatu arti dari aturan yang diturunkan yang menggambarkan penilaian gagasan suatu bahasa.

Proses analisa sintaks dan analisa semantic merupakan 2 proses yang sangat erat kaitannya sulit untuk dipisahkan.
Contoh : A:=(A+B)*(C+D)

Parser   hanya   akan   mengenali   symbol-simbol   :=’,   +’,   *’,   parser   tidak mengetahui makna dari symbol-simbol tersebut. Untuk mengenali  makna dari simbol-simbol tersebut maka compiler memanggil routin semantics.
Untuk mengetahui makna, maka routin ini akan memeriksa :
Apakah variabel yang ada telah didefenisikan terlebih dahulu
Apakah variabel-variabel tersebut tipenya sama
Apakah operand yang akan dioperasikan tersebut ada nilainy, dst
Menggunakan table symbol
Pemeriksaan bisa dilakukan pada table identifier, table display dsb

Pengecekkan yang dilakukan dapat berupa :
   Memeriksa penggunaan nama-nama (keberlakuannya) Duplikasi
Apakah  sebuah  nama  terjadi  pendefenisian  lebih  dari  2  kali.
Pengecekkan dilakuak pada bagian pengelolaan block.
Terdefenisi
Apakah nama yang dipakai pada program sudah terdefenisi atau belum. Pengecekkan dilakukan pada semua tempat kecuali block.
   Memeriksa tipe
Melakuakan  pemeriksaan  terhadap  kesesuaian  tipe  dalam  statemen-
statemen yang ada. Misalnya bila terdapat suatu operasi, diperiksa tipe operandnya.
Contoh :
   Ekspresi yang mengikuti if berarti tipenya Boolean, akan diperiks
   tipe identifier dan tipe ekspresinya
   Bila  ada  operasi  antara  2  operand  maka  tipe  operand  yang pertama
   harus bisa dioperasikan dengan operand yang kedua

Analisa Semantic sering juga digunakan dengan intermediate code yang akan menghasilkan intermedia code

SYNTAX DIRECTED
TRANSLATOR 
Kode  antara  (intermediate  code)  adalah  sebuah  representasi  yang disiapkan untuk mesin  abstrak tertentu. Dua sifat yang harus dipenuhi oleh kode antara adalah :
1.  Dapat dihasilkan dengan mudah
2.  Mudah ditranslasikan menjadi program sasaran (target program)
Representasi  kode  antara  biasanya  berbentuk  tiga  alamat  (three  address code), baik berbentuk quadruples atau triples.
Kode antara (intermediate code) dibentuk dari sebuah kalimat X dalam bahasa context free. Kalimat  ini adalah keluaran dari parser. Kalimat ini tentu saja dapat dinyatakan dalam represntasi pohon  parsing (parse tree). Syntax directed translation adalah suatu urutan proses yang mentranslasikan parse tree menjadi kode  antara. Tahap pertama dari pembentukkan kode antara adalah evaluasi atribut setiap  tokn adalah semua informasi yang disimpan di dalam table symbol. Evaluasi dari parse tree.
Pandang sebuah node n yang ditandai sebuah token x pada parse tree.
Kita  tuliskan  x.a  untuk  menyatakan  atribut  a  untuk  token  x  pada  node  n tersebut.  Nilai  x.a  pada  node  n  tersebut  dievaluasi  dengan  menggunakan aturan semantic untuk atribut a. Aturan semantic ini ditetapkan untuk setiap produksi   dimana   x   adalah   ruas   kiri   produksi   sebuah   parse   tree   yang menyertakan nilai-nilai atribut pada setiap nodenya dinamakan nonated parse tree. Kumpulan aturan yang menetapkan aturan-aturan semantic untuk setiap tahap produksinyadinamakan syntax directed definition.
Untuk  jelasnya  berikut  ini  adalah  sebuah  syntax  directed  translation yang mentranslasikan ekspresi infix menjadi ekspresi postfix. Ekspresi infix ini dapat dipandang sebagai sebuah kalimat yang dihasilkan oleh parser.
Contoh :
Diketahui : 1. Kalimat X: 9-5+2
2. Grammar Q = {E    E+T| E T | I, T    0|1|2|...|9}
3. Syntax directed definition



PRAGMATIG
Pragmatic sebuah bahasa pemrograman berhubungan dengan :
 Kemudahan Implementasi
 Efisiensi dari suatu Aplikasi
 Metodologi Pemrograman contoh :
 Pemanfaatan dan Alokasi memori yang tepat
 Kecepatan pemrosesan
 Pada bhs.prog JAVA atau C++


Pragmatik  adl  aspek  praktis  tentang  bagaimana  membangun  dan  memakai fitur-fitur dari sebuah bahasa pemrogramang untuk mencapai tujuan.



1.   Heap & Pointer
Variabel heap adalah variabel yang bisa diciptakan dan dihapus kapan saja.
Heap variabel tidak memiliki nama dan bisa diakses dengan pointer. Heap   adalah   sebuah   blok   memori   di   mana   di   dalamnya   ada potongan-potongan informasi itu dialokasi dan  dikosongkan dengan cara tertentu
Jangka waktu hidup heap itu dimulai dari saat dia dibuat hingga dia tidak diakses lagi.
Kadang ada sebuah operasi deallocator yang memaksa penghapusan sebuah variabel heap.
Ketika sebuah variabel heap dihapus dia sebenarnya masih ada dalam memori tapi tidak bisa diakses, sehingga menjadi garbage
Jika seorang programmer bisa men-dealokasi variabel, akan terjadi masalah.  Pointer  yang   mengarah  ke  variabel  heap  yang  sudah terhapus, maka variabel ini menjadi dangling reference
Garbage  dan  dangling  reference  menjadi  sumber  kesulitan  bagi programmer
Solusi I: Batasi penggunaannya sehingga reference ke variabel lokal tidak diakses untuk waktu yang lama
Solusi II: dengan menggunakan reference count
Solusi III: garbage collection
2.  Coroutines
 Memisahkan simulation language dengan problem
 Menyediakan   struktur   kontrol   yang   lebih   natural   dari   pada subprogram pada umumnya
 Coroutines   dapat   diangggap   sebagai   subprogram   yang   tidak dibutuhkan untuk  menghentikan, kemudian memanggil program dan  melaksanakan  dari  titik  dimana  eksekusi  dihentikan.  Tapi
coroutines tidak boleh rekursif.
3.  Safety
 Pemeriksaan penulisan nama variabel (konsistensi)
 Pendeklarasian yang tepat
Menentukan apakah jenis variabel yang dimaksud sesuai dengan penggunaan variabel.
 Fasilitas pengecekan yang mengurangi redundansi
Compiler cek setiap penggunaan   dari setiap entitas agar tidak berulang .

0 komentar:

Posting Komentar