Python实现Parsec吗?

16 投票
5 回答
6050 浏览
提问于 2025-04-11 09:22

我最近用Python写了一个解析器,使用了Ply(这是yacc在Python中的重写版)。当我快完成这个解析器的时候,我发现我需要在解析过程中进行一些查找,以便给词法分析器提供信息。如果不进行这样的查找,我就无法正确解析这个语言中的字符串。

因为我可以通过语法规则控制词法分析器的状态,所以我想在解析模块中使用查找表来解决我的问题,但这可能会变得很难维护和测试。所以我想了解一些其他的选择。

在Haskell中,我会使用Parsec,这是一个解析函数的库(被称为组合子)。那么在Python中有没有Parsec的实现呢?或者有没有其他高质量的库,里面有丰富的解析功能,这样我就可以在Python中构建一个上下文敏感的解析器?

补充说明:我所有的上下文无关解析尝试都失败了。因此,我不指望ANTLR在这里能有用。

5 个回答

6

PySec 是另一个单子解析器,我对它了解不多,但值得去看看 这里

10

我认为 pyparsing 的原理和 parsec 是一样的。

5

如果你觉得使用LL解析器还不错,可以考虑试试ANTLR。这个工具可以生成Python代码(实际上,它叫做LL(*),其中的*表示它可以处理的前瞻数量)。

撰写回答