为了构建Slim的解析器 - 就像.NET中的模板语言(用于ASP),哪种语言更适合C#或F#? (对我而言,F#似乎更科学并且适合此类任务。)
除语言选择外,两种技术中的哪一种适用于解析语言,其中有2空间递增缩进来描述嵌套/块(例如; Slim,Haml或SCSS):递归下降解析或递归上升解析?
OAN,在.NET中是否有对RDP或RAP的OOTB支持?或者是一个通用的,优雅的第三方解析库,如Java的parboiled?
答案 0 :(得分:6)
F#是编写解析器的绝佳工具。您有多种选择:
活动模式允许您定义非常简单的解析器,这些解析器非常易读。我在Markdown parser中使用了这种方法,我为an upcoming F# book写了一个关于此问题的章节,该章节免费提供as PDF。
Parser combinators 是另一种选择。我们的想法是,您可以从基本构建块构建解析器(例如解析由给定字符分隔的列表等)。有一个名为FParsec
FsLex和FsYacc 为您提供编写解析器的标准工具。 a new more efficient implementation中还有F# PowerPack以及F#编译器本身使用的版本。
答案 1 :(得分:3)
F#本身是一种缩进敏感语言,F#编译器使用fslex/fsyacc
进行解析。如果你看一下F#'s parser,缩进敏感性会给这个过程带来额外的复杂性。
如果您对F#没有太多经验,手动F#解析器可能不是一个好主意。我建议使用FParsec。它具有手动解析器的灵活性,使用起来比fslex/fsyacc
简单得多。
您可以在this article的FParsec中找到两种基于缩进的语法的实现。
答案 2 :(得分:1)
要在C#.NET中构建自制解析器,您可能需要查看Microsoft Reactive Extension(Rx)的Rxx扩展名。
另外,请查看此列表以进行创建。 parsers in C#