Programming Language Concept

One Stop Computer Science

Archive for the ‘Uncategorized’ Category

1. Names

Jika terlalu pendek, nama tidak dapat memiliki arti.

Contoh bahasa:

  • C#, Ada, dan Java tidak memiliki limit dan semuanya signifikan.
  • C++ tidak memiliki limit namun dalam pelaksanaan biasanya memaksa.

Karakter spesial:

  • PHP: semua nama variabel harus diawali tanda dollar ($).
  • Perl: semua nama variabel harus diawali karakter spesial yang menjelaskan tipe variabel.
  • Ruby: nama variabel yang diawali dengan @ adalah contoh variabel; yang diawali dengan @@ adalah kelas variabel.

Case sensitive

Nama di C merupakan case sensitive. Kerugiannya adalah readability (nama yang serupa tapi tidak sama, contoh: a dengan A berbeda).

Special words

Bantuan untuk readability; digunakan untuk membatasi pernyataan klausa.

Reserved word adalah special word yang tidak digunakan sebagai nama. Potensi masalah menggunakan reserved word adalah jika terlalu banyak, banyak terjadi bentrokan (contoh: COBOL memiliki 300 reserved words).

Variabel

Variabel adalah abstraksi dari sel memori. Variabel terdiri dari enam atribut, yaitu:

  • Name
  • Address
  • Value
  • Type
  • Lifetime
  • Scope

2. Bindings

Binding adalah sebuah gabungan antara entitas dan atribut, seperti antara sebuah variabel dan tipe atau nilainya, atau antara operasi dan sebuah simbol.

Possible binding times:

  • Language design time: menggabungkan simbol operator ke operasi
  • Language implementation time: menggabungkan floating point type ke sebuah representasi
  • Compile time: menggabungkan variabel ke sebuah type di C atau Java
  • Load time: menggabungkan C atau C++ static variable ke sebuah sel memori
  • Runtime: menggabungkan nonstatic local variable ke sebuah sel memori.

Dynamic Type Binding

Digunakan pada JavaScript, Phyton, Ruby, PHP, dan C#.

Keuntungan: Flexibility

Kerugian: Type error sulit dideteksi oleh compiler dan memakan banyak memori.

Kategori variabel berdasarkan lifetime:

  • Static bound: mengikat sel memori sebelum eksekusi dilakukan dan tetap mengikat sel memori yang sama saat eksekusi. Keungtungan: efisien, history-sensitive; kerugian: kurang fleksibel.
  • Stack dynamic: ikatan penyimpanan dibuat untuk variabel ketika deklarasi pernyataannya diuraikan. Keuntungan: rekursi diperbolehkan, menghemat penyimpanan; kerugian: alokasi dan dealokasi mengalami overhead, subprogram tidak dapat menjadi history sensitive, acuan kurang efisien.
  • Explicit heap dynamic: Alokasi dan dealokasi dengan arahan eksplisit (diterangkan oleh programmer) yang bereaksi saat eksekusi. Keuntungan: Menyediakan dynamic storage management; kerugian: kurang efisien dan kurang dapat diandalkan.
  • Implicit heap dynamic: alokasi dan dealokasi disebabkan oleh assignment statements. Keuntungan: fleksibel; kerugian: kurang efisien (karena semua atributnya dynamic) dan hilangnya error detection.

3. Scope

Scope dari sebuah variabel adalah jangkauan dari pernyataan yang kelihatan. Local variables dari sebuah program adalah semua yang dideklarasikan dalam unit tersebut, sedangkan nonlocal variables dari sebuah program adalah semua yang kelihatan dalam unit tersebut namun tidak dideklarasikan. Global variables adalah kategori spesial dari nonlocal variables. The scope rules dari sebuah bahasa menentukan bagaimana acuan nama terkait dengan variabel.

Static Scope

Berdasarkan program text. Untuk menghubungkan naam dengan acuan kepada sebuah variabel, compiler harus menemukan deklarasi terlebih dahulu.

Search process: mencari deklarasi, awalnya lokal, kemudian menyebar ke lampiran yang lebih luas hingga akhirnya ditemukan untuk sebuah nama.

Enclosing static scopes disebut static ancestors; static ancestor yang terdekat disebut static parent.

Global Scope

C, C++, PHP, dan Phyton mendukung sebuah struktur program yang terdiri dari sebuah urutan fungsi yang didefinisikan dalam file. C dan C++ memiliki deklarasi dan definisi.

Static Scoping

Bekerja dengan baik di banyak situasi. Masalahnya: dalam kebanyakan kasus, terlalu banyak akses yang mungkin terjadi dan sebagai program yang berkembang, struktur awal dihancurkan dan local variables terkadang menjadi global; subprogram juga tertarik menjadi global dibandingkan nested.

