我有一个非常简单的领域特定语言,我需要在.Net平台上解析。由于不太熟悉解析器,我一直在查看使用F# (fsLex、fsYacc、FParsec)的示例。我对F#不是很熟悉,但我确实有一些工作流和链接的经验。
考虑到DSL的简单性,我可以使用LINQ来实现词法分析器。工作流(我将使用V4)是实现语法的诱人之处,因为我更熟悉它,由于它的图形化性质,它更容易向其他人解释,并且它得到了微软的支持,并且可能会继续发展。
但是,如果我的DSL变得更复杂,我可以想象WF实现变成一个嵌套的活动地狱,基于LINQ的词法分析器也是如此。在这一点上,学习F#并使用F#工具之一会更有意义。
我想知道是否其他人已经比较了WF和F#解析工具来实现一个简单的领域特定语言解释器,可能的结论是什么。
发布于 2011-10-03 20:09:34
如果不知道DSL应该做什么以及它将来可能会变得多么复杂,就很难给出答案。如果你的DSL是关于工作流的,那么WF似乎是一个非常合乎逻辑的选择来存储你的解析结果。
如果您的语言不是太复杂,那么LINQ或一个手写的小解析器就可以做得很好。保持简单,并使用你的同事知道的工具是很好的。
但是,当您的语言变得更加复杂时,这种方法往往很快就会失效。但从好的方面来看,你可以直接切换解析器。不要解决你可能永远不会遇到的问题。
就我个人而言,我真的很喜欢用FParsec进行解析。它需要一些关于F#的知识,但是当你想明白它的时候,它对于将文本转换成AST来说是如此的强大,而且它非常简单,因为没有什么‘神奇的步骤’可以把你的EBNF变成胡言乱语的代码,你可以看到它是如何工作的,并对其进行调整。
当您没有时间深入研究F#和FParsec时,还有Irony,它类似于FParsec,但它针对的是C#。
这就是你告诉我们的,如果你有任何具体的问题,请让我们知道。
Rgds GJ
https://stackoverflow.com/questions/7629321
复制相似问题