2

我有一个非常简单的 DSL,需要在 .Net 平台上解析。我对解析器不是很有经验,我一直在查看使用 F#(fsLex、fsYacc、FParsec)的示例。我对 F# 不是很熟悉,但对 Workflow 和 LINQ 有一些经验。

鉴于 DSL 的简单性,我可以使用 LINQ 来实现词法分析器。工作流(我将使用 V4)对实现语法很有吸引力,因为我更熟悉它,鉴于它的图形性质,它更容易向其他人解释,并且它受到 Microsoft 的支持,并且可能会继续发展。

但是,如果我的 DSL 变得更加复杂,我可以将 WF 实现想象成一个嵌套的活动地狱,并且一个基于 LINQ 的词法分析器也会以同样的方式进行。那时学习 F# 并使用其中一种 F# 工具会更有意义。

我想知道其他人是否比较了 WF 和 F# 解析工具来实现一个简单的 DSL 解释器以及可能的结论。

4

1 回答 1

4

如果不知道更多关于 DSL 应该做什么以及它在未来可能会变得多么复杂,就很难给出答案。如果您的 DSL 是关于工作流的,那么 WF 似乎是一个非常合乎逻辑的选择来存储您的解析结果。

如果您的语言不是太复杂,那么 LINQ 或手动处理的小解析器可以很好地完成。保持简单并使用同事知道的工具是很好的。

但是,当您的语言变得更加复杂时,这种方法往往会很快分崩离析。但从好的方面来说,你可以切换你的解析器。不要解决你可能永远不会遇到的问题。

就我个人而言,我真的很喜欢 FParsec 的解析。它需要一些关于 F# 的知识,但是当您了解它时,它对于将文本转换为 AST 非常强大,而且它非常精简,因为没有将您的 EBNF 变成乱码的“神奇步骤”,您可以看看它是如何工作的并调整它。

当您没有时间深入研究 F# 和 FParsec 时,还有Irony,它类似于 FParsec,然后是 C#。

这就是你告诉我们的内容,如果你有任何具体问题,请告诉我们。

Rgds GJ

于 2011-10-03T12:09:34.123 回答