Dynamic Scope

Didasarkan oleh panggilan urutan dari sebuah unit program, bukan textual layout. Mengacu kepada variabel yang terhubung dengan deklarasi untuk pencarian panggilan ikatan subprogram yang terpaksa dieksekusi pada bagian ini.

Contoh:

                  function big() {

function sub1()

var x = 7;

function sub2() {

var y = x;

}

var x = 3;

}

–Static scoping

  • Reference to x in sub2 is to big’s x

–Dynamic scoping

  • Reference to x in sub2 is to sub1’s x
  • 0 Comments
  • Filed under: Uncategorized
  • Definisi

    Syntax adalah bentuk atau struktur dari ekspresi, pernyataan, dan unit program.

    Semantics adalah terjemahan dari ekspresi, pernyataan, dan unit program.

    Permasalahan dalam Mendeskripsikan Syntax:

    Terminologi:

    • Sebuah kalimat terdiri dari karakter string yang merupakan huruf.
    • Sebuah bahasa terdiri dari berbagai kalimat.
    • Sebuah lexemes adalah level terendah dari syntactic unit dari sebuah bahasa (sum, begin, *).
    • Sebuah token adalah kategori dari lexemes (identifier).

    Definisi formal

    1. Recognizers

    Sebuah alat recognition membaca input string dari sebuah bahasa dan memutuskan apakah input sting merupakan sebuah bahasa.

    1. Generators

    Sebuah alat yang dapat menghasilkan kalimat dari sebuah bahasa. Alat ini dapat menentukan apakah kalimat tersebut benar menurut syntax dengan membandingkannya ke sebuah struktur generator.

    BNF Fundamentals

    Dalam BNF, abstraksi digunakan untuk merepresentasi kelas dari syntactic structure (nonterminal symbols atau terminals).

    Terminal adalah lexemes atau tokens.

    Peraturannya adalah memiliki lengan kiri (LHS) yang merupakan nonterminal dan lengan kanan (RHS) yang merupakan string terminals dan/atau nonterminals.

    Nonterminals biasanya diapit oleh angle brackets (<>) seperti <ident_list> -> identifier | identifier.

    BNF Rule

    Sebuah abstraksi ( atau nonterminal symbol) boleh memiliki lebih dari satu RHS.

    <stmt> -> <single_stmt>

    | begin <stmt_list> end

    Derivasi

    Sebuah derivasi adalah aplikasi yang diulang oleh aturan tertentu, dimulai dari simbol start dan diakhiri dengan sebuah kalimat (all terminal symbols).

    Setiap string dari simbol dalam derivasi merupakan sentential form.

    Sebuah kalimat adalah sentential form yang hanya memiliki simbol terminal.

    Sebuah derivasi yang paling kiri dimana yang paling kiri merupakan nonterminal dalam setiap sentential form adalah yang diperluas.

    Sebuah derivasi mungkin tidak paling kiri atau paling kanan.

    Ambiguitas dalam Grammar

    Sebuah grammar adalah ambigu jika dan hanya jika sebuah grammar menghasilkan sentential form yang memiliki dua atau lebih distinct parse trees.

    Jika kita menggunakan parse tree untuk mengindikasi precedence levels dari operator, kita tidak akan menjadi ambigu.

    Static Semanctics

    Context-free grammars (CFG) tidak dapat mendeskripsikan semua syntax dari programming language.

    Kategori konstruksi yang menjadi masalah:

    • Context-free tetapi tidak praktis
    • Non-context-free

    Attribute Grammars (AG)

    AG adalah context-free grammar dengan beberapa tambahan sebagai berikut:

    • Setiap grammar symbol x memiliki sebuah set A(x) dari attribute values
    • Setiap peraturan memiliki fungsi yang dapat mendefinisikan attribute tertentu dari sebuah nonterminal dalam peraturan.
    • Setiap peraturan memiliki sebuah set predikat untuk mengecek konsistensi attribute.

    AG memiliki tambahan CFG untuk membawa semantic info ke parse tree nodes.

    Nilai utama dari AG:

    • Static semantics specification
    • Compiler design (static semantics checking)

    Contoh AG:

    • Syntax

    <assign> -> <var> = <expr>

    <expr> -> <var> + <var> | <var>

    • actual_type: synthesized for <var> and <expr>
    • expected_type: inherited for <expr>

    Operational Semantics

    Mendeskripsikan arti sebuah program dengan mengeksekusi pernyataan dalam mesin, baik simulasi maupun nyata. Perubahan lokasi dalam mesin menandakan arti dari pernyataan. Untuk mengoperasikan semantik, dibutuhkan high-level language dan sebuah virtual machine.

    Operational semantics digunakan untuk: bahasa manual dan textbook serta untuk mengajarkan bahasa pemrograman.

    Denotational Semantics

    Sebuah proses membangun denotational specification untuk sebuah bahasa:

    • Menerjemahkan mathematical object untuk setiap kesatuan bahasa.
    • Menerjemahkan fungsi yang menghubungkan kesatuan bahasa dengan kesatuan corresponding mathematical object.

    Axiomatic Semantics

    • Pre post form: (P) statement (Q)

    Contoh:

    • a = b + 1 (a > 1)
    • One possible precondition (b > 10)
    • Weakest precondition ( b > 0)

    Denotation Semantics vs Operational Semantics

    • Dalam operational semantics, perpindahan lokasi diartikan sebagai coded algorithms
    • Dalam denotational semantics, perpindahan lokasi diartikan sebagai rigorous mathematical functions.
  • 0 Comments
  • Filed under: Uncategorized
  • Session I: Introduction

    Mengapa kita perlu mempelajari konsep dari Programming Language?

    Kita dapat dengan mudah mempelajari bahasa pemrogaman dengan lebih mudah.

    Pada dasarnya, semua bahasa pemrograman adalah serupa. Jika kita sudah memahami konsep yang ada, maka kita dapat dengan mudah memahami semua bahasa pemrograman. Kita juga dapat menggunakan bahasa pemrograman dengan lebih baik jika kita memahami konsep bahasa pemrograman.

    Kriteria bahasa pemrograman yang baik

    1. Readability: mudah dibaca dan dimengerti oleh banyak orang

    2. Writeability: mudah digunakan untuk membuat program

    3. Reliability: mudah untuk mencapai ekspektasi programmer

    4. Cost: memiliki biaya yang terjangkau.

    Penyebaran dalam Desain Bahasa Pemrograman

    1. Computer Architecture

    Bahasa yang dikembangkan oleh seorang arsitektur komputer terkenal yaitu Von Neumann.

    Bahasa ini sangat terkenal karena komputer Von Neumann:

    • Data dan program tersimpan di memory
    • Memory terpisah dari CPU
    • Data dan instruksi disalurkan dari memory ke CPU
    • Basis dari bahasa yang sangat penting (model variabel, pernyataan model piping, dan iterasi yang efisien)

    Metode Penyebaran Programming

    • Pada tahun 1950 dan awal 1960, terdapat permasalahan tentang efisiensi mesin.
    • Pada akhir tahun 1960, efisiensi menjadi penting; readability dan struktur yang lebih baik (programming terstruktur dan penyempurnaan pemilihan keputusan)
    • Pada akhir tahun 1970, orientasi proses berubah menjadi orientasi data (data abstraction).
    • Pada pertengahan tahun 1980, programming berorientasi pada objek (data abstraction + inheritance + polimorphism)

    Metode Implementasi

    I. Compilation

    1. Proses penerjemahan high-level program (bahasa pemrograman) menjadi machine code (bahasa mesin). Penerjemahan cukup lama namun eksekusi cepat.
    2. Proses kompilasi adalah sebagai berikut:
    • Lexical analysis: mengkonversi karakter dalam sumber program menjadi lexical units.
    • Syntax analysis: mengubah lexical units menjadi parse trees yang merepresentasi struktur syntactic dari program.
    • Semantics analysis: menghasilkan intermediate code.
    • Code generation: machine code dihasilkan.

     

    II. Pure Interpretation

    1. Tidak ada penerjemahan.
    2. Lebih mudah untuk diimplementasikan oleh program. (errors/kesalahan dapat langsung dideteksi dan ditampilkan).
    3. Lebih lambat untuk dieksekusi (10 hingga 100 kali lebih lambat dari kompilasi program).
    4. Terkadang membutuhkan space yang lebih besar.
    5. Biasa digunakan untuk bahasa web scripting ( JavaScript, PHP)

     

    III. Sistem Implementasi Hybrid

    1. Sebuah gabungan antara compilers dan pure interpreters.
    2. Sebuah bahasa high-level program diterjemahkan menjadi intermediate language yang memudahkan proses interpretasi.
    3. Lebih cepat dibandingkan pure interpretation.
    4. Contoh:
    • Program di kompilasi untuk mendeteksi errors/kesalahan sebelum interpretasi.
    • Implementasi dari Java di hybrid; intermediate form, byte code, menyediakan portabilitas dari segala mesin yang memiliki byte code interpreter dan sebuah run-time system (digabungkan hal ini disebut java virtual machine).
  • 0 Comments
  • Filed under: Uncategorized