SEMANTIK Syntax mendefinisikan suatu bentuk program yang

advertisement
Faramita Dwitama
SEMANTIK
Syntax mendefinisikan suatu bentuk
bahasa.
program yang benar dari suatu
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 :
Algoritma Pemrograman 1C | 1
Faramita Dwitama
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 programprogram 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
Algoritma Pemrograman 1C | 2
Faramita Dwitama
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)
Algoritma Pemrograman 1C | 3
Faramita Dwitama
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 statemenstaemen yang ada. Misalnya bila terdapat suatu operasi, diperiksa tipe
operandnya.
Contoh :
Ekspresi yang mengikuti if berarti tipenya Boolean, akan diperiksa
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.
Algoritma Pemrograman 1C | 4
Faramita Dwitama
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.
Algoritma Pemrograman 1C | 5
Faramita Dwitama
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.
Algoritma Pemrograman 1C | 6
Faramita Dwitama
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 .
Algoritma Pemrograman 1C | 7
Download