Apakah ada bahasa pemrograman di mana Anda dapat mengatur konfigurasi sintaks Anda sendiri dan itu akan mengubah kode ke bahasa yang Anda pilih?
Misalnya, Anda akan memilih konfigurasi spesifik seperti "blok terindeks Python", [a,b,c]
menginisialisasi array, ^
untuk eksponensial dan lainnya. Sebuah skrip akan mengubahnya menjadi setara dengan bahasa pilihan Anda.
programming-languages
syntax
Dokkat
sumber
sumber
Jawaban:
Ya, tapi mungkin tidak dengan cara Anda berpikir.
Lisp dan kerabatnya memiliki sistem makro yang kuat yang memungkinkan Anda melakukan transformasi sewenang-wenang pada sumber Anda, jadi pada prinsipnya Anda dapat menggunakan makro (dan makro pembaca, di tingkat karakter) untuk membuat hampir semua ekstensi yang Anda suka. Bahasa konkatatif (dan bahasa oleh penulis di bidang terkait) memiliki potensi untuk kekuatan pemrograman yang serupa . Contoh yang baik dari ini adalah Forth , di mana banyak konstruksi sintaksis (seperti komentar) dapat didefinisikan pengguna. Untuk contoh kontemporer dan non-esoterik, ada upaya untuk memberikan dukungan Perl 6 yang lebih baik daripada Perl 5 untuk sintaks yang ditentukan pengguna juga.
sumber
operator[]
untuk beberapa argumen, atau memperkenalkan operator baru seperti di Haskell; tapi saya ragu komite akan melihat melewati masalah parsing.Kedengarannya seperti pemrograman konsep .
Saya tidak terbiasa dengan itu, tetapi XL adalah bahasa yang dirancang khusus untuk itu.
Lisp dan Forth juga mendukung pemrograman konsep, meskipun kurang dari XL. Saya menyarankan Lisp karena sangat praktis dan efektif. Yang paling penting adalah sintaks yang jelas dan fleksibel, bukan notasi, yang disediakan Lisp.
Anda mungkin tertarik pada bahasa seperti Haskell yang memiliki sintaks yang sangat fleksibel namun seragam.
sumber
Tidak sepengetahuan saya.
Saya tidak berpikir itu akan menjadi ide yang sangat baik juga - salah satu manfaat utama dari sintaks bahasa standar adalah bahwa banyak orang dapat membacanya, dan jika semua orang menemukan sintaks mereka sendiri maka tidak ada yang akan dapat memahami kode orang lain. .... jadi bahasa ini mungkin menyenangkan bagi penggemar tetapi tidak banyak berguna untuk hal praktis.
Hal terdekat yang ada mungkin adalah Lisp, di mana sistem makro memungkinkan Anda menulis konstruksi bahasa Anda sendiri dengan cara yang sangat fleksibel. Biasanya Anda akan tetap menggunakan sintaks Lisp, tetapi Anda dapat secara efektif mendefinisikan kembali semuanya jika Anda benar-benar menginginkannya.
Akibatnya, Lisps cenderung sangat populer untuk menerapkan DSL. Contoh yang bagus adalah akses data ini DSL di Clojure (Korma) yang menangani semua kode boilerplate yang diperlukan untuk akses database.
sumber
Scala sering digunakan dengan cara ini untuk membuat DSL, Bahasa Khusus Domain.
Terutama ini karena Scala tidak memiliki operator, dan metode scala yang memanggil sintaksis dapat disingkat. Contohnya:
5 adalah objek Integer. Untuk menghitung 5 ditambah 7 Anda bisa menulis
val ans = 5.add (7) kecuali bahwa metode penambahan sebenarnya bernama "+" sehingga Anda akan menulis:
val ans = 5. + (7) tetapi dalam Scala, Anda tidak perlu memasukkan "." dalam pemanggilan metode atau tanda kurung "()" di sekitar argumen sehingga untuk memanggil metode + pada objek 5, Anda akan menulis
val ans = 5 + 7 yang bekerja dengan sempurna karena Scala tidak memiliki operator untuk mengganggu skema penamaan metode pintar Anda. Sekarang perluas gagasan itu ke kelas dan objek Anda sendiri, termasuk fakta bahwa Anda dapat "mengganti" metode seperti + serta membuat metode Anda sendiri bernama >>> atau ::! atau @ * @ atau hanya nama teks biasa seperti fancify.
sumber
Tidak mengatakan Anda harus menggunakannya karena sebagian besar masih eksperimental, tetapi satu paradigma pemrograman baru yang menarik adalah Pemrograman Berorientasi Bahasa (LOP).
Sergey Dmitriev menjelaskannya secara lebih rinci .
Itulah ideologi itu, tetapi praktis itu memanas yang mendukung perilaku yang Anda minta. Kamu bisa:
Paling pemrograman aktif lingkungan saya tahu berikut paradigma ini adalah gratis Meta Pemrograman Sistem (MPS) oleh JetBrains.
Ini sebenarnya mulai digunakan dalam perangkat lunak komersial juga, jadi mungkin itu mulai keluar dari fase 'eksperimental':
sumber
Bahasa khusus domain cukup umum digunakan dalam komunitas Tcl. Misalnya, sama sekali tidak umum untuk melihat program Tcl yang berisi C dan SQL sebagai DSL yang disematkan (melalui paket Critcl dan Sqlite). Tentang satu-satunya batasan pada DSL tertanam adalah bahwa itu jauh lebih baik jika bahasa tertanam menyeimbangkan kurung kurawal, dan yang ternyata menjadi persyaratan yang benar-benar tidak berat dalam praktek!
Bahasa lain yang membuat DSL mudah adalah Standar ML, yang memungkinkan Anda memiliki akses ke token mentah dari tokenizer sistem generik (dari sebelum titik di mana pengidentifikasi dikonversi menjadi kata kunci). Hal ini membuat melakukan berbagai kelas DSL menjadi mudah - asalkan mereka mematuhi beberapa aturan sintaksis dasar SML, terutama dalam kaitannya dengan komentar, string dan batas token - dan pada kenyataannya banyak digunakan dalam sejumlah aplikasi penggerak utama untuk bahasa tersebut. (pembuktian teorema, dll.)
Tidak semua bahasa membuatnya mudah. Secara khusus, bahasa yang secara otomatis mem-parsing isi dari istilah yang diperkuat (banyak dari mereka!) Tidak dapat melakukan ini, sehingga mereka membutuhkan DSL untuk dibangun oleh operator utama, dengan menempatkan sub-bahasa ke dalam string, atau dengan menggunakan pra-prosesor yang menulis ulang DSL menjadi sesuatu yang dapat ditangani di dalam bahasa host.
sumber
AFAIU Anda mencari bahasa yang dapat membantu Anda menulis DSL Anda sendiri (Bahasa Khusus Domain). Ada banyak kandidat yang bagus. Secara pribadi saya akan merekomendasikan Ruby atau Io, karena mereka menawarkan 1) overloading operator mudah, 2) meta-pemrograman, dan 3) mekanisme fallback seperti
method_missing
yang dapat Anda gunakan untuk membuat API Anda sendiri. Misalnya, lihat dalam sqldsl , DSL yang ditulis dalam Ruby yang menghasilkan SQL dengan membaca kode Ruby.sumber
Saya belum benar-benar menggunakannya , tetapi jika saya ingat dengan benar, TXL dirancang khusus untuk menerjemahkan kode sumber. Karena itu, Anda harus dapat menggunakannya untuk menentukan cara menerjemahkan dari bahasa Anda dan / atau ekstensi bahasa ke bahasa target apa pun.
Tampaknya ada tata bahasa yang tersedia untuk Javascript. Tapi, belum pernah menggunakannya sebelumnya, saya tidak yakin bagaimana itu akan membantu Anda.
sumber
Ada preprosesor yang bagus di luar sana yang disebut PPWizard, cukup kuat. Setelah Anda mempelajari sintaksnya, Anda dapat membuat defs makro untuk menargetkan berbagai bahasa - bukan karena hal itu sangat mudah atau menyenangkan, tetapi ini adalah alat yang berguna.
sumber
Mungkin yang Anda cari adalah sebagai kompiler kompiler. Kompiler kompiler mengambil definisi bahasa yang ditulis dalam bahasa formal dan membuat kompiler untuk bahasa ini.
Lihat http://en.wikipedia.org/wiki/Compiler-compiler
sumber
Salah satu cara umum untuk mempersonalisasi sebagian bahasa pemrograman adalah dengan menggunakan pra-prosesor makro. Misalnya Anda bisa menjalankan "dokkat-lang" melalui preprosesor C sebelum meletakkan hasilnya di mana beberapa lingkungan javascript akan mengunduhnya.
Seberapa banyak yang dapat Anda lakukan tergantung pada kecanggihan preprosesor Anda. Perhatikan bahwa versi awal C ++, Objective C, dan berbagai bahasa eksperimental dilakukan dengan preprocessing kode sumber sebelum mengumpankan ke rantai alat kompiler C persediaan.
sumber