apa itu semantik?

13

Ada banyak bahasa populer. Tetapi, para ilmuwan komputer memberi tahu kita bahwa untuk memahami perilaku program dalam bahasa-bahasa itu dengan jelas dan jelas mendebatkan perilaku program (misalnya membuktikan identitas mereka), kita perlu menerjemahkannya ke bahasa lain yang dipahami dengan baik. Mereka menyebut bahasa itu "semantik". Penulis mengusulkan satu dari banyak semantik. Mereka menjelaskan arti dari konstruksi mereka dan bagaimana Anda dapat menerjemahkan bahasa Anda ke dalam bahasa mereka. Begitu Anda melakukannya, semua orang akan memahami program Anda, kata mereka.

Terlihat bagus, namun, saya tidak mengerti sesuatu. Apakah mereka memberi tahu kami bahwa mereka memperkenalkan bahasa lain untuk memahami yang pertama? Mengapa kita memahaminya lebih baik daripada yang asli? Mengapa semantik ini lebih baik dari itu? Mengapa tidak segera mempelajari semantik C alih-alih menemukan bahasa lain, untuk menggambarkan semantik C? Hal yang sama berlaku untuk sintaksis. Mengapa saya tidak mengajukan pertanyaan yang sama tentang sintaksis?

PS Dalam komentar saya mendengar bahwa semantik tidak berarti bahasa lain atau terjemahan ke dalamnya. Tetapi Formal Semantics for VHDL mengatakan bahwa jika Anda memahami sesuatu hanya dengan satu cara maka Anda tidak memahaminya dan "makna makna" dapat ditentukan jika kami menyediakan bahasa dengan mekanisme yang menerjemahkannya ke bahasa lain (dikenal). Artinya, "semantik adalah Hubungan antara sistem formal". Hennessy, dalam Semantik Pemrograman Bahasa , mengatakan bahwa semantik memungkinkan untuk pemrosesan formal dari program "makna", ketika semantik disediakan sebagai BNF atau Diagram Sintaks. Apa itu sistem formal jika bukan bahasa?

PS2 Dapatkah saya mengatakan bahwa sintesis HW dari program HDL yang diberikan ke interkoneksi gerbang, adalah proses ekstraksi semantik? Kami menerjemahkan deskripsi (tingkat tinggi) ke dalam bahasa (tingkat rendah) yang kami pahami, sesudahnya.

Val
sumber
Apa jenis diagram yang Anda maksud? Saya bekerja dengan semantik, tetapi hampir tidak pernah menggunakan diagram.
Dave Clarke
1
Saya tidak akan menyebut semantik sebagai "bahasa". Semantik mendefinisikan makna bahasa. Misalnya, sintaks angka binernya . Hanya dengan semantik nilai ( w ) = Σ | w | i = 1 w i 2 n - i + 1 kita mendapatkan angka aktual; perhatikan bahwa ini bukan satu-satunya semantik yang mungkin, ada juga BCD, 2-pelengkap dan banyak lagi. {0,1}+nilai(w)=saya=1|w|wsaya2n-saya+1
Raphael
@Dapat Permisi, saya membuat pertanyaan saya dengan kesan Diagram Keputusan Penugasan. Saya juga hanya formal semantik untuk VHDL, sebuah buku di mana penulis mengusulkan semantik yang berbeda, banyak diagram di masing-masing. Saya berpikir bahwa ini adalah bahasa yang kami petakan.
Val
Ini kedengarannya jauh lebih mirip semantik, dan lebih seperti langkah perantara dalam proses kompilasi ke perangkat keras.
Dave Clarke
Ya, tetapi mereka mengekstrak "makna" dari deskripsi.
Val

Jawaban:

15

Mengapa tidak segera mempelajari semantik C alih-alih menemukan bahasa lain, untuk menggambarkan semantik C?

Karena untuk mendefinisikan semantik C Anda memerlukan beberapa jenis bahasa, misalnya bahasa Inggris. Bahasa Inggris bisa ambigu, dan terutama adalah semantik C99.

Gagasan ilmu komputer tentang semantik umumnya merupakan deskripsi matematis dari suatu program, dan deskripsi ini bukan terjemahan. Ada beberapa jenis semantik, yang bisa mengenai hal-hal yang berbeda:

  1. tentang fungsi matematika mana yang oleh program ( semantik denotasi ),
    lambda x: x + x =(x2x)
  2. tentang properti yang harus dimiliki sebelum dan sesudah program ( semantik aksiomatik ),
    {Sebuah>0} x = a; y = 0; while (1 <x) {x = x / 2; y ++; } {y=catatan(Sebuah)}
  3. tentang bagaimana program akan mengurangi ( semantik operasional ). mana mewakili ingatan Anda sebelum dan sesudah. Dalam hal ini dan jika dan adalah sel memori untukdan, dan jika .
    (σ, while (x) {x -; y ++;})σ
    σ,σσ=(xSebuah,yb)σ=(xSebuah+b,y0)xyxySebuah

Agak menyedihkan untuk saat ini, memahami secara universal suatu program melalui semantiknya bukanlah hal yang mudah maupun niat dari semuanya. Ini bukan yang pertama karena, well, matematika itu bisa berantakan. Ini bukan yang terakhir karena semantik memberikan memang memberikan deskripsi umum dan tidak ambigu, tetapi tidak digunakan untuk memahami suatu program.

Jika membaca semantik tidak terlalu bermakna, membaca dan menyetujui semantik pada elemen dasar bahasa sangat penting, misalnya untuk menjelaskan secara gamblang bagaimana C'skarya primitif.terus

Kesimpulannya:

Apakah mereka memberi tahu kami bahwa mereka memperkenalkan bahasa lain untuk memahami yang pertama?

Secara teknis tidak, bahasanya adalah matematika. Juga pada dasarnya sama untuk semua bahasa pemrograman, jadi bahkan memperkenalkan bahasa baru, jika sama untuk semua, akan cukup baik.

Mengapa kita memahaminya lebih baik daripada yang asli?

Karena ini matematika sehingga mungkin lebih sulit untuk dipahami, tetapi cara ini lebih tepat dan lengkap.

Hal yang sama berlaku untuk sintaksis.

Ada karya pada parser terverifikasi, tetapi pertanyaan tentang apa artinya semantik parser tidak sepele.

jmad
sumber
2
"Matematika [...] jauh lebih tepat dan lengkap." - yang tentu saja menimbulkan pertanyaan untuk sintaksis formal dan semantik matematika itu sendiri. ;)
Raphael