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

时间:2014-11-27 02:47:56

标签: parsing f# indentation fparsec

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

我知道这必须在lexing阶段完成,但FParsec没有lexing阶段。可以使用FParsec,或者,如何在lexing之后提供它?

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

1 个答案:

答案 0 :(得分:9)

是的,这是可能的。

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

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