繁体   English   中英

使用yacc时,如何告诉yyparse()你要停止解析?

[英]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我想在这里停止解析吗?

您可以根据需要使用宏YYERRORYYABORT YYABORT导致yyparse立即返回失败,而YYERROR导致它表现为出现错误并尝试恢复(如果无法恢复将返回失败)。

您还可以使用YYACCEPT使yyparse立即返回成功。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM