Bison: Menerapkan kode setelah aturan

Hai teman-teman, saya ingin bertanya kepada seseorang yang menerapkan bahasa pada bison.

Berapa lama waktu yang dibutuhkan untuk mengimplementasikan sisi kode setelah Anda menyelesaikan semua aturan? Saya tidak tahu apakah saya harus melakukannya atau tidak. Saat ini saya berada di 600 LoC (menghitung bagian tengah dari %%)

Berapa lama waktu yang dibutuhkan untuk mengimplementasikan kode tersebut? Saya tahu ini akan berbeda-beda, tetapi berapa lama waktu yang Anda perlukan untuk menerapkannya?

Apakah akan memakan waktu berhari-hari? bulan? atau berbulan-bulan/tahun? Jika dua minggu atau kurang, saya boleh melanjutkan dan melakukannya. Jika lebih dari 2 bulan saya tidak akan mempertimbangkannya (setidaknya tidak untuk saat ini).

Hanya meminta perkiraan. Saya juga perlu mempertimbangkan kode yang didukung. Mengonversi bahasa ke C++ atau C# seharusnya merupakan hal yang sepele. Bagaimanapun saya ingin perkiraan untuk mendapatkan gambaran kasar.


person Community    schedule 11.09.2010    source sumber
comment
Pertanyaan ini sepenuhnya bergantung pada semantik tata bahasa Anda. Saya menemukan hitungan 600 relatif tinggi untuk bahasa genap dengan tingkat kompleksitas C. Saya curiga Anda tidak menghasilkan representasi perantara yang efisien.   -  person msw    schedule 11.09.2010
comment
Untuk bahasa yang didefinisikan dengan buruk, bahkan tata bahasa bison yang didefinisikan dengan baik bisa dengan mudah menjadi › 1KLoC, menurut saya.   -  person Johannes Schaub - litb    schedule 11.09.2010
comment
@msw: Ini setara dengan C++ namun penghitungannya menyertakan spasi karena saya tidak punya cara lain untuk menghitung baris selain dengan tangan.   -  person    schedule 12.09.2010
comment
litb: Itu sebabnya saya ingin tahu dari orang-orang yang telah melakukannya. Sepertinya saya hanya memerlukan beberapa fungsi utama dan sisanya hanya memformat params dengan cara/sintaks yang berbeda untuk memanggil fungsi utama tersebut. Saya tidak tahu apakah itu akan panjang atau tidak. Juga, ada banyak spasi   -  person    schedule 12.09.2010


Jawaban (2)


Saya bisa memberi Anda jawaban yang jauh lebih baik jika saya tahu seperti apa kode Anda. Mengingat 600 baris (hanya untuk bison, bukan flex?), saya ragu Anda bisa membuatnya berfungsi dalam dua minggu. Anda mungkin bisa mengetikkan sesuatu saat itu, tapi saya ragu Anda bisa "berfungsi penuh" dalam waktu satu bulan. Hal ini sebagian besar disebabkan oleh "ini akan memakan waktu lebih lama karena ini adalah pertama kalinya Anda" dan "hal besar pertama yang Anda tulis dalam suatu bahasa mungkin memerlukan refactor penuh, karena Anda tidak merancangnya agar berfungsi dengan baik dengan bahasa tersebut ."

Jika Anda meletakkan bagian dari kode Anda (dimulai dengan lexer) untuk kami lihat, menanyakan apakah itu merupakan implementasi yang baik dari teknik yang diberikan (AST, penguraian komentar, kutipan string atau pelolosan, apa pun), Anda mungkin bisa untuk turunkan itu ke ukuran yang lebih mudah dikelola sebelum Anda mulai menggantungkan kode pada token.

