我正在使用Flex / Bison作为脚本解析器,它需要突破解析器并从yyparse()返回非零状态以获取所有错误。我可以找到的Bison的每一个文档都是关于恢复的 - 我如何编写一个保释(即使用YYABORT)而不是尝试恢复的规则集?
感谢您的集体智慧。
答案 0 :(得分:0)
如果您参考语义错误,即检查您在语法规则的语义部分中所做的事情,那么您只需调用exit()
函数即可立即退出解析器的可执行文件。 exit()
的参数是返回shell环境的错误代码。
如果您愿意,也可以实现yyerror()
调用exit()
(退出语法错误)。记录在案here。
答案 1 :(得分:0)
如果没有适用的错误规则,bison将不会尝试恢复,并会在检测到语法错误时立即返回。因此,除非您明确尝试进行错误恢复,否则bison解析器将按您的意愿行事。
如果您尝试进行错误恢复,仍然可以在操作中调用YYABORT以使yyparse返回。
如果您的解析器没有以这种方式运行,请发布更多详细信息。
如果要强制 scanner 发生错误,只需返回任何生产中未使用的标记值。这可以保证在解析器中创建一个错误,因为令牌无法移动。