C# 或 F#,用于解析类似 Slim 的缩进意识语言

本文关键字:Slim 缩进 语言 意识 用于 | 更新日期: 2023-09-27 18:33:52

为了在.NET中为类似Slim的模板语言(用于ASP)构建解析器,哪种语言更适合C#或F#?(对我来说,F#似乎更科学,更适合这样的任务。

除了语言选择之外,这两种技术中的哪一种适用于解析语言,其中有 2 空格递增缩进来描述嵌套/块(例如;Slim、Haml 或 SCSS):递归下降解析还是递归上升解析

OAN,在.NET中是否有对RDP或RAP的OOTB支持?还是像 Java 的 parboiled 这样的通用、优雅的第三方解析库?

C# 或 F#,用于解析类似 Slim 的缩进意识语言

F# 是编写解析器的出色工具。您有多种选择:

  • 活动模式允许您定义相当简单的解析器,这些解析器非常易读。我在我的 Markdown 解析器中使用了这种方法,我为即将出版的 F# 书籍写了一章关于这个的章节,该书以 PDF 格式免费提供。

  • 解析器组合器是另一种选择。这个想法是,您可以从基本构建块构建解析器(例如解析由给定字符分隔的列表等)。有一个名为 FParsec 的 F# 实现

  • FsLex 和 FsYacc 为您提供了编写解析器的标准工具。F# PowerPack 中有一个更高效的新实现,还有一个由 F# 编译器本身使用的版本。

F#

本身是一种缩进敏感语言,F# 编译器使用 fslex/fsyacc 进行分析。如果看一下 F# 的分析器,缩进敏感性会增加此过程的额外复杂性。

如果你对 F# 没有太多经验,手动卷 F# 分析器可能不是一个好主意。我建议使用FParsec。它具有手动解析器的灵活性,并且比fslex/fsyacc更简单。

您可以从本文中找到 FParsec 中基于缩进的语法的两个实现。

若要在 C#.NET 中构建自制解析器,可能需要查看 Rxx 扩展以获取Microsoft响应式扩展 (Rx)。

另外,请查看此列表以进行创建。 C# 中的解析器。