2011-07-09 72 views
2

彎曲和野牛在遇到錯誤時停止處理的最佳方式是什麼?如果我打電話給yyerror,它不會停止掃描和解析我的文件。雖然輸入在語法上是正確的,但存在用戶錯誤,例如他們試圖加載同一文件兩次。一旦我退出flex/bison,那麼我的程序會向用戶返回一個錯誤,程序應該繼續運行。我假設拋出一個C++異常可能會破壞一些東西?如何告訴flex和野牛停止處理輸入?

回答

1

YYABORT是出門的標準方式;它會導致yyparse立即返回失敗(1)。然後你可以拋出一個異常或做任何你想要的。如果你想解析別的東西,你需要重新設置flex的輸入,但是如果你這樣做了,你可以再次調用yyparse,解析將從頭開始。

+0

感謝您的回覆。我懷疑我去年7月份遇到的問題是YYABORT宏必須在動作中,而不是在動作中調用的函數內。 – Juan