2012-02-28 1153 views
3

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

考虑到我将解析一个简化的Java程序,是否有任何一般指导原则应该遵循?每个规则是否应包含一些错误检测/恢复?有没有一种最简单的方法可以证明能够很好地执行这些任务?我现在只是在寻找语法错误。

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

回答

3

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

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

BlockStatement: error ';' 

在这种情况下,如果你得到任何形式的语法错误,同时解析声明,解析器只会抛出取消输入令牌,直到它达到;并且就好像它刚完成了一个声明一样。这适用于错误以外的错误,而不是在块末尾丢失;