Apakah ada sesuatu di .NET yang memungkinkan saya untuk mendefinisikan tata bahasa dan menghasilkan bahasa pemrograman?

18

Saya memiliki kursus di mana profesor telah meminta kami untuk membuat DSL untuk proyek akhir kami. Dia memberi kami kursus xText pertama dengan Eclipse. Ini menjadi kursus baru, saya masih agak bingung tentang apa yang dimaksud dengan Bahasa Khusus Domain.

Ini adalah pemahaman saya saat ini: bahasa khusus domain adalah bahasa yang dibuat untuk masalah khusus dalam pengembangan perangkat lunak. Contoh DSL adalah PHP, SQL, JavaScript dan sebaliknya adalah bahasa seperti Java, C #, C ++, Ruby dll.

Silakan mengoreksi saya jika saya salah.

Yang ingin saya ketahui: apakah ada alat untuk .NET / Visual Studio yang mirip dengan Xtext, yang memungkinkan saya untuk mendefinisikan tata bahasa dan diizinkan untuk menghasilkan bahasa pemrograman berdasarkan itu dengan diagram aktivitas?

pengguna1525474
sumber
6
PHP dan Javascript sebenarnya bukan DSL. DSL adalah bahasa yang membahas domain masalah tertentu, seperti layanan medis. SQL adalah DSL karena itu khusus untuk domain masalah bekerja dengan set data relasional. Lihat en.wikipedia.org/wiki/Domain-specific_language untuk informasi lebih lanjut.
Robert Harvey
Nemerle mungkin?
cnd

Jawaban:

11

Cara termudah untuk pergi adalah antarmuka yang lancar . Ini tidak memerlukan alat sama sekali, dan memberi Anda dukungan IntelliSense yang hebat, tetapi Anda masih harus menulis sesuatu dengan cara .NET-agak, seperti

 Mix.Paint(Color.Green).With.Paint(Color.Red);

Atau, Anda dapat menulis DSL indah di Boo . Ada seluruh buku tentang hal itu.

pdr
sumber
10

Anda dapat mencoba ANTLR (atau Alat Lain untuk Pengenalan Bahasa) generator parser yang antara lain tersedia untuk dotnet. Di komunitas Anda dapat menemukan definisi untuk sql, c # dan banyak bahasa lainnya.

Menurut google ada juga dukungan ide:

k3b
sumber
Pembaruan: ANTLR4 hanya memancarkan Java, sementara ANTLR3 masih mendukung C #, tetapi tidak akan melihat pembaruan besar apa pun.
Stefano Sanfilippo
3

Pertanyaan pertama Anda - apa bahasa spesifik domain ... karena ini terlalu besar untuk ditampung dalam komentar.

Bahasa khusus domain adalah bahasa yang dirancang untuk bekerja dalam domain masalah tertentu. Misalnya, dalam mesin Unreal (digunakan untuk penembak orang pertama), ada bahasa khusus domain yang disebut UnrealScript yang memungkinkan seseorang untuk memodifikasi perilaku mesin Unreal. Bahasa ini dirancang untuk memecahkan masalah umum tetapi lebih terbatas pada domain spesifiknya. Redcode (untuk corewars) akan menjadi bahasa khusus domain lain. Bahasa dalam Context Free Art khusus untuk domainnya.

Idenya adalah bahwa dengan bahasa domain tertentu, seseorang dapat membuat DSL yang memetakan masalah yang ada. Pada titik ini, lebih mudah untuk memprogram dalam DLS daripada memprogram dalam bahasa umum bahkan dengan pustaka yang ditambahkan untuk menangani domain masalah.


Adapun pertanyaan kedua Anda - alat di C # ... Saya tidak tahu C # dan karenanya tidak tahu alat itu dengan baik. Yang mengatakan, kembali ketika saya mengambil kelas kompiler di perguruan tinggi dua alat yang digunakan (dan saya sejak itu digunakan) adalah lex dan yacc. Lebih dari pada Stack Overflow ... Lex / Yacc untuk C #?

Komunitas
sumber