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

有帮助吗?

解决方案

您要开始工作奥斯陆。它包括的工具来定义DSL和工具用于定义在DSL语法。文法可以发出AST或其他任何东西。

一类输出的它可以从DSL生成是IA对应的SQL Server架构。因此,DSL的情况下可以被存储在SQL Server Express(或以上)。

奥斯陆是一个更大的愿景的一部分,微软有,但你可以忽略,只是开始使用“DSL”的部分。

我建议你开始和微软让知道你喜欢什么和不喜欢它活跃起来。你已经得到了他们的重视,现在,无论你知道与否。

其他提示

也许你可以给奥斯陆的一个尝试。我个人还没有使用它,但实例看着挺有意思的。

  

“奥斯陆” 组成:   一种工具,帮助人们确定,并与车型丰富的视觉交互方式   它帮助语言的人们创建和使用文本域特定语言和数据模型   一个关系信息库,使提供给这两个工具的模型和平台组件

这里是一种一般概述的!

您可能仍然想看看嘘的源代码,看看他们是如何做到的事情。他们还利用ANTLR生成解析器。你不需要在ANTLR混合任何代码的语法,它可以作为完全的描述是有用的,只要它是一个LL(*)的langauge。

反讽 - 位于反讽@ CodePlex上可能是你一个很好的解决方案 - 你可以建立你的语法利用而不是试图建立 BNF 语法单独文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top