如何在C#上定义DSL

时间:2009-09-16 21:49:52

标签: c# dsl

对于一个小小的夜间项目,我想编写一个可以在.NET应用程序中使用的验证组件,对对象,输入参数和后置条件进行常规和繁琐的验证。

我的第一个想法是将所有这些验证设置逻辑转储到XML配置文件中,并为希望在代码中拥有它的人们提供一个液体界面。

因为我想提供实际可用的东西,所以我想提供一种专门的DSL(领域特定语言)。问题是我应该使用什么工具来做这件事?

我考虑过使用正则表达式手动解析它。但我个人希望有更多可用的东西。

那么你会建议什么?

8 个答案:

答案 0 :(得分:5)

听起来你在谈论实施one of .Net 4.0's features, code contracts

所以我猜我推荐的工具是VS.Net 2010。

答案 1 :(得分:1)

如果您正在专注于DSL,请查看ANTLR项目。我们过去在我公司很成功地使用过它。

答案 2 :(得分:0)

DSl的问题在于它们很少孤立地有效。为了用于编写真实软件,您确实需要能够将DSL嵌入到宿主语言中。比较,例如,Linq的工作方式与直接的SQL。另一个很好的例子是VB中的XML文字特征。两者都允许您在通用PL中编写实际代码,并使用更简单的声明DSL代码进行编织。

结果比独立的SQL或简单的XML编辑器更强大。

不幸的是,不幸的是,C#和VB都没有提供任何元编程功能,因此对于主流.net开发者来说,唯一的方法是构建自己的语言。如果您只是为了好玩而做的事情,那么您可以修改单声道C#编译器,将您感兴趣的功能添加到该语言中。另一种选择可能是尝试红宝石。它具有灵活的语法,让你可以逃脱很多疯狂。然而,Personaly,我更喜欢被黑客攻击的C#方法。

答案 3 :(得分:0)

可能想查看Building Domain Specific Languages in Boo(Boo是一种CLR语言,概念应该延续到C#)。示例项目是Simple State Machine

答案 4 :(得分:0)

看一下来自Microsoft的Oslo,不确定它是否符合您的要求,但我知道您可以构建DSL解析器并指定语法并让它生成可以根据语法解析数据的类库

“M”语言的更多细节以及如何使用它是here

答案 5 :(得分:0)

为什么要走这么远?开始使用泛型和流畅的界面。从简单开始,通过一些生产工作。如果摩擦力太大而处理流畅的界面,那么请使用DSL。

答案 6 :(得分:0)

您可以尝试使用Visual Studio的DSL工具。

答案 7 :(得分:0)

你应该在http://irony.codeplex.com/

看看反讽项目