仍在学习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
导致yyparse出现错误并尝试恢复(如果无法恢复,则会返回失败)。
您还可以使用YYACCEPT
使yyparse立即返回成功。