标签: haskell parsec
我正在玩parsec并意识到我的语法含糊不清。显然这是我的错误,但我有点习惯yacc风格的解析器生成器让我知道我是愚蠢的。 Parsec只按你给解析器的顺序吃字符(是的,我知道try)。
try
有没有办法让parsec告诉我什么时候我的语法没有留下来?对我有用的程序很棒。
谢谢!
(我知道shift-reduce与不同类型的解析器技术有关。我只是想描述模糊的语法。)
答案 0 :(得分:8)
我不是Parsec专家,所以我很可能会被纠正,但我认为这不可能,因为Parsec对你的语法一无所知这个简单的原因。
或换句话说,虽然你的语法可能不明确,但你的Parsec解析器不是,并且程序无法确定parsec组合器的其他排列,它为等效输入产生不同的输出,也是有效的表示未指明的语法。
由于你有语法,你可能更喜欢使用happy和alex,这将为你提供更多类似lexx / yacc的体验。
一个有趣的项目可能是调整BNFC来生成parsec组合器的AST以表示语法,但我怀疑这将是一项非常重要的任务。