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

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

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

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

那么你会建议什么?

有帮助吗?

解决方案

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

其他提示

听起来你正在谈论实施 .Net 4.0的功能之一,代码合同

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

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

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

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

可能想查看在Boo中构建领域特定语言(Boo是一种CLR语言,概念应该延续到C#)。一个示例项目是简单状态机

查看Microsoft的奥斯陆,不知道是否确实如此你想要什么,但我知道你可以构建DSL解析器并指定语法,并让它生成可以根据语法解析数据的类库。

“M”的更多细节。语言及其使用方法是此处

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

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

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

上查看Irony项目
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top