Có điều gì trong .NET cho phép tôi xác định ngữ pháp và tạo ngôn ngữ lập trình không?


18

Tôi có một khóa học trong đó các proffesor đã yêu cầu chúng tôi tạo DSL cho một dự án cuối cùng của chúng tôi. Ông đã trình bày cho chúng tôi trong các khóa học đầu tiên xText với Eclipse. Đây là một khóa học mới, tôi vẫn còn hơi mơ hồ về ý nghĩa của Ngôn ngữ cụ thể miền.

Đây là cách hiểu hiện tại của tôi: một ngôn ngữ cụ thể miền là ngôn ngữ được tạo ra cho các vấn đề cụ thể trong phát triển phần mềm. Ví dụ về DSL là PHP, SQL, JavaScript và ngược lại là các ngôn ngữ như Java, C #, C ++, Ruby, v.v.

Xin vui lòng sửa tôi nếu tôi sai.

Điều tôi muốn biết: có công cụ nào cho .NET / Visual Studio tương tự Xtext không, cho phép tôi xác định ngữ pháp và được phép tạo ngôn ngữ lập trình dựa trên đó với sơ đồ hoạt động?


6
PHP và Javascript không thực sự là DSL. DSL là ngôn ngữ giải quyết một vấn đề cụ thể, như các dịch vụ y tế. SQL là một DSL vì nó đặc trưng cho miền vấn đề khi làm việc với các tập dữ liệu quan hệ. Xem en.wikipedia.org/wiki/Domain-specific_lingu để biết thêm thông tin.
Robert Harvey

Có lẽ là gì?
cnd

Câu trả lời:


11

Cách dễ nhất để đi là một giao diện trôi chảy . Điều này không yêu cầu công cụ nào cả, và cung cấp cho bạn sự hỗ trợ IntelliSense tuyệt vời, nhưng bạn vẫn phải viết mọi thứ theo cách .NET, chẳng hạn như

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

Ngoài ra, bạn có thể viết DSL đẹp trong Boo . Có một cuốn sách về chủ đề đó.


10

Bạn có thể thử ANTLR (hoặc Công cụ khác để nhận dạng ngôn ngữ) một trình tạo trình phân tích cú pháp trong số các trình tạo khác có sẵn cho dotnet. Trong cộng đồng, bạn có thể tìm thấy các định nghĩa cho sql, c # và nhiều ngôn ngữ khác.

Theo google cũng có ide hỗ trợ:


Cập nhật: ANTLR4 chỉ phát ra Java, trong khi ANTLR3 vẫn hỗ trợ C #, nhưng nó sẽ không thấy bất kỳ cập nhật lớn nào.
Stefano Sanfilippo

3

Câu hỏi đầu tiên của bạn - ngôn ngữ cụ thể của tên miền là gì ... bởi vì ngôn ngữ này quá lớn để phù hợp với một nhận xét.

Ngôn ngữ cụ thể của miền là ngôn ngữ được thiết kế để hoạt động trong một miền có vấn đề cụ thể. Ví dụ: trong công cụ Unreal (được sử dụng cho các game bắn súng góc nhìn thứ nhất), có một ngôn ngữ cụ thể theo tên miền là UnrealScript cho phép một người sửa đổi hành vi của công cụ Unreal. Ngôn ngữ này được thiết kế để giải quyết các vấn đề chung nhưng thay vào đó bị hạn chế trong miền cụ thể của nó. Redcode (đối với corewars) sẽ là một ngôn ngữ cụ thể miền khác. Ngôn ngữ trong Context Free Art dành riêng cho miền của nó.

Ý tưởng là với một ngôn ngữ cụ thể của miền, người ta có thể tạo ra một DSL có bản đồ chặt chẽ vấn đề trong tay. Tại thời điểm này, việc lập trình trong DLS dễ dàng hơn so với lập trình bằng ngôn ngữ chung ngay cả với các thư viện được thêm vào để xử lý miền có vấn đề.


Đối với câu hỏi thứ hai của bạn - các công cụ trong C # ... Tôi không biết C # và do đó không biết rõ về các công cụ đó. Điều đó nói rằng, trở lại khi tôi học lớp biên dịch ở trường đại học, hai trong số các công cụ đã được sử dụng (và tôi đã sử dụng) là lex và yacc. Kết thúc tại Stack Overflow ... Lex / Yacc cho C #?



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.