Fitur dasar untuk bahasa dasar? Saran DSL?


9

Saya akhirnya mulai memahami kompleksitas di balik pembuatan juru bahasa dan kompiler. Saya telah membangun beberapa versi TinyBasic, 1964 (Dartmouth) Basic, dan perluasan saya sendiri pada bahasa-bahasa tersebut sebelum sampai ke titik ini. Proyek terbaru adalah yang saya sebut Open Source Basic ... karena saya tidak bisa memikirkan fitur lain dari bahasa yang akan menarik minat orang. Untuk dapat membuka sumber bahasa dan memahami bagaimana beberapa hal rumit dilakukan (bagaimana pemindaian, penguraian, interpretasi, dan kompilasi dilakukan)

Open Source Basic pertama kali diartikan ke dalam bahasa berbasis stack. Bahasa berbasis tumpukan itu kemudian ditafsirkan dan dieksekusi segera atau diubah menjadi dieksekusi CLR.

Semua pertanyaan saya sampai pada ini:

  • Apa fitur / konstruksi dasar dari bahasa berbasis-Dasar? Saya sudah memiliki konstruksi dasar ini: Penugasan, Ekspresi, Variabel, beberapa fungsi (Acak, ToUpper, ToLower), Looping (untuk dan lakukan-sementara / sampai), If (blok dan jalur tunggal) Keputusan lain, input berbasis konsol (Input ) dan output (Cetak), dan sub-rutin (tanpa parameter, belum).
  • Ketika saya 'selesai' menambahkan konstruksi dasar ke bahasa saya - bagaimana saya harus bercabang? Ke dalam domain apa? Dengan kata lain, arah apa yang harus diambil oleh bahasa dasar sumber terbuka saya setelah semua konstruk generik berfungsi?

Terima kasih atas waktu Anda,

Dominick


3
Saya selalu menginginkan langauge yang memiliki fungsionalitas AOP built-in, yang didukung sintaks.
FrustratedWithFormsDesigner

@Dominick: Bagaimana dengan fungsionalitas LINQ?
Predator

@Frustrated ... AOP - Fungsionalitas Pemrograman Berorientasi Aspek? Bisakah Anda memberi contoh?
Dominick

5
Anda seharusnya tidak mulai membuat bahasa khusus domain dari fitur dasar wajib. Formalkan domain Anda terlebih dahulu, ubah pengetahuan ini menjadi bahasa, dan baru kemudian tambahkan fitur-fitur dasar, jika perlu sama sekali. Kemungkinan Anda bahkan akan berakhir dengan DSL sempurna yang bukan Turing-lengkap, dan itu adalah salah satu properti terbaik dari DSL.
SK-logic

1
Tentunya "goto" adalah fitur wajib dari BASIC?
Perry

Jawaban:


1

Pengalaman saya dengan BASIC awal di Commodore [Vic-20, C-64] memberi saya kesan bahwa nomor baris adalah "fitur" inti dari BASIC. Sepertinya mereka tidak lagi digunakan dalam implementasi modern, yang bagi saya adalah sesuatu yang merugikan karena pandangan utama saya tentang BASIC adalah sebagai bahasa pembelajaran untuk melompat ke sesuatu yang lain.


1

Jelas merupakan upaya yang mulia, tetapi saya pikir Anda telah membalik prioritas Anda.

Kekhawatiran pertama Anda harus menjadi masalah "domain" yang ditargetkan untuk bahasa Anda. Karena itulah pertama-tama disebut "Domain Specific Language". DSL hanya dapat ditoleransi jika kecil, sederhana, dan sangat sempit untuk menyelesaikan serangkaian masalah tertentu seperti pisau melalui mentega.

Setelah Anda mengidentifikasi domain dan bagaimana bahasa Anda akan bekerja di domain, Anda dapat meletakkan konstruk atau fitur tertentu.

Akhirnya, mungkin bermanfaat untuk mempertimbangkan apakah Anda menginginkan DSL internal atau eksternal .


0

Saya telah mengembangkan bahasa scripting untuk aplikasi CAE / FEA dan beberapa fitur yang saya temukan berguna bagi pengguna akhir adalah: Variabel lokal dan global Matriks dengan alokasi dinamis dan ekspansi Fungsi dengan argumen dan dengan meneruskan referensi Struktur (tipe yang ditentukan pengguna) Bersama dengan fitur yang Anda sebutkan sendiri harus membuat bahasa yang cukup kuat untuk memulai. Kemudian Anda akan mengembangkan sesuai permintaan pengguna.


Itu bahasa yang menarik dan sangat spesifik domain (Computer Aided Engineering / Finite Analysis Analysis). Saya bisa melihat mengapa Anda perlu matriks. Semua saran Anda cukup bagus dan saya akan mengingatnya. Terima kasih.
Dominick

0

Ada beberapa fitur yang dapat ditambahkan atau diperluas jika sudah ada, tetapi ...

... Bahasa pemrograman mirip-dasar, sangat mirip dengan bahasa skrip, dan fitur yang banyak dilewatkan atau dimasukkan kemudian, adalah namespace atau modul.

C, C ++, PHP, Visual Basic, dimulai tanpa modul / ruang nama, dan di mana ditambahkan nanti.

Berikutnya bisa berupa subrutin (prosedur atau fungsi yang tidak mengembalikan nilai), dan fungsi (subrutin yang mengembalikan nilai khusus).


0

memahami bagaimana beberapa hal rumit dilakukan (bagaimana pemindaian, penguraian, interpretasi, dan kompilasi dilakukan)

Ada pertanyaan bagus di situs Stack Overflow tentang sumber daya untuk memahami kompiler. Anda juga dapat melihat halaman kelas Compiler saya .

Ketika saya 'selesai' menambahkan konstruksi dasar ke bahasa saya - bagaimana saya harus bercabang?

Mengingat fitur yang sudah Anda bangun, saya sarankan menambahkan tiga tipe data: int, string, boolean. Anda harus melakukan tiga hal, masing-masing sedikit lebih keras dari sebelumnya:

  1. Ubah tata bahasa sehingga Anda dapat menguraikan kata-kata kunci tersebut. Uji.
  2. Buat (atau tambahkan ke tabel simbol yang ada) sehingga Anda bisa memasukkan tipe data bersama dengan nama variabel dan properti lainnya. Kemudian buat sakelar debug agar Anda dapat menguji ini dan melihat tabel simbol.
  3. Periksa jenis yang kompatibel sebelum pembuatan kode untuk MSIL atau selama interpretasi. Uji kasus kesalahan dan non-kesalahan di setiap mode eksekusi untuk semua jenis.

Jika itu berjalan dengan baik, maka saya sarankan bekerja pada lingkup (lokal di sub-rutin vs global). Beri tahu saya jika Anda menginginkan saran tentang itu.

Semoga berhasil. Dan nikmati!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.