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