parsing - 是否可以使用 fparsec 解析 "off-side"(基于缩进的)语言?

标签 parsing f# indentation fparsec

我希望将 FParsec 用于类似 python 的语言,基于缩进。

我知道这必须在词法分析阶段完成,但 FParsec 没有词法分析阶段。是否可以使用 FParsec,或者,如何在词法分析后提供它?

P.D:我是 F# 新手,但对其他语言有经验

最佳答案

是的,这是可能的。

这是一个 relevant article由 FParsec 作者。如果你想更深入地了解这个主题,this paper可能值得一读。论文指出,有多个基于Parsec的缩进感知解析包,Parsec是启发FParsec的解析器组合器。

FParsec 没有单独的词法分析阶段,而是将词法分析和解析融合到一个阶段。与解析器生成器 (fslex/fsyacc) 相比,IMO 缩进感知解析更适合使用解析器组合器 (FParsec) 完成。原因是您需要手动跟踪当前缩进并根据上下文报告良好的错误消息。

关于parsing - 是否可以使用 fparsec 解析 "off-side"(基于缩进的)语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27162285/

相关文章:

c++ - C++ 头文件的 emacs 公共(public)/ protected /私有(private)标签缩进不适用于零偏移

c - 带有重复和可选参数的 getopt

c++ - 有没有比遍历每个字节更快的解析方法?

f# - Bolero (F# Blazor) 调试

f# - 如何将相同的参数传递给多个函数?

c# - 让 VS 2008 停止强制缩进命名空间的方法?

ios - 解析来自 googleapi 的数据

c# - 如何改进缺少右大括号的 Sprache 解析器错误消息?

f# - 如何最好地捕获失踪的let!、do!、return和return!在 F# 的计算表达式中

html - vim/vi/linux : properly indent html file