Apa perbedaan mendasar antara semantik operasional kecil dan besar?
Saya mengalami kesulitan memahami apa itu dan motivasi untuk memiliki keduanya.
semantics
operational-semantics
small-step-semantics
Simon Morgan
sumber
sumber
x = 0; while ( true ) { x = x + 1; }
?Jawaban:
Semantik langkah kecil mendefinisikan metode untuk mengevaluasi ekspresi satu langkah perhitungan pada satu waktu. Secara formal, semantik langkah kecil untuk bahasa ekspresiE adalah relasi →:E×E disebut relasi reduksi . Semantik langkah kecil menjelaskan apa yang terjadi pada ekspresi secara detail. Itu dapat memberikan akun yang tepat bahkan program non-terminasi, dengan rantai tak terbatas e0→e1→e2→… . Program terminating adalah program sedemikian rupa sehingga e0→e1→⋯→v v ∀e′∈E,v↛e′
Di ujung lain dari spektrum adalah semantik denotasional . Semantik denotasi memberikan "makna" untuk setiap ungkapan. Ini adalah fungsi dari ekspresi ke denotasi: ( disebut domain). Ruang denotasi dapat sepenuhnya tidak terkait dengan ruang sintaksis, misalnya dapat berupa ekspresi yang dievaluasi ke suatu angka dan dapat berupa sekumpulan angka seperti atau .[[⋅]]:E→D D E D N R
Semantik langkah besar adalah jenis di tengah. Sebuah semantik besar-langkah pada bahasa ekspresi dan seperangkat nilai adalah hubungan . Ini mengaitkan ekspresi dengan nilainya (kemungkinan beberapa nilai jika bahasanya tidak deterministik). Seringkali, nilai khusus digunakan untuk ekspresi non-terminating.E V ⇓:E×V ⊥
Jadi mengapa kita memiliki ketiga konsep ini? Semua gagasan ini dapat saling memodelkan satu sama lain, tetapi model tersebut menambah tingkat kerumitan.
Secara operasional, semantik langkah kecil sesuai dengan melihat setiap operasi yang dilakukan oleh penerjemah untuk bahasa tersebut. Semantik langkah besar hanya melihat nilai yang dihasilkan. Semantik denotasional melihat pada interpretasi matematis yang mungkin atau mungkin tidak ada hubungannya dengan apa yang terjadi pada komputer.
Semantik langkah kecil adalah yang paling jelas. Ini jelas memberikan informasi yang berguna tentang program yang tidak berakhir. Secara umum, ini memberikan informasi terperinci tentang perilaku program.
Semantik denotasional mengubah konstruksi sintaksis menjadi objek matematika yang arbitrer; ia dapat mengekspresikan apa pun yang diinginkan para ilmuwan (Anda dapat mendefinisikan denotasi ekspresi sebagai semua rantai reduksi yang mungkin darinya), tetapi dengan biaya menambahkan tingkat kerumitan. Ini digunakan ketika kita ingin memisahkan beberapa detail seperti bagaimana tepatnya ekspresi dievaluasi.
Semantik langkah besar ada di tengah: ia mengabstraksi rincian evaluasi tetapi mempertahankan sifat sintaksis hasilnya. Biasanya konsep ini digunakan ketika ada semantik langkah kecil yang mendasarinya, sebagai cara untuk mengekspresikan secara ringkas “ ”sebagai“ ”. Dalam konstruksi seperti itu, sementara konsepnya sangat berbeda (satu memungkinkan kita untuk berbicara tentang langkah-langkah perhitungan individu dan tentang program non-terminating, yang lain tidak), definisi akan terlihat sangat mirip, karena dalam kasus ini aturan yang menentukan semantik langkah besar pada dasarnya berbentuk “if dan… dan dan∃(e1,…,en),e→e1→…en and ∄e′,en→e′ e⇓en e1→∗e2 en→∗v v adalah nilai maka ”.e1⇓v
sumber
3
dalam((2+1)+1)⇓3
Saya menebak 'denotasional' adalah nilai akhir-semua, tetapi dalam contoh apa 'langkah besar' tidak harus memetakan langsung ke sana? Apakah perbedaannya ada hubungannya dengan konteks, seperti(a + 1)
tergantung pada lingkungan yang mengandunga
?3