Social Media

Monday, October 30, 2017

Pertemuan 5: Expression and Asignment Statements


Pada pertemuan hari Sabtu tanggal 28 Oktober 2017, Bu Yanfi menjelaskan tentang materi ketiga kami di mata kuliah PLC yaitu "Expression and Asignment Statements"

Ada beberapa topik dalam materi "Expression and Asignment Statements" hari ini, yaitu:
  1. Introduction
  2. Arithmetic Expressions
  3. Overloaded Operators
  4. Type Conversions
  5. Relational and Boolean Expressions
  6. Short-Circuit Evaluation
  7. Assignment Statements
  8. Mixed-Mode Assignment

Introduction: 
  1. Ekspresi adalah cara mendasar untuk menentukan perhitungan dalam bahasa pemrograman.
  2. Untuk mengerti evaluasi ekspresi, kita harus familitar dengan urutan operator dan operand.
  3. Esensi dari bahasa imperatif berperan dominan dari ekpresi tugas.

Arithmetic Expressions:
  1. Evaluasi aritmatiika adalah salah satu motivasi dalam pengembangan bahasa pemrograman pertama.
  2. Ekspresi aritmatika terdiri dari operator, operand, parntheses, dan panggilan fungsi.

Overloaded Operators:
  1. Penggunaan sebuah operator untuk lebih dari satu tujuan disebut operator overloading.
  2. Contoh yang umum adalah  "+" untuk int dan float.
  3. Contoh yang bermasalah adalah "*" pada C dan C++

Type Conversions:
  1. Narrowing conversion adalah tipe konversi yang merubah object menjadi tipe yang tidak dapat berisi semua nilai dari tipe aslinya (mis., float ke int).
  2. Widening conversion adalah tipe konversi yang merubah object menjadi tipe yang berisi setidaknya perkiraan untuk semua nilai dari tipe awalnya (mis., int ke float).

