Bison的C++ GLR解析器

Pup*_*ppy 5 bison glr

我正在使用Bison来生成解析器.我有一个转变/减少冲突,我真的需要Bison使用GLR而不是LALR来处理它.但我已经通过了该%glr-parser指令,源文件仍然声明它是一个LALR解析器.我甚至发现了一个"glr.cc"骨架,它表明它是一个GLR C++解析器并且使用它%skeleton "glr.cc"并没有改变输出.Bison不会为所有目标语言提供所有算法吗?

Chr*_*odd 3

您只需要%glr-parser获得一个 GLR 解析器即可。请注意,GLR 解析器可能仍然存在冲突(移位/归约或归约/归约),只是生成的解析器将尝试两种替代方案并统一结果。

如果您想关闭有关冲突的消息,可以使用%expect%expect-rr。然而,在您不了解所有冲突是什么的情况下盲目地使用 GLR 解析器是危险的——如果您不小心,生成的解析器可能会花费指数级的时间来解析某些输入,或者可能在运行时给您带来歧义错误。