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
sumber
Jawaban:
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.
sumber
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 .
sumber
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.
sumber
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).
sumber
Ada pertanyaan bagus di situs Stack Overflow tentang sumber daya untuk memahami kompiler. Anda juga dapat melihat halaman kelas Compiler saya .
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:
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!
sumber