YACC / Bison中的错误检测/恢复

时间:2012-02-28 03:06:16

标签: bison yacc

我一直在阅读有关使用错误符号,yyerrok等的手册。我关心的是如何将错误规则添加到解析器而不会过度使用或添加不足。

考虑到我将解析简化的Java程序,是否有任何一般指导方针?每条规则都应包含一些错误检测/恢复吗?有没有最简单的方法证明能够熟练地执行这些任务?我目前只是在寻找语法错误。

提前感谢任何/所有答案。

1 个答案:

答案 0 :(得分:3)

通常,您希望在yacc / bison文件中谨慎使用错误恢复规则。最好只有一个或两个顶级错误规则而不是叶子制作中的大量错误规则,因为实际上在叶子规则中正确地重新同步非常困难。

类似Java的语言最简单的方法就是只有一个规则:

BlockStatement: error ';'

在这种情况下,如果在解析语句时遇到任何语法错误,解析器只会丢弃输入令牌,直到它到达;并表现得好像它刚刚完成了一个语句。这适用于错误,而不是在块结尾处缺少;