我需要在.Net平台上解析一个非常简单的DSL。对解析器不是很有经验,我一直在研究使用F#(fsLex,fsYacc,FParsec)的例子。我对F#并不熟悉,但确实对Workflow和LINQ有一些经验。
鉴于DSL的简单性,我可以使用LINQ来实现词法分析器。工作流程(我将使用V4)很有吸引力来实现语法,因为我对它更熟悉,考虑到它的图形性质,它更容易向其他人解释,并且它得到了Microsoft的支持并且将继续发展,大概是。
然而,如果我的DSL变得更加复杂,我可以将WF实现成像为嵌套的活动和基于LINQ的词法分析器。那时学习F#并使用其中一个F#工具会更有意义。
我想知道其他人是否比较了WF和F#解析工具来实现一个简单的DSL解释器以及结论可能是什么。 / p>
答案 0 :(得分:4)
如果不了解DSL应该做什么以及未来可能会有多复杂,那么很难给出答案。如果您的DSL是关于工作流程的,那么WF似乎是将解析结果存储在其中的非常合理的选择。
如果您的语言不是太复杂,那么LINQ或手动的小解析器就可以做得很好。保持简单并使用同事知道的工具是很好的。
当你的语言变得更复杂时,这种方法很快就会分崩离析。但从好的方面来说,您可以随后切换解析器。不要解决你可能永远不会遇到的问题。
我个人非常喜欢FParsec进行解析。它需要一些关于F#的知识,但当你掌握它时,将文本转换为AST是非常强大的,并且它非常精简,没有“神奇的步骤”将你的EBNF变成乱码,你可以看看它是如何工作的并调整它。
当你没有时间潜入F#和FParsec时,还有Irony,就像FParsec,然后是C#。
这就是我所说的,如果您有任何具体问题请告诉我们。
Rgds GJ