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

时间:2011-03-01 22:09:31

标签: parsing error-handling 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 ... */

我意识到在我的例子中我可以简单地使用规则查找“Contrived_Example”,但我的观点是在if - 块 - 我可以告诉yyparse我想要停止解析这里吗?

1 个答案:

答案 0 :(得分:4)

您可以使用宏YYERRORYYABORT,具体取决于您想要的内容。 YYABORT会导致yyparse立即返回失败,而YYERROR会导致它出现错误并尝试恢复(如果无法恢复将返回失败)。

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