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

标签 parsing error-handling bison yacc

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

但是我没有找到更正式的东西,即这种生产应该真正看起来像什么,可能什么,被禁止什么?

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/

相关文章:

ios - 将对象添加到 JSONKit 创建的字典?

bash - 检查是否安装了正确版本的 Flex 和 Bison

bison - 使用 Bison 解析树

c++ - 在 C++ 中仅解析来自 istream 的数字

objective-c - 如何使用 NSScanner 解析 Cocoa 中制表符分隔的字符串?

c# - MTOM - 在 VS 2010 中读取时遇到无效的 MIME 内容类型 header

JavaScript 尝试/捕获 : errors or exceptions?

C++ 异常 - 抛出一个字符串

php - jquery + PHP : catching php error from ajax

compiler-construction - Bison 可以验证范围和语法吗?