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.
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".
sumber
Di awal Bab 1, Harper memberikan petunjuk tentang apa yang dia maksud dengan kata sort :
Dia mendefinisikan frase kata sebagai pohon sintaksis abstrak, yang kemudian dia bahas.
sumber