8

我正在玩 parsec 并意识到我有一个模棱两可的语法。显然这是我的错误,但我有点习惯于 yacc 样式的解析器生成器,让我知道我很愚蠢。Parsec 只是按照你给它解析器的顺序吃字符(是的,我知道try)。

有什么方法可以让 parsec 告诉我什么时候我的语法不是左因子?对我有用的程序很棒。

谢谢!

(我知道 shift-reduce 与另一种解析器技术有关。我只是想描述模棱两可的语法。)

4

1 回答 1

8

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

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

由于您确实有语法,因此您可能更喜欢使用happyalex,这将为您提供更像 lexx/yacc 的体验。

一个有趣的项目可能是调整BNFC以生成 AST 的 parsec 组合子来表示语法,但我怀疑这将是一项不平凡的任务。

于 2012-08-29T07:10:02.400 回答