假设我想在我的语法中添加错误恢复生成 - 我知道它是什么,我看到了一些例子。
然而,我没有找到更正式的东西,即这样的制作应该是什么样的,什么是可能的,什么是禁止的呢?
Bison error recovery documentation
现在我只能通过试用和检查来检查错误,如果这样的作品有效:
A := error B
B := num
或
A := ( error ; error )
当然试用&错误是低效的,所以我想阅读错误恢复产品的规则。
答案 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。