Wednesday 30 April 2014

KBP pert 7



Subprograms
Subprogram adalah pondasi block dari sebuah program yang memiliki bentuk terpentitng dalam konsep design bahasa pemrograman.
Memiliki 2 dasar dari abstraksi fasilitas:
1.      Process abstraction
2.      Data abstraction
Dasar dari sebuah subprogram adalah :
-         Memiliki sebuah subprogram pada setiap single entry point
-         Pemanggilan nya tergantung selama eksekusi dari subprogram yang di panggil
-         Control selalu mengembalikan ke pemanggil ketika memanggil menghentikan eksekusi subprogram

Local referencing, environments
Local variable dapat stack dynamic
Keuntungan :
-         Support recursion
-         Storage untuk local di share antara sesame subprogram
Kerugian :
-         Alokasi / de-alokasi, waktu inisialisasi
-         Indirect addressing
-         Subprogram tidak bisa history sensitive
Local variable static
Keuntungan dan kerugian dari static adalah kebalikan dari stack dynamic

Nested subprogram
Nested subprogram adalah subprogram yang diambil sesuai dengan keperluan, jadi tidak perlu menjalankan semua fungsi dari program untuk memanggil subprogram.

Metode parsing parameter
Formal parameter memiliki 3 model semantic yang berbeda yaitu :
1.      In mode
2.      Out mode
3.      In-out mode

Implementasi model parsing parameter :
1.      Pass by value
2.      Pass by result
3.      Pass by value result
4.      Pass by reference
5.      Pass by name
Implementasi parsing parameter method
Dalam banyak bahasa komunikasi parameter mengambil tempat saat melakukan run-time stack. Pass by reference adalah implementasi tersimple dan hanya untuk address yang di tempatkan pada stack.

Designing considerations
Ada 2 pertimbangan yang di masukkan dalam parameter passing method yaitu :
-         Efisiensi
-         One-way / two-way data transfer
2 metode diatas memiliki konflik :
-         Programming yang baik menyarankan access terbatas pada sebuah variable, yang berarti one-way setiap berhasil.
-         Pass by reference lebih efisien untuk pass struktur pada ukuran yang signifikan

Parameter that are subprogram
Masalahnya ada pada referensi lingkungan untuk mengeksekusi subprogram passed harus digunakan yaitu :
1.      Shallow binding
Pemanggilan statement memberlakukan melewati subprogram
Sangat natural untuk dynamic scoped
2.      Deep binding
Lingkungan dari definisi dari passed subprogram
Paling natural untuk static scoped languange
3.      Ad hoc binding
Lingkungan dari statement yang di panggil yang passed subprogram

Overloaded subprogram
Subprogram yang memiliki nama yang sama dengan subprogram lain pada lingkungan referensi yang sama.

Generic subprogram
 Mangambil parameter dari tipe yang berbeda aktivasi. Overloaded subprogram memberikan ad hoc polymorphism. Subtype polymorphism adlaah variable tipe T dapat akses semua objek tipe T atau semua tipe turunan dari T.

Closures
Subprogram dan reference environment dimana di definisikan.
-         Reference environment dibutuhkan jika subprogram dapat di panggil dari mana arbitrary place pada subprogram.
-         Bahasa static scope yang tidak mengijinkan nested subprogram tidak membutuhkan closures
-         Hanya dibutuhkan jika subprogram mengakses variable pada nesting scopes dan dapat dipanggil dari mana saja.

Coroutines
Coroutine adalah subprogram yang memiliki multiple entries dan mengontrol nya untuk mereka sendiri, di support langsung pada Lua. Symmetric control adalah pemanggil dan yang di panggil coroutines dalam ukuran yang sama. couroutine call disebut dengan resume. Coroutines memberikan quasi-concurrent execution dari program unit.

Tuesday 29 April 2014

KBP pert 2


Describing Syntax and Semantics
Syntax adalah bentuk dari expresi bahasa pemrograman, statement, dan program unit.
Semantics adalah arti dari syntax bagian expresi, statement, dan program unit.
Sebuah string dari suatu bahasa disebut sentence atau statement.
Deskripsi formal dari syntax dalam bahasa pemrograman. Lexemes adalah bentuk terkecil dari suatu syntax. Sebagai contoh :
index = 2 * count + 17;
bentuk dari lexemes dan tokens sebagai berikut :
Lexemes     Tokens
index     identifier
=         equal_sign
2         int_literal
*         mult_op
count     identifier
+         plus_op
17        int_literal
;         semicolon

Languange Recognition
Bagian syntax analisis dari suatu compiler adalah recognizer untuk bahasa translasi compiler. Recognizer tidak perlu melakukan test pada semua kemungkinan dari suatu string karakter dari suatu set data untuk menentukan tiap bahasa pemrograman.

