[英]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.