Apa yang dimaksud dengan semantik bahasa pemrograman?

9

Dalam Bab 1 dari Yayasan Praktis untuk Bahasa Pemrograman , penulis menyebutkan bahwa pohon sintaksis abstrak terkait dengan jenis .

Secara intuitif, jenis seperti tipe, tetapi saya ingin tahu apakah mereka memiliki definisi yang tepat. Saya akan senang jika beberapa referensi disediakan juga.

rslima
sumber

Jawaban:

4

Itu tergantung pada apa semantik yang akan kita ambil untuk jenis dan jenis. - Namun definisi singkat - sedikit informal - Bisa - Kelas adalah kelas AST dan tipe adalah kelas nilai .

Number47
sumber
4

Sebenarnya ada banyak kesamaan antara macam untuk sintaks abstact dan tipe seperti yang biasanya dipahami. Tetapi sort adalah konsep sintaksis formal , dan pohon-pohon AS juga sintaksis, sedangkan tipe adalah konsep semantik .

Terminologi berasal dari istilah aljabar (juga disebut aljabar bebas ) dan aljabar universal . Ini pada dasarnya adalah teori sintaksis dari struktur aljabar, dianalisis secara independen dari setiap interpretasi. Mereka dikembangkan pada paruh pertama abad ke-20.

Suatu istilah dapat dilihat sebagai pohon, di mana simpul-simpul dilabeli dari satu set operator yang terbatas, masing-masing operator memiliki arity tetap yang menentukan jumlah anak perempuan dalam pohon tersebut. Arity 0 untuk daun. Dalam aljabar multi-sortir ini disempurnakan dengan macam-macam, sehingga masing-masing operator milik semacam, dan arities digantikan oleh daftar jenis yang dipesan, yang untuk masing-masing putri memperbaiki jenis operator kepala. Jenis operator, bersama dengan daftar jenis putrinya, disebut tanda tangan operator.

Dalam aljabar universal, ini lebih disempurnakan dengan memperkenalkan hubungan kesetaraan yang didefinisikan secara adil antara istilah-istilah.

Meskipun tampaknya telah sedikit memudar, konsep-konsep ini cukup populer dan banyak dipelajari dalam ilmu komputer pada akhir abad ke-20, sebagai aljabar abstrak di mana kemudian dilihat sebagai dasar untuk tipe data abstrak, yang sebagian merupakan pendahulu dari apa yang ada. nos kelas dalam pemrograman berorientasi objek.

Aljabar universal terkait dengan pengembangan teori kategori, yang juga mendasar dalam visi jenis dan bahasa pemrograman saat ini.

Aljabar adalah objek sintaksis, dan dimaksudkan untuk digunakan dengan interpretasi dalam beberapa domain semantik yang berhubungan dengan jenis. Interpretasi adalah homomorfisme yang memetakan sort ke domain nilai (tipe) , dan operator ke fungsi antara domain tersebut, sehingga tanda tangan dihormati, dan persamaan juga dalam kasus aljabar persamaan. Ini adalah bagaimana Anda dapat menerapkan hasil teori grup ke domain apa pun dengan operasi yang menghormati definisi grup.

Organisasi ini dianggap sangat nyaman oleh para peneliti awal dalam bahasa pemrograman, terutama yang berkaitan dengan formalisasi bahasa pemrograman. Itu memiliki keuntungan dari isolasi sintaksis dan semantik, dan secara matematis dipahami dengan baik.

Alasan lain untuk mengadopsinya adalah kekhawatiran dengan pengembangan alat untuk memanipulasi program, baik di lingkungan pengembangan atau dalam sistem formal untuk membuktikan sifat-sifat program (yang ternyata menjadi masalah kembar yang semakin banyak).

Hal ini menyebabkan munculnya konsep pohon sintaksis abstrak (AST) untuk bahasa pemrograman, yang pada dasarnya adalah istilah aljabar multi-diurutkan (kadang-kadang disempurnakan dengan penggunaan penyatuan penyatuan dalam beberapa sistem). AST adalah sintaks referensi untuk suatu bahasa, yang darinya semantik dapat didefinisikan oleh homomorfisme seperti dalam semantik denotasional.