Relational and Boolean Expressions:
  1. Relational Expressions
    • Menggunakan operator dan operand relasi dari berbagai tipe.
    • Evaluasi ke beberapa representasi boolean.
    • Simbol operator bermacam macam antar bahasa (!=, /=, .NE, <>, #).
  2. Boolean Expressions
    • Operand adalah boolean dan hasilnya adalah boolean.
    • Operator contoh.

Short-Circuit Evaluation:
  • Ekspresi di mana hasilnya ditentukan tanpa mengevaluasi semua operand dan/atau operator.

Assignment Statements:
  • Pernyataan penugasan untuk mengisi sebuah variable.

Mixed-Mode Assignment:
  • Operator assignment yang dapat dikonversi nilainya ke dalam jenis data yang berbeda.

Inilah materi kelima kami dalam pelajaran PLC. 

Monday, October 23, 2017

Pertemuan 4: Data Types


Pada pertemuan hari Sabtu tanggal 21 Oktober 2017, Bu Yanfi menjelaskan tentang materi keempat kami di mata kuliah PLC yaitu "Data Types"

Ada beberapa topik dalam materi "Data Types" hari ini, yaitu:
    1. Introduction 
    2. Primitive Data Types 
    3. Character String Types 
    4. User-Defined Ordinal Types 
    5. Array Types 
    6. Associative Arrays 
    7. Record Types 
    8. Tuple Types 
    9. List Types 
    10. Union Types 
    11. Pointer and Reference Types 
    12. Type Checking 
    13. Strong Typing

Introduction:  
  •  Tipe data mendefinisikan kumpulan dari objek data dan satu set operasi yang sudah ditetapkan terlebih dahulu pada objek tersebut.
  • Deskriptor adalah kumpulan dari atribut dalam variabel

Primitive Data Types:
Tipe data primitif merupakan tipe data dasar yang sering dipakai oleh banyak program.
  • Integer
  • Floating Point
  • Complex
  • Decimal
  • Boolean
  • Character

Character String Types:
  • Nilainya adalah urutan dari karakter.
  • Operasi umumnya:
    • Assignment and copying
    • Comparison (=, >, etc.)  
    • Catenation
    • Substring reference
    • Pattern matching

User-Defined Ordinal Types:
  •  Tipe ordinal adalah tipe di mana kisaran nilai yang mungkin bisa dihimpun dengan integer positif.
  • Contoh tipe ordinal sederhana dalam Java:
    • Integer
    • Char
    • Boolean

Array Types:
  • Array adalah kumpulan dari elemen data di mana elemen individual diidentifikasikan dengan posisinya dalam indexnya yang didasari pada elemen pertamanya.

Associative Array:
  • Array asosiatif adalah kumpulan elemen data tidak berurut yang memiliki index berdasarkan nilai  yang setara yang disebut keys.

Record Types:
  • Record adalah kumpulan dari elemen data yang heterogen yang di mana elemen individualnya diidentifikasikan dengan nama.

Tuple Types:
  • Tuple adalah tipe data yang mirip dengan record, tapi elemennya tidak dinamai.

List Types:
  • List adalah tipe data yang paling umum digunakan dalam Python. Penulisannya dibuka dengan kurung siku, dan ditutup pula oleh kurung siku.

Union Types:
  • Union adalah tipe di mana variabel diizinkan untuk menyimpan berbagai nilai berbeda dalam waktu berbeda saat proses eksekusi.

Pointer and References Types:
  • Pointer adalah kisaran nilai yang terdiri dari alamat memori dan nilai special, nil.
  • C++ menyertakan tipe pinter special yang disebut reference type yang utamanya digunakan untuk parameter formal.

Type Checking:
  •  Type checking adalah proses memastikan bahwa operand dari operator sudah cocok.

Strong Typing;
  • Strong typed language adalah bahasa di mana setiap variable harus mempunyai tipe, setiap ekspresi harus mempunyai tipe dan setiap tipe harus di definisikan secara ketat. 

Ini adalah materi keempat kami dalam mata kuliah PLC. 

Monday, October 16, 2017

Pertemuan 3: Names, Bindings, and Scopes


Pada pertemuan hari Sabtu tanggal 14 Oktober 2017, Bu Yanfi menjelaskan tentang materi ketiga kami di mata kuliah PLC yaitu "Names, Bindings, and Scopes"

Ada beberapa topik dalam materi "Names, Bindings, and Scopes" hari ini, yaitu:
  1. Introduction
  2. Names
  3. Variables
  4. The Concept of Binding
  5. Scope

Topik pertama kali ini adalah "Introduction". Bahasa imperatif adalah abstraksi dari arsitektur von Neumann, beberapa komponen dalamnya adalah memori dan prosesor. Variabel dikarakteristikan berdasarkan ciri-cirinya.


Topik kedua membahas tentang "Names".

  1. Length
    • Jika terlalu pendek, tidak bisa menjadi konotatif
    • Contoh bahasa:
      1. FORTRAN 95: maksimal 31 karakter.
      2. C99: tidak ada batasan tapi hanya 63 karakter pertama yang mempunyai fungsi yang signifikan, juga, nama eksternal dibatasi hanya 31 karakter.
      3. C#, Ada, and Java: tidak ada batasan dan semuanya memiliki fungsi yang signifikan.
      4. C++: tidak ada batas, tapi biasanya penggunanya membuat batasan.
  2. Special characters
    • PHP: semua nama variabel harus dimulai dengan tanda dollar ($).
    • Perl: semua nama variabel dimulai dengan karakter spesial, yang mendefinisikan tipe variabel.
    • Ruby: nama variabel yang dimulai dengan @ adalah variabel contoh; yang dimulai oleh @@ adalah variabel kelas.
  3. Nama dalam bahasa berbasis C merupakan bahasa case sensitive. Tapi di bahasa lain, bahasanya tidak case sensitive.

Topik kedua menjelaskan tentang "Variabel" dalam bahasa pemrograman.
  1. Variabel adalah abstraksi dari sel memori.
  2. Variabel dapat dikarakteristikan sebagai atribut dari 6 hal:
    1. Name
    2. Address
    3. Value
    4. Type
    5. Lifetime
    6. Scope

Topik keempat membicarakan mengenai "The Concept of Binding".  Binding adalah kumpulan dari kesatuan dan atribut, contohnya antara variabel dan tipenya atau nilai, atau antara operasi dan simbol. Waktu binding adalah waktu di saat binding terjadi.

Topik kelima menjelaskan tentang "Scope". Scope adalah salah satu atribut dari variabel.
  1. Cakupan dari variabel adalah jarak dari pernyataan di mana ia terlihat.
  2. Variabel lokal adalah unit program yang di mana unit tersebut dideklarasikan.
  3. Variabel nonlokal adalah unit program yang di mana ia terlihat di dalam unit tapi tidak dideklarasikan di sana.
  4. Variabel global adalah kategori spesial dari variabel nonlokal.
  5. Aturan cakupan dari bahasa menentukan bagaimana referensi terhadap nama dikaitkan dengan variabel.
  6. Contoh dari scope adalah:
    • function big() {
      function sub1()
      var x = 7;
      function sub2() {
      var y = x;
      }
      var x = 3;
      }
Inilah materi kami pada hari ini.

Monday, October 9, 2017

Pertemuan 2: Describing Syntax and Semantics


Pada pertemuan hari Sabtu tanggal 7 Oktober 2017, Bu Yanfi menjelaskan tentang materi kedua kami di mata kuliah PLC yaitu "Describing Syntax and Semantics"

Ada beberapa topik dalam materi "Describing Syntax and Semantics" hari ini, yaitu
  1. Introduction
  2. The General Problem of Describing Syntax
  3. Formal Definition of Languages
  4. Attribute Grammars
  5. Semantics

Topik pertama memperkenalkan tentang pengertian syntax dan semantics. Pengertian syntax adalah struktur dari ekspresi, pernyataan, dan unit program. Sedangkan semantics adalah arti dari ekspresi, pernyataan, dan unit program.

Topik kedua memaparkan masalah umum saat mengdeskripsikan syntax. Masalahnya adalah sebagai berikut:
  1. Kalimat adalah serangkaian karakter yang terdiri atas alfabet.
  2. Bahasa adalah kumpulan dari kalimat.
  3. Lexeme adalah unit syntax tingkat terendah dari sebuah bahasa (mis., *, sum, begin).
  4. Token adalah kategori lexeme (mis., identifier).

Topik ketiga menjelaskan definisi formal dari bahasa. Definisinya adalah:
  1. Recognizers 
    • Perangkat pengenal membaca string masukan lalu membandingkannya dengan alfabet bahasa dan menentukan apakah string masukan termasuk dalam bahasa.
  2. Generators
    • Perangkat yang menghasilkan kalimat dari bahasa.
    • Sebuah perangkat dapat menentukan apakah syntax kalimat tertentu benar secara syntax dengan membandingkannya dengan struktur generator.  

 Topik keempat menjelaskan tentang atribut dalam grammar. Atribut dalam grammar adalah:
  1. Context-Free Grammars
    • Dikembangkan oleh Noam Chomsky di pertengahan 1950an.
    • Perangkat penghasil bahasa, ditujukan untuk mendeskripsikan syntax dari bahasa natural.
    • Mengartikan beberapa bahasa yang disebut bahasa bebas konteks.
  2. Backus-Naur Form (1959)
    1. Ditemukan oleh John Backus untuk mengartikan syntax dari Algol 58.
    2. BNF setara dengan bahasa bebas konteks.

Ada aturan dalam BNF, yaitu:
Simbol nonterminal bisa memiliki lebih dari satu RHS (Right-Hand side)
     <stmt> → <single_stmt>
             | begin <stmt_list> end 


List sintaksis dideskripsikan dengan pengulangan rekursiSyntactic lists are described using recursion
    <ident_list>
ident
                | ident, <ident_list>

Turunan adalah pengulangan dari aplikasi rumus, dimulai dari simbol mulai dan diakhiri dengan kalimat (semua simbol terminal).


Contoh grammar adalah:
   <program> <stmts>
   <stmts>
<stmt> | <stmt> ; <stmts>
   <stmt>
<var> = <expr>
   <var>
a | b | c | d
   <expr>
<term> + <term> | <term> - <term>
   <term>
<var> | const

Contoh turunan adalah:
    <program> => <stmts> => <stmt>
                      => <var> = <expr>
                      => a = <expr>
                      => a = <term> + <term>
                      => a = <var> + <term>
                      => a = b + <term>
                      => a = b + const


Pengertian dari turunan adalah:
  1. Setiap kumpulan dari simbol dalam turunan adalah bentuk sentensial.
  2. Kalimat adalah bentuk sentensial yang hanya memiliki simbol terminal.
  3. Turunan yang dimulai dari kiri adalah turunan yang di mana non terminal paling kiri terlebih dahulu yang dibuka, begitu juga sebaliknya.
  4. Turunan bisa saja bukan leftmost/rightmost.
Ambiguitas dalam grammar:
Grammar menjadi ambigu jika dan hanya jika ia menghasilkan bentuk sentensial yang meiliki 2 atau lebih parse tree.

Berikut adalah contoh dari grammar ambigu dan tidak ambigu:



Topik kelima atau terkahir berisi tentang semantics. Ada berbagai jenis semantics, yaitu:
  1. Statics semantics
  2. Operational semantics
  3. Denotational semantics
  4. Axiomatic semantics

Pengertian static semantics: 
  1. Tak ada hubungannya dengan arti.
  2. CFG tidak dapat mendeskripsikan semua syntax dalam bahasa
  3. Kategori dari konstruksi yang merupakan masalah:
    • Bebas-konteks, tapi tidak praktis (mis., tipe dari operands dalam ekspresi).
    • Tidak bebas-konteks, (mis., variabel harus dideklarasikan sebelum digunakan).

Pengertian operational semantics:
  1. Mendeskripsikan pengertian dari program dengan cara mengeksekusi statementnya dalam mesin, disimulasikan ataupun secara aktual. Perubahan dari kondisi mesin (memori, register, dll) mendefinisikan arti dari statement.
  2. Untuk menggunakan operational semantics untuk bahasa tingkat tinggi, dibutuhkan mesin virtual.
  3. Kegunaan
    • Petunjuk bahasa dan buku cetak   
    • Teaching programming languages 
  4. Dua tingkat berbeda untuk kegunaan operational semantics:   
    • Natural operational semantics
    • Structural operational semantics

Pengertian denotational semantics: 
  1. Berdasarkan teori fungsi pengulangan rekursi
  2. Metode deskripsi semantics yang paling abstrak
  3. Awalnya dikembangkan oleh Scott dan Strachey (1970).

Pengertian axiomatic semantics:
  1. Berdasarkan logika formal (kalkulus predikat)
  2. Tujuan awal: verifikasi program formal
  3. Axioms atau Aksioma atau aturan inferensi didefinisikan untuk setiap jenis pernyataan dalam bahasa (untuk memungkinkan transformasi ekspresi logika menjadi ekspresi logika yang lebih formal)
  4. Ekspresi logika disebut assertions/pernyataan.

 Itulah materi kedua PLC yang kami pelajari.

Monday, October 2, 2017

Pertemuan 1: Introduction


Pada pertemuan hari Sabtu tanggal 30 September 2017, Bu Yanfi menjelaskan tentang materi pertama kami di mata kuliah PLC yaitu "Introduction".

Ada beberapa topik dalam materi "Introduction" hari ini, yaitu:
  1. Reasons for Studying Concepts of Programming Languages
  2. Programming Domains
  3. Language Evaluation Criteria
  4. Influences on Language Design
  5. Language Categories
  6. Implementation Methods
Pada topik pertama dijelaskan apa alasan belajar konsep bahasa pemrograman. Alasannya adalah bahwa jika kita mempelajarinya kita bisa meningkatkan kapasitas kita dalam berbagai bahasa, dan membuat kita mampu memilih bahasa yang cocok dengan program kita, serta juga membuat kita mudah dalam mempelajari bahasa pemrograman yang baru.

Pada topik kedua dijelaskan tentang di bidang apa sajakah programming digunakan, ada beberapa tempat, yaitu:
  • Aplikasi Ilmiah
  • Aplikasi Bisnis
  • Kecerdasan Buatan
  • Pemrograman Sistem
  • Situs web
Pada topik ketiga dirincikan kriteria bahasa pemrograman, yaitu:
  • Kemudahan membacanya
  • Kemudahan menulisnya
  • Sesuai dengan kebutuhan
  • Biaya yang bisa ditekan serendahnya
Topik keempat menjelaskan pengaruh pada desain bahasa pemrograman, yaitu:
  • Bahasa pemrograman dikembangkan pada arsitektur komputer yang beredar secara umum yang dikenal sebagai arsitektur von Neumann.
  • Metode pengembangan software yang baru juga membawa kepada pengembangan bahasa pemrograman baru. 
 Topik kelima membahas kategori dalam bahasa pemrograman, yaitu:
  • Pemrograman untuk perintah
  • Pemrograman dengan fungsi matematika
  • Pemrograman dengan logika matematika
  • Pemrograman yang menyatukan fungsi dari 3 kategori di atas
Topik keenam dan yang terakhir menjelaskan metode implementasi bahasa pemrograman, yang merupakan:
  • Kompilasi, dilakukan dengan compiler. Menerjemahkan program ke bahasa yang dimengerti oleh mesin.
  • Interpretasi, dilakukan dengan interpreter, tanpa melakukan penerjemahan.
  • Gabungan, menggabungkan 2 metode di atas.
Itulah materi yang dibahas pada pertemuan pertama kami di kelas PLC.