C# 如何在C上定义DSL#

C# 如何在C上定义DSL#,c#,dsl,C#,Dsl,对于一个小型夜间项目,我想编写一个验证组件,该组件可用于.NET应用程序中,用于对对象、输入参数和post条件进行常规且繁琐的验证 我的第一个想法是将所有这些验证设置逻辑转储到一个XML配置文件中,并为希望在代码中使用它的人提供一个流动接口 因为我想提供一些实际可用的东西,所以我考虑提供一种专门的DSL(领域特定语言)。问题是我应该使用什么工具来实现这一点 我想用正则表达式手工解析它。但就我个人而言,我想要一些更有用的东西 那么你有什么建议呢?听起来你在谈论实施 因此,我想我推荐的工具应该是VS

对于一个小型夜间项目,我想编写一个验证组件,该组件可用于.NET应用程序中,用于对对象、输入参数和post条件进行常规且繁琐的验证

我的第一个想法是将所有这些验证设置逻辑转储到一个XML配置文件中,并为希望在代码中使用它的人提供一个流动接口

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

我想用正则表达式手工解析它。但就我个人而言,我想要一些更有用的东西


那么你有什么建议呢?

听起来你在谈论实施


因此,我想我推荐的工具应该是VS.NET2010。

如果您特别关注DSL,请查看该项目。过去,我们在我的公司非常成功地使用了它。

DSl的问题是,它们很少单独有效。为了有助于编写真正的软件,您确实需要能够将DSL嵌入宿主语言中。例如,比较Linq与纯SQL的工作方式。另一个很好的例子是VB中的XML文本特性。两者都允许您在通用PL中编写真实代码,并将其与更简单的去极化DSL代码交织在一起

其结果是比独立的SQL或简单的XML编辑器功能强大得多

不幸的是,这样做的缺点是C#和VB都不提供任何元编程功能,因此主流.net开发人员实现这一点的唯一方法是构建自己的语言。如果这只是为了好玩,您可以修改mono C#编译器,将您感兴趣的功能添加到该语言中。另一种选择可能是尝试ruby。它有一个灵活的语法,让你摆脱了很多疯狂。然而,就个人而言,我更喜欢黑客C#方法。

可能想看看(Boo是一种CLR语言,概念应该延续到C#)。一个示例项目是。

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


关于“M”语言以及如何使用它的更多细节,请参见

为什么要走这么远?首先使用泛型和流畅的界面。从简单开始,通过一些生产来完成。如果在处理流畅的界面时摩擦太大,那么请考虑使用DSL。

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

您应该看看Irony project,该项目位于

看起来不错。但是我需要一些可以作为类库一部分的东西。据我所见,这需要java。但好的是,不幸的是,我的ANTLR C#library有一个未解决的错误,它无法使用生成的解析器:(“C#和VB都不提供任何元编程功能”。啊,但这些不是唯一的clr语言。看看boo或nemerle。因此,使用SQL或XSLT的人并不是在编写“真正的软件”,他们的代码是“很少有效”?您缺少的一点是“孤立”。大多数情况下,这些语言都嵌入到另一种语言(Java、C#、VB、Ruby等)中。通常它们被嵌入到API处理的字符串中。然而,这远远不理想。Linq提供了比“纯ADO.NET”更有效的开发体验是的。重点是更喜欢DSL与主机的深度集成,而不是隔离。问题不是DSL,而是隔离的DSL。集成=好,隔离=坏