假设我想在我的语法中添加错误恢复产生式——我知道它是什么,我看到了例子。
但是我没有找到更正式的东西,即这样的生产应该是什么样子,什么是可能的,什么是被禁止的?
现在我只能通过反复试验来检查,如果这样的产品是有效的:
A := error B
B := num
或者
A := ( error ; error )
当然试错是低效的,所以我想阅读错误恢复产品的规则。
假设我想在我的语法中添加错误恢复产生式——我知道它是什么,我看到了例子。
但是我没有找到更正式的东西,即这样的生产应该是什么样子,什么是可能的,什么是被禁止的?
现在我只能通过反复试验来检查,如果这样的产品是有效的:
A := error B
B := num
或者
A := ( error ; error )
当然试错是低效的,所以我想阅读错误恢复产品的规则。
您指向的文档很旧,“真正的”文档在这里: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。