如何让野牛为所有错误摆脱困境

时间:2015-08-27 17:47:06

标签: parsing error-handling bison

我正在使用Flex / Bison作为脚本解析器,它需要突破解析器并从yyparse()返回非零状态以获取所有错误。我可以找到的Bison的每一个文档都是关于恢复的 - 我如何编写一个保释(即使用YYABORT)而不是尝试恢复的规则集?

感谢您的集体智慧。

2 个答案:

答案 0 :(得分:0)

如果您参考语义错误,即检查您在语法规则的语义部分中所做的事情,那么您只需调用exit()函数即可立即退出解析器的可执行文件。 exit()的参数是返回shell环境的错误代码。

如果您愿意,也可以实现yyerror()调用exit()(退出语法错误)。记录在案here

答案 1 :(得分:0)

如果没有适用的错误规则,bison将不会尝试恢复,并会在检测到语法错误时立即返回。因此,除非您明确尝试进行错误恢复,否则bison解析器将按您的意愿行事。

如果您尝试进行错误恢复,仍然可以在操作中调用YYABORT以使yyparse返回。

如果您的解析器没有以这种方式运行,请发布更多详细信息。

如果要强制 scanner 发生错误,只需返回任何生产中未使用的标记值。这可以保证在解析器中创建一个错误,因为令牌无法移动。