我越来越喜欢开发DSL了。我使用fslex和fsyacc开发了一个很小的F#但是错误消息不准确(我也找不到生成更好的方法,似乎没有关于如何处理错误情况的文档)以及他们不会充分解析UNICODE字符串是我不能接受的。 简而言之,我正在寻找工具使得开发DSL变得非常简单(Visual Studio工具实际上就像我之前的那样)并且我对解析/ AST生成部分最感兴趣。我看过ANTLR,混合代码和语法定义元语言看起来很糟糕,所以请不要在答案中提及它或遇到类似问题的解决方案。另外,我已经看到有一些名为Boo的语言的东西,但我现在真的不想用另一种语言搞乱(特别是如果它几乎没有支持),所以这也不合适。任何其他建议都值得赞赏,只要它有良好的文档记录,适用于.NET,最后但并非最不重要的是不涉及使用动态类型语言或使用DLR。
答案 0 :(得分:2)
也许你可以试试Oslo。就个人而言,我还没有使用它,但这些例子看起来很有趣。
“奥斯陆”包括: 一种工具,可以帮助人们以丰富和可视的方式定义模型并与模型交互 一种帮助人们创建和使用特定于文本域的语言和数据模型的语言 一个关系存储库,使模型可用于工具和平台组件
Here是一种总体概述!
答案 1 :(得分:2)
你可能仍然想看看Boo的源代码,看看他们是如何做的。他们还使用ANTLR生成解析器。您不需要将任何代码与ANTLR语法混合使用 - 只要它是LL(*)语言,它就可以用作完全描述性的。
答案 2 :(得分:2)
您想开始与奥斯陆合作。它包括定义DSL的工具和用于在DSL上定义语法的工具。语法可以发出AST或其他任何东西。
它可以从DSL生成的一种输出是相应的SQL Server模式。因此,DSL的实例可以存储在SQL Server Express(或更高版本)中。
奥斯陆是微软拥有的更大愿景的一部分,但你可以忽略它并开始使用“DSL”部分。
我建议你开始并积极地让微软知道你喜欢什么,不喜欢它。无论你是否知道,你现在都已经引起了他们的注意。
答案 3 :(得分:1)
反讽 - 位于Irony@CodePlex可能是一个很好的解决方案 - 您可以使用.NET语言的内置功能构建语法,而不是单独尝试构建BNF语法文件。 / p>
答案 4 :(得分:0)
以简单的英语创建DSL的最简单方法: Create your own DSL for Java or C# (part 4): adding a Semantic Layer