Dalam dunia pemrograman, ekspresi-S (atau ekspresi simbolik) adalah representasi data daftar bersarang (struktur pohon). Representasi ini pertama kali diusulkan dan dipopulerkan oleh bahasa pemrograman Lisp dan telah digunakan secara luas baik dalam kode sumber maupun data bahasa tersebut. Ekspresi-S bersifat revolusioner dalam pemrograman dan representasi struktur data. Mari kita lihat lebih dekat fitur dan kegunaan utamanya.
Dalam sintaks kurung siku tradisional Lisp, definisi ekspresi-S cukup sederhana: ekspresi-S dapat berupa atom atau ekspresi dalam bentuk (x . y), di mana x dan y adalah ekspresi-S. Definisi ini mencerminkan konsep Lisp yang merepresentasikan daftar sebagai serangkaian "sel", yang masing-masing merupakan pasangan berurutan.
Definisi rekursif ini berarti bahwa ekspresi-S dan daftar dapat merepresentasikan pohon biner apa pun.
Selain itu, dialek Lisp modern seperti Common Lisp dan Scheme menyediakan sintaksis menggunakan tag data untuk menunjukkan struktur objek yang sama, yang memungkinkan ekspresi untuk menjalankan siklus referensi tanpa menyebabkan rekursi tak terbatas.
Bentuk tata bahasa ekspresi S memiliki beberapa variasi untuk mendukung representasi tipe data yang berbeda. Yang paling umum meliputi:
Jadi, karakter # sering digunakan untuk mengawali ekstensi sintaksis, misalnya, #x10 untuk integer heksadesimal atau #\C untuk karakter.
Dalam Lisp, saat mengekspresikan kode sumber, elemen pertama dari ekspresi-S biasanya berupa nama operator atau fungsi, dan elemen-elemen berikut diperlakukan sebagai parameter. Ini disebut "notasi awalan" atau "notasi Polandia". Misalnya, ekspresi Boolean C 4 == (2 + 2) direpresentasikan dalam ekspresi S Lisp sebagai (= 4 (+ 2 2)).
Definisi tepat dari "atom" bervariasi di antara sepupu Lisp; string yang dikutip biasanya dapat berisi karakter apa pun, tetapi pengidentifikasi yang tidak dikutip tidak dapat berisi tanda kutip, karakter spasi, tanda kurung, dan karakter khusus lainnya. karakter.
Ekspresi S dibaca melalui fungsi READ, dan fungsi PRINT digunakan untuk mengeluarkan ekspresi S. Kemampuan membaca dan menulis bersama ini menjadikan program Lisp tidak hanya representasi kode sumber, tetapi juga struktur data yang dapat diproses. Program Lisp dapat diformat sebagai ekspresi S yang indah dan dikeluarkan dalam berbagai format melalui fungsi PPRINT.
Dalam penggunaan ekspresi-S, perbandingan penting adalah perbedaannya dengan XML: ekspresi-S hanya memiliki satu bentuk penyertaan, yaitu pasangan titik, sedangkan tag XML dapat berisi atribut sederhana, tag lain, atau CDATA. Ekspresi-S lebih sederhana daripada XML dalam kasus penggunaan sederhana, tetapi dalam aplikasi tingkat lanjut, XML menyediakan bahasa kueri seperti XPath, yang membuat alat dan pustaka untuk memproses data XML lebih menguntungkan.
Berbagai bahasa pemrograman turunan Lisp memiliki spesifikasi sintaksis ekspresi-S sendiri, termasuk Common Lisp (ANSI INCITS 226-1994 (R2004)), Scheme (R5RS dan R6RS), dan ISLISP. Meskipun Rancangan Internet yang diusulkan oleh Ron Rivest pada tahun 1997 gagal menjadi RFC, spesifikasi penyimpanan dan pertukaran data umum yang ditetapkan berdasarkan ekspresi-S Lisp masih dikutip dan digunakan dalam dokumen-dokumen lain.
Rivest menetapkan format sebagai string oktet atau daftar terbatas ekspresi-S lainnya, dan menjelaskan format transmisi dari tiga struktur ekspresi.
Perkembangan ini tidak diragukan lagi telah mendorong penerapan ekspresi-S dalam pertukaran dan analisis data, serta universalitas dan fleksibilitas pemrograman. Melalui perkembangan standarisasi ini, kita melihat peran penting ekspresi-S dalam pemrograman generasi berikutnya.
Singkatnya, status ekspresi-S dalam Lisp bukan hanya persyaratan tata bahasa, tetapi juga penyajian terintegrasi dari struktur data dan kode sumber. Ini menantang pandangan bawaan kita tentang bahasa pemrograman. Jadi, dapatkah ekspresi-S menemukan aplikasi dan makna baru dalam pemrograman masa depan?