为了在 .NET 中为类似Slim的模板语言(用于 ASP)构建解析器,哪种语言更适合 C# 或 F#?(对我来说,F#似乎更科学,更适合此类任务..)
除了语言选择之外,这两种技术中的哪一种适用于解析语言,其中有 2 个空格递增缩进来描述嵌套/块(例如;Slim、Haml 或 SCSS):递归下降解析或递归上升解析?
OAN,.NET 中的 RDP 或 RAP 是否有任何 OOTB 支持?还是像 Java 的parboiled这样的通用、优雅的第三方解析库?
为了在 .NET 中为类似Slim的模板语言(用于 ASP)构建解析器,哪种语言更适合 C# 或 F#?(对我来说,F#似乎更科学,更适合此类任务..)
除了语言选择之外,这两种技术中的哪一种适用于解析语言,其中有 2 个空格递增缩进来描述嵌套/块(例如;Slim、Haml 或 SCSS):递归下降解析或递归上升解析?
OAN,.NET 中的 RDP 或 RAP 是否有任何 OOTB 支持?还是像 Java 的parboiled这样的通用、优雅的第三方解析库?
F# 是编写解析器的绝佳工具。您有多种选择:
活动模式让您可以定义相当简单且可读性强的解析器。我在我的Markdown 解析器中使用了这种方法,我为即将出版的 F#书写了一个章节,该书可作为 PDF免费获得。
解析器组合器是另一种选择。这个想法是您可以从基本构建块构建解析器(例如解析由给定字符分隔的列表等)。有一个名为FParsec的 F# 实现
FsLex 和 FsYacc为您提供编写解析器的标准工具。F# 编译器本身使用的F# PowerPack中有一个新的更高效的实现和一个版本。
F# 本身是一种对缩进敏感的语言,F# 编译器fslex/fsyacc
用于解析。如果您看一下F# 的 parser,缩进敏感性会为这个过程增加额外的复杂性。
如果您对 F# 没有太多经验,那么手动 F# 解析器可能不是一个好主意。我建议使用FParsec。它具有手动解析器的灵活性,并且比fslex/fsyacc
.
您可以从本文中找到 FParsec 中基于缩进的语法的两种实现。