Languange Generator
Languange Generator adalah alat yang di gunakan untuk generate sebuah kata dari suatu bahasa.

Context Free Grammar
Pada context free grammar language generator digunakan untuk menjelaskan syntax dari natural language

BNF(Backus Naur Form)
BNF adalah notasi natural untuk menjelaskan syntax. BNF equivalent terhadap context free grammar.

Fundamentals
Metalanguange adalah bahasa yang digunakan untuk menjelaskan bahasa lain. BNF adakah metalanguange untuk bahasa pemrograman. BNF menggunakan abstraksi untuk struktur syntactic. Sebagai contoh :
<assign> -> <var> = <expression>
Abstraksi pada BNF deskripsi, atau grammar, biasa disebut nonterminal symbols, atau nonterminal, dan lexemes dan tokens dari aturan biasa di sebut terminal symbols, atau terminal. BNF deskripsi adalah kumpulan dari aturan. Sebagai contoh :
<if_stmt> -> if ( <logic_expr> ) <stmt>
<if_stmt> -> if ( <logic_expr> ) <stmt> else <stmt>

Describing Lists
Syntatic list biasa nya di definisikan menggunakan rekulsif, sebagai contoh :
<ident_list> -> identifier | identifier, <ident_list>
Mendefinisikan bahwa <ident_list> sebagai single token (identifier) atau identifier yang diikuti oleh koma, dan instance lain dari <ident_list>.

Grammar and Derivation
Grammar adalah alat generative untuk mendefinisikan bahasa. Sentence dari bahasanya di tentukan melalui urutan aturan aplikasi. Urutan dari aturan aplikasi disebut dengan derivation.
Sebagai contoh :
<program> -> begin <stmt_list> end
<stmt_list> -> <stmt> | <stmt> ; <stmt_list>
<stmt> -> <var> = <expression>
<var> -> A | B | C
<expression> -> <var> + <var> | <var> <var> | <var>
Setiap string dari symbol pada sebuah derivation disebut dengan sentential form. Sentence dari sentential form biasanya hanya mempunyai terminal symbol. Leftmost derivation adalah leftmost nonterminal pada setiap sentential form yang telah di expand. Derivation antara leftmost dan rightmost.

Parse tree
Teknik mendefinisikan menggunakan seperti tree. contoh :
A = B * (A + C)
menjadi
  

Ambiguity
Grammar dinyatakan ambigu jika dan hanya dapat dikerjakan dengan sentential form yang memiliki 2 atau lebih distinct parse tree. Sebagai contoh :
<assign> -> <id> = <expr>
<id> -> A | B | C
<expr> -> <expr> + <expr> | <expr> * <expr> | ( <expr> ) | <id>

Operator Precedence
Ketika sebuah expression memiliki 2 operator yang berbeda sebagai contoh, x + y * z, maka operasi yang dilakukan berdasarkan kuat nya dari operator tersebut. / dan * memiliki kekuatan yang sama dan lebih kuat dari + dan -.

Static Semantics
Tidak berhubungan dengan arti. CFG tidak dapat menjelaskan syntax dari sebuah bahasa pemrograman. Categories dari construct :
-          Context-free
-          Non-context-free

Attribute Grammars
Attribute grammars (AG) memiliki tambahan pada CFG untuk membawa beberapa info semantic pada parse tree node. Primary value dari AG adalah :
-          Static semantics specification
-          Compiler design
Attribute grammar adalah CFG G = (S, N, T, P) dengan tambahan :
-          Setiap grammar symbol x terdapat sebuah set A(x) dari attribute nilai
-          Setiap aturan memiliki set fungsi yang menjelaskan attribute dari nonterminal pada aturan
-          Setiap aturan memiliki set predikat untuk mengecek attribute konsistensi

Semantics
Menjelaskan arti dari sebuah program dengan mengeksekusi statement pada mesin.
Semantic di bagi 3 yaitu:
1.      Operational semantic
Penggunaan operational semantics:
-          Bahasa manual dan textbook
-          Bahasa pembelajaran pemrograman
Dua level berbeda pada penggunaan operational semantics:
-          Natural operational semantic
-          Structural operational semantic
2.      Denotational semantics
-          Berdasarkan teori recursive
-          Metode semantic terabstrak
-          Mendefinisikan objek matematis dari setiap entity
-          Mendefinisikan fungsi pada peta instance bahasa entity ke instance yang dapat merespon objek matematika
-          Arti bahasa konstruk yang di definisikan sebagai nilai dari program variable
3.      Axiomatic semantic
-          Berdasarkan formal logic (predicate calculus)
-          Di definisikan tiap statement tipe dalam bahasa.
-          Logic sexpression di sebut assertions