person Mike DeSimone    schedule 12.09.2010
comment
+1 Lexer juga binatang buas. ATM 240 baris apakah Anda punya komentar tentang ukuran lexer itu? - person ; 12.09.2010
comment
Sekali lagi, Anda tidak dapat mengatakannya tanpa mengetahui apa yang sedang Anda coba lakukan. Sebuah lexer untuk SQL bisa mendapatkan hasil sebesar itu dari semua kata kunci. - person Mike DeSimone; 12.09.2010
comment
Bahasa saya sendiri mirip dengan C++. Ia memiliki templat, operator membebani semua yang dimiliki C++ tetapi sintaksisnya berbeda (tidak ada konflik. Sintaks yang berbeda diperlukan untuk melakukan itu) dan beberapa fitur baru. - person ; 13.09.2010
comment
Maka saya berani bertaruh dalam dua bulan, ditambah berapa lama waktu yang Anda perlukan untuk mempelajari AST dan mungkin RTL. Anda mungkin bisa menjalankan sesuatu yang mendasar dalam beberapa minggu, yang berfungsi dengan beberapa file masukan, namun sebagian besar pengkodean Anda perlu menangani kesalahan masukan dan cara menanganinya dengan baik. Itu memakan waktu lama, karena selalu ada kasus yang Anda lupa akan ditemukan oleh pengguna. Bahkan jika yang Anda lakukan hanyalah menerjemahkan ke C++ atau C# (waspadai Efek Platform Dalam dan Penemuan Kembali Roda), Anda masih harus menangkap semuanya dan memastikan bahwa keluaran Anda bebas dari kesalahan. - person Mike DeSimone; 13.09.2010

Anda terlalu malu dengan apa yang Anda coba terapkan.

Namun saya akan membuat pernyataan kategoris: Jika Anda mencoba mengimplementasikan suatu bahasa dengan langkah-langkah proksi yang Anda kutip dan bukan perancang bahasa yang berpengalaman (misalnya, setidaknya satu implementasi yang berhasil, baru, berfungsi, dapat digunakan, dan digunakan), Anda adalah di atas kepalamu.

Anda tidak memiliki pengalaman untuk mengubah ide bahasa sederhana Anda menjadi bentuk yang tepat atau, Anda memiliki bahasa target yang sangat rumit sehingga tidak dapat digunakan. Artinya, jika penyusun memahaminya sulit, manusia tidak akan pernah bisa memahaminya.

Rekomendasi saya: berhenti, mundur selangkah, pikirkan kembali apa yang ingin Anda capai, jelajahi implementasi lain, lihat apakah Anda benar-benar memiliki sesuatu yang tidak dapat diungkapkan dalam bahasa lain. Dan jika Anda telah menyelesaikan semua pekerjaan rumah itu dan ternyata Anda masih ingin mengembangkan bahasa Anda, setidaknya Anda akan memiliki perspektif yang belum pernah Anda dapatkan sebelumnya.

Desain bahasa sangat-sangat sulit dilakukan dengan baik.

person msw    schedule 12.09.2010
comment
Ini bagus dan semuanya tetapi semua aturan sudah selesai dan saya hanya ingin tahu apakah saya harus mengambil risiko dan mengimplementasikan kode atau membiarkannya hanya memeriksa sintaksis. Saya mencoba versi ringan hanya untuk memahami cara mengimplementasikan sesuatu dengan benar. Saya memiliki banyak core dump di awal. Saya memahaminya sekarang. Tapi bagaimanapun juga, jadi saya bertanya-tanya apakah ini bisa dilakukan penuh waktu dalam sebulan (bukan 2 minggu) atau tidak. - person ; 12.09.2010
comment
Jika Anda tidak memberi tahu kami bahasanya, atau memberi petunjuk tentang bahasanya, kami tidak mendapat apa-apa. - person msw; 12.09.2010
comment
ini milik saya yang mirip dengan C++. Ia memiliki templat, operator membebani semua yang dimiliki C++ tetapi sintaksisnya berbeda (tidak ada konflik. Sintaks yang berbeda diperlukan untuk melakukan itu) dan beberapa fitur baru. - person ; 13.09.2010