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
- Introduction
- The General Problem of Describing Syntax
- Formal Definition of Languages
- Attribute Grammars
- 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:
- Kalimat adalah serangkaian karakter yang terdiri atas alfabet.
- Bahasa adalah kumpulan dari kalimat.
- Lexeme adalah unit syntax tingkat terendah dari sebuah bahasa (mis., *, sum, begin).
- Token adalah kategori lexeme (mis., identifier).
Topik ketiga menjelaskan definisi formal dari bahasa. Definisinya adalah:
- Recognizers
- Perangkat pengenal membaca string masukan lalu membandingkannya dengan alfabet bahasa dan menentukan apakah string masukan termasuk dalam bahasa.
- 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:
- 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.
- Backus-Naur Form (1959)
- Ditemukan oleh John Backus untuk mengartikan syntax dari Algol 58.
- 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:
- Setiap kumpulan dari simbol dalam turunan adalah bentuk sentensial.
- Kalimat adalah bentuk sentensial yang hanya memiliki simbol terminal.
- Turunan yang dimulai dari kiri adalah turunan yang di mana non terminal paling kiri terlebih dahulu yang dibuka, begitu juga sebaliknya.
- Turunan bisa saja bukan leftmost/rightmost.
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:
- Statics semantics
- Operational semantics
- Denotational semantics
- Axiomatic semantics
Pengertian static semantics:
- Tak ada hubungannya dengan arti.
- CFG tidak dapat mendeskripsikan semua syntax dalam bahasa
- 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:
- 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.
- Untuk menggunakan operational semantics untuk bahasa tingkat tinggi, dibutuhkan mesin virtual.
- Kegunaan
- Petunjuk bahasa dan buku cetak
- Teaching programming languages
- Dua tingkat berbeda untuk kegunaan operational semantics:
- Natural operational semantics
- Structural operational semantics
Pengertian denotational semantics:
- Berdasarkan teori fungsi pengulangan rekursi
- Metode deskripsi semantics yang paling abstrak
- Awalnya dikembangkan oleh Scott dan Strachey (1970).
Pengertian axiomatic semantics:
- Berdasarkan logika formal (kalkulus predikat)
- Tujuan awal: verifikasi program formal
- Axioms atau Aksioma atau aturan inferensi didefinisikan untuk setiap jenis pernyataan dalam bahasa (untuk memungkinkan transformasi ekspresi logika menjadi ekspresi logika yang lebih formal)
- Ekspresi logika disebut assertions/pernyataan.
Itulah materi kedua PLC yang kami pelajari.


0 comments:
Post a Comment