Wil*_*ill 4 error-handling parsing yacc
仍在学习 yacc 和 flex,并遇到了我的操作方法和教程未涵盖的场景。我正在尝试解析一个文件,并且在进行过程中,我正在对放置在文件中的代码进行一些辅助错误检查parser.y。当我遇到字典顺序正确(即解析正确匹配)但逻辑不正确(意外值或不适当值)的内容时,我该如何退出yyparse?另外,我可以让它返回一个错误代码给我,我可以在我的调用代码中检查吗?
/* Sample */
my_file_format:
header body_lines footer
;
header:
OBRACE INT CBRACE
|
OBRACE STRING CBRACE {
if ( strcmp ( $1, "Contrived_Example" ) != 0 ) { /* I want to exit here */ }
}
;
/* etc ... */
Run Code Online (Sandbox Code Playgroud)
我意识到在我的示例中,我可以简单地使用规则查找“Contrived_Example”,但我的观点在if- 块中 - 我可以告诉我yyparse我想在这里停止解析吗?
您可以使用宏YYERROR或YYABORT根据您的具体需要。 YYABORT导致 yyparse 立即返回失败,而YYERROR导致它表现得好像出现了错误并尝试恢复(如果无法恢复,将返回失败)。
您还可以使用YYACCEPTyyparse 立即返回成功。