簡體   English   中英

如何讓野牛擺脫所有錯誤

[英]how to get bison to bail out for all errors

我將Flex / Bison用於腳本解析器,該腳本解析器需要突破解析器並從yyparse()返回ALL ERRORS的非零狀態。 我能找到的關於Bison的每一份文檔都是關於恢復的-我如何編寫一個保全(即使用YYABORT)而不是嘗試恢復的規則集?

感謝您的集體智慧。

如果引用語義錯誤,即檢查您是否正在語法規則的語義部分中進行操作,則只需調用exit()函數即可立即退出解析器的可執行文件。 exit()的參數是返回到Shell環境的錯誤代碼。

您還可以實現yyerror() ,如果需要的話,它會調用exit() (在語法錯誤時退出)。 在此處記錄

如果沒有適用的錯誤規則,野牛將不會嘗試恢復,並且在檢測到語法錯誤時將立即返回。 因此,除非您明確嘗試進行錯誤恢復,否則野牛解析器將按照您的意願進行操作。

如果嘗試進行錯誤恢復,您仍然可以在操作中調用YYABORT以使yyparse返回。

如果您的解析器不以這種方式運行,請發布更多詳細信息。

如果要從掃描儀強制執行錯誤,則只需返回一個令牌值,該令牌值在任何生產環境中都不會使用。 可以保證在解析器中創建錯誤,因為令牌無法移動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM