我正在尝试使用parsec,并意识到我有一个模棱两可的语法。显然,这是我的一个错误,但我有点习惯于yacc风格的解析器生成器,让我知道我很愚蠢。Parsec只是按照您给它的解析器的顺序来吃字符(是的,我知道try)。
有没有办法让parsec告诉我,当我的语法不是左因式的时候?为我工作的程序都很棒。
谢谢!
(我知道shift-reduce与一种不同的解析器技术有关。我的意思只是描述模棱两可的语法。)
发布于 2012-08-29 15:10:02
我不是Parsec专家,所以我可能会被纠正,但我认为这是不可能的,原因很简单,Parsec对你的语法一无所知。
或者换一种方式,虽然你的语法可能是模棱两可的,但你的Parsec解析器不是,并且程序无法确定一些其他排列的parsec组合子,它为等价的输入产生不同的输出,也是未指定语法的有效表示。
因为您有语法,所以您可能更喜欢使用happy和alex,这会给您一个更类似于lexx/yacc的体验。
一个有趣的项目可能是调整BNFC以生成一个由parsec组合符组成的AST来表示语法,但我怀疑这不是一项简单的任务。
https://stackoverflow.com/questions/12170780
复制相似问题