Tidak hanya nyaman untuk mempelajari semantik bahasa, tetapi pohon juga lebih terstruktur daripada string dan dengan demikian menjadi dasar yang lebih baik untuk mengembangkan alat pemrograman dan lingkungan pemrograman.

Hal ini memungkinkan untuk mengisolasi parsing yang secara tradisional merupakan bagian yang berantakan karena keterbatasan teknologi parsing memaksa penggunaan tata bahasa yang terdistorsi. Ini juga faktor keluar masalah presentasi.

Hal ini memungkinkan untuk beberapa representasi konkret (string atau grafik) dari program, yang kadang-kadang bisa nyaman (tidak ada alasan mengapa menggunakan tanda baca daripada tab, atau sebaliknya, dalam sintaks program harus dipaksakan pada orang).

Itu membuatnya mudah untuk mendefinisikan banyak interpretasi program, dan sejenisnya , untuk menganalisis kelayakan program dengan interpretasi abstrak.

Lebih mudah untuk menulis (semi-) alat manipulasi program otomatis, misalnya untuk transformasi program otomatis, atau terjemahan antar bahasa.

Hal-hal kadang-kadang mungkin sedikit lebih rumit dalam praktik, karena beberapa bentuk Sintaksis Abstrak memungkinkan beberapa operator untuk membangun pohon (ekspresi) yang termasuk dalam beberapa jenis (cara informal untuk melihatnya). Misalnya mungkin ada semacam untuk konstruksi sintaksis yang mewakili variabel (entitas yang dapat dialihkan), dan lainnya untuk ekspresi. Tetapi variabel apa pun dapat digunakan sebagai ekspresi, sebaliknya yang salah.

Makalah awal tentang ini, untuk bahasa pemrograman, tanggal kembali ke pertengahan tujuh puluhan. Konseptualisasi pada waktu itu dimaksudkan untuk produksi sintaks sadar (kata "diarahkan" kemudian digunakan) lingkungan pemrograman. Cari Mentor dan Centaur di Eropa dan untuk Cornell Program Synthesizer di AS. Mereka adalah dua sistem pertama yang benar-benar menggunakan konsep semacam itu dengan cara yang praktis. Banyak lainnya dikembangkan setelahnya.

Tetapi sintaksis abstrak mendahului sistem ini. Bahasa Lisp (1958) memiliki sintaksis abstrak, yang tidak mengejutkan karena dikembangkan oleh seorang ahli logika, dan untuk tujuan membuat program yang memanipulasi program (lihat juga ML dan LCF ... yang muncul kemudian). Tetapi Lisp tidak disortir: semuanya secara sintaksis merupakan daftar dan struktur yang lebih halus pada dasarnya bergantung pada semantik. Ini membuat sebagian orang mempertimbangkan, agak keliru, bahwa Lisp tidak memiliki sintaksis.

babou
sumber
Apakah Anda mengatakan ada 2 hierarki berbeda, satu di tanah sintaksis, dan satu lagi di tanah semantik. Dalam sintaksis yang kita miliki seperti AST dan jenis dan jenis. Dalam semantik kita memiliki nilai, tipe, jenis ... dll. Tidakkah ada bahasa yang menyatukan keduanya menjadi satu lingkungan pengembangan seperti Twelf atau Coq?
CMCDragonkai
@ CMCDragonkai saya akan mengatakan (kecuali kemungkinan kesalahan) persis apa yang saya katakan. Saya tidak akan menyebut hierarki ini, melainkan domain dari wacana (meta). Pemisahan sintaksis-semantik membedakan apa yang kita bicarakan dan bagaimana kita melakukannya, yang membutuhkan representasi. Anda seharusnya tidak ingin mencampur sintaks dan semantik dari bahasa yang sama, tetapi sintaksis dari satu bahasa dapat menjadi objek wacana, karena itu milik semantik bahasa lain. Dalam hal ini Anda mungkin melihat beberapa penyatuan, untuk ditangani dengan hati-hati. Sintaksis selalu dihasilkan secara terbatas, sementara semantik tidak memiliki kendala seperti itu.
babou
2

