2

我越来越喜欢开发 DSL。我使用 fslex 和 fsyacc 开发了一个带有 F# 的小程序,但错误消息不准确(我也找不到生成更好的方法,似乎没有关于如何处理错误案例的文档)以及事实他们不会充分解析 UNICODE 字符串对我来说是不可接受的。长话短说,我正在寻找可以让开发 DSL 变得非常简单的工具(Visual Studio 工具与我所追求的完全不同),我对解析/AST 生成部分最感兴趣。我看过 ANTLR 并且混合代码和语法定义元语言对我来说看起来很糟糕,所以请不要提及它或在答案中遇到类似问题的解决方案。还有,我在那里见过' s 一些名为 Boo 的语言的东西,但我现在真的对搞乱另一种语言(特别是如果它几乎没有支持的话)不感兴趣,所以这也不适合。任何其他建议都值得赞赏,只要它有良好的文档记录,可以在 .NET 中正常工作,最后但并非最不重要的是不涉及使用动态类型语言或使用 DLR。

4

5 回答 5

2

您想开始与奥斯陆合作。它包括定义 DSL 的工具和定义 DSL 上的语法的工具。语法可以发出 AST 或其他任何东西。

它可以从 DSL 生成的一种输出是对应的 SQL Server 模式。因此,DSL 的实例可以存储在 SQL Server Express(或更高版本)中。

Oslo 是 Microsoft 拥有的更大愿景的一部分,但您可以忽略这一点,直接从“DSL”部分开始。

我建议您开始并积极让 Microsoft 知道您喜欢和不喜欢它的哪些方面。不管你是否知道,你现在已经引起了他们的注意。

于 2009-05-10T21:33:00.377 回答
2

您可能仍想查看 Boo 的源代码以了解它们是如何工作的。他们还使用 ANTLR 来生成解析器。您不需要将任何代码与 ANTLR 语法混合在一起——只要它是 LL(*) 语言,它就可以作为完全描述性的有用。

于 2009-05-10T16:26:57.780 回答
2

也许你可以试试奥斯陆。我个人还没有使用它,但是这些例子看起来很有趣。

“Oslo”包括: 帮助人们以丰富和可视化的方式定义模型并与之交互的工具 帮助人们创建和使用文本域特定语言和数据模型的语言 使模型可用于工具和平台的关系存储库成分

是一个一般概述!

于 2009-05-10T16:18:05.703 回答
1

Irony - 位于Irony@CodePlex对您来说可能是一个很好的解决方案 - 您可以利用 .NET 语言的内置功能构建您的语法,而不是尝试单独构建BNF语法文件。

于 2009-10-26T16:33:52.123 回答
0

用几乎简单的英语创建 DSL 的最简单方法: 为 Java 或 C# 创建自己的 DSL(第 4 部分):添加语义层

于 2009-10-11T14:30:10.593 回答