YACC / Bison中错误恢复产品的要求/限制是什么?

时间:2012-12-06 08:44:12

标签: parsing error-handling bison yacc

假设我想在我的语法中添加错误恢复生成 - 我知道它是什么,我看到了一些例子。

然而,我没有找到更正式的东西,即这样的制作应该是什么样的,什么是可能的,什么是禁止的呢?

Bison error recovery documentation

现在我只能通过试用和检查来检查错误,如果这样的作品有效:

A := error B 
B := num

A := ( error ; error )

当然试用&错误是低效的,所以我想阅读错误恢复产品的规则。

1 个答案:

答案 0 :(得分:1)

您指向的文档是旧的,“真实的”文档在这里:http://www.gnu.org/software/bison/manual/html_node/Error-Recovery.html。但在这些方面几乎没有差异。

我认为你不会再找到关于这个主题的内容了。除了可能在文档中提供示例的部分:http://www.gnu.org/software/bison/manual/html_node/Simple-Error-Recovery.html

唯一要记住的是,Bison应该“不太难”找到何时停止弹出堆栈,以及何时停止丢弃输入。有一个“终结者”,如“;”对于某些规则,甚至大括号(在您的示例中为“(”和“)”)通常是最佳选择。否则你可能会引入新的冲突。

HTH。