Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
YACC/Bison中的错误检测/恢复_Bison_Yacc - Fatal编程技术网

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

YACC/Bison中的错误检测/恢复,bison,yacc,Bison,Yacc,我一直在阅读有关使用错误符号yyerrok等的手册。。我关心的是如何向解析器添加错误规则,而不必过度添加或添加不足 考虑到我将解析一个简化的Java程序,我应该遵循什么一般准则?每个规则是否都应该包含一些错误检测/恢复?是否有一种最简单的方法能够熟练地完成这些任务?我现在只查找语法错误 感谢您提前给出所有答案。通常,您希望在yacc/bison文件中节省使用错误恢复规则。最好只有一个或两个顶级错误规则,而不是在叶产品中有很多错误规则,因为在叶规则中正确地重新同步实际上是非常困难的 对于类似Jav

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

考虑到我将解析一个简化的Java程序,我应该遵循什么一般准则?每个规则是否都应该包含一些错误检测/恢复?是否有一种最简单的方法能够熟练地完成这些任务?我现在只查找语法错误


感谢您提前给出所有答案。

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

对于类似Java的语言,最简单的方法是使用如下规则:

BlockStatement: error ';'
在这种情况下,如果在解析语句时出现任何语法错误,解析器将丢弃输入标记,直到到达
并将其作为刚刚完成的语句。这对于除缺少<代码>之外的其他错误非常有效位于块的末尾