有没有办法让parsec报告“shift-reduce”冲突?

时间:2012-08-29 04:13:33

标签: haskell parsec

我正在玩parsec并意识到我的语法含糊不清。显然这是我的错误,但我有点习惯yacc风格的解析器生成器让我知道我是愚蠢的。 Parsec只按你给解析器的顺序吃字符(是的,我知道try)。

有没有办法让parsec告诉我什么时候我的语法没有留下来?对我有用的程序很棒。

谢谢!

(我知道shift-reduce与不同类型的解析器技术有关。我只是想描述模糊的语法。)

1 个答案:

答案 0 :(得分:8)

我不是Parsec专家,所以我很可能会被纠正,但我认为这不可能,因为Parsec对你的语法一无所知这个简单的原因。

或换句话说,虽然你的语法可能不明确,但你的Parsec解析器不是,并且程序无法确定parsec组合器的其他排列,它为等效输入产生不同的输出,也是有效的表示未指明的语法。

由于你有语法,你可能更喜欢使用happyalex,这将为你提供更多类似lexx / yacc的体验。

一个有趣的项目可能是调整BNFC来生成parsec组合器的AST以表示语法,但我怀疑这将是一项非常重要的任务。