Programming Language Concept

One Stop Computer Science

Archive for September, 2017

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