[英]When using yacc, how do you tell yyparse() that you want to stop parsing?
仍在学习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 ... */
我意识到在我的例子中我可以简单地使用规则查找“Contrived_Example”,但我的观点是在if
-block中 - 我可以告诉yyparse
我想在这里停止解析吗?
您可以根据需要使用宏YYERROR
或YYABORT
。 YYABORT
导致yyparse立即返回失败,而YYERROR
导致它表现为出现错误并尝试恢复(如果无法恢复将返回失败)。
您还可以使用YYACCEPT
使yyparse立即返回成功。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.