0

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

但是我没有找到更正式的东西,即这样的生产应该是什么样子,什么是可能的,什么是被禁止的?

Bison 错误恢复文档

现在我只能通过反复试验来检查,如果这样的产品是有效的:

A := error B 
B := num

或者

A := ( error ; error )

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

4

1 回答 1

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。

于 2012-12-06T13:56:35.097 回答