假设我想在语法中添加错误恢复功能-我知道它是什么,我看到了一些示例。
但是我没有找到更正式的东西,即这种生产应该真正看起来像什么,可能什么,被禁止什么?
Bison error recovery documentation
目前,我只能通过反复试验来检查这种产品是否有效:
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来说,发现何时停止 pop 堆栈以及何时停止丢弃输入应该“不太难”。具有“终止符”,例如“;”对于某些规则,甚至括号(在您的示例中为“(”和“)”)通常是最佳选择。否则,您可能会引入新的冲突。
HTH。
关于parsing - YACC/Bison中错误恢复产品的要求/限制是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13739849/