簡體   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