Tampak di bab empat bahwa sort untuk sintaks dan tipe untuk semantik.

Contoh tabel sintaks pada halaman 40 berkaitan dengan jenis-jenis dalam bahasa L {num str}. Rupanya macam adalah kategori dalam sintaks bahasa.

Secara khusus, "plus" memiliki semacam, yang merupakan kategori sintaksis dari hasilnya. Jenis operator "plus" bernama "Exp". Itu mewakili fakta bahwa secara sintaksis, doa dari operator "plus" adalah ekspresi. Doa operator "plus" dapat mengisi posisi dalam pohon sintaksis abstrak di mana ekspresi diizinkan. Itulah jenis konstruksi "plus" itu. Begitulah cara itu masuk ke dalam struktur teks yang mewakili program.

Sistem tipe pada halaman 41 berkaitan dengan tipe-tipe dalam bahasa L {num str}. Jenis operator "plus", mengingat operandnya bertipe "num", adalah "num". Penilaian ini adalah deskripsi parsial dari semantik operator "plus". Artinya, bagian dari makna operator "plus" adalah menggabungkan dua angka untuk menghasilkan angka. Makna ini membedakan "plus" dari ekspresi lain.

Selanjutnya, ada semacam bernama "Typ" yang berisi dua jenis, "num" dan "str".

minopret
sumber
1
Yah, dia menggunakannya dalam konsep ini, tetapi dia tidak mendefinisikannya dengan jelas. Saya menemukan istilah "Banyak-diurutkan logika" yang menurut saya jenis dan konsep yang benar-benar tertutup. Saya hanya ingin tahu definisi yang jelas untuk keduanya.
rslima
Ini ada hubungannya dengan "sistem tipe murni". Saya menduga kita dapat menganggap presentasi di " Kalkulus Lambda dengan Jenis " sebagai konvensional. Tapi itu tidak ringkas. Saya belum menemukan referensi yang memberikan definisi istilah, jenis, jenis, dan jenis yang jelas dan ringkas.
minopret
Bagaimana dengan kepala produksi di pengurai? Banyak kali Anda akhirnya mengklasifikasikan tata bahasa dengan nama yang mirip seperti Ekspresi atau Jenis.
CMCDragonkai
1

Di awal Bab 1, Harper memberikan petunjuk tentang apa yang dia maksud dengan kata sort :

Sintaks suatu bahasa menentukan sarana yang dengannya berbagai macam frasa (ekspresi, perintah, deklarasi, dan sebagainya) dapat digabungkan untuk membentuk program.

Dia mendefinisikan frase kata sebagai pohon sintaksis abstrak, yang kemudian dia bahas.

jcora
sumber
Sepertinya saya seolah-olah "macam" digunakan dengan makna bahasa Inggris yang biasa di sini, identik dengan "jenis".
Raphael
@ Raphael Ya, tapi sepertinya artinya konsisten dengan penggunaan formal yang terakhir, tidakkah Anda setuju?
jcora
Tidak terlalu. Ungkapan "X semacam ini" mungkin sering muncul dalam buku; kalimat ini tidak menandakan dengan cara apa pun bahwa sesuatu sedang didefinisikan. (Juga, bagian ini tidak cocok dengan bagaimana saya memahami istilah "semacam").
Raphael
@ Raphael OK, tolong jelaskan bagaimana penggunaan khusus ini tidak konsisten, itu pasti akan memberitahu saya, karena itulah bagaimana saya saat ini memahaminya.
jcora
Gagasan "sort" yang saya tahu dikaitkan dengan node individual AST, bukan keseluruhan pohon (yang Anda maksudkan dengan "frase" di sumber Anda).
Raphael