gpt4 book ai didi

compiler-construction - 构建有效的外部 DSL

转载 作者:行者123 更新时间:2023-12-04 01:36:03 25 4
gpt4 key购买 nike

有什么工具可以让我构建一个真实的、诚实的外部 DSL。不,我不是在谈论滥用 Ruby、Boo、XML 或其他现有语言或语法,我的意思是真正的外部 DSL——我自己的语言,用于我自己的目的。

我知道有一些语言工作台正在开发中,我听说过诸如“反讽”之类的 .NET 之类的东西。而且,当然,还有 ANTLR、Lex/Yaac 等,但我担心这些对于我想要做的来说太复杂了。

请谈谈您可能使用过或听说过的 DSL 构建器工具,以及您对它如何提供帮助及其缺点的印象。

最佳答案

我已经用 Boo、Irony.NET 和一个名为 Grammatica 的工具包编写了 DSL。你说解析器-生成器太复杂了,但你的判断可能太草率了,事实上,一旦你克服了一个小的学习曲线,它们就很容易使用,并且打开了一个很容易覆盖的广阔的可能性世界努力。我发现学习为大多数解析器生成器编写语法所需的符号有点类似于学习正则表达式——你必须稍微弯曲你的头脑才能让它们进入,但返回是显着的。

我的观点是:如果您的目标语言足够简单,可以由一个愚蠢的视觉设计师处理,那么使用解析器生成器为其编写语法应该非常容易。

如果您的目标 DSL 足够复杂,以至于您需要费力地编写语法,那么简化的可视化工具无论如何都不会削减芥末,您最终将不得不学习编写语法。

不过,从长远来看,我同意内部与外部 DSL 的关系。我在 Boo 中编写了一个内部 DSL,并且不得不修改我的 DSL 语法以使其工作,这总是感觉像一个黑客。使用 Irony.NET 或 ANTLR 的相同语法将同样容易实现,而且具有更大的灵活性。

我有一个 blog post讨论一些选择。这篇文章主要围绕为运行时表达式评估编写 DSL,但工具都是一样的。

我对 Irony.NET 的体验都是积极的,并且有几种使用它实现的引用语言,这是一个很好的起点。如果你的语言很简单,上手并运行起来绝对不复杂。 CodeProject 上还有一个名为 TinyParser 的库 - 这个库非常有趣,因为它将解析器生成为纯源代码,这意味着您的最终产品完全没有任何第三方引用。不过我自己没用过。

关于compiler-construction - 构建有效的外部 DSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/101914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com