2013-03-13 105 views
1

我正在研究腳本語言,其解析器在Bison中實現。我對語法沒有疑問 - 它功能完全,語言有效,但它不能以我想要的方式處理錯誤。在Bison中出錯後釋放指針

問題出在這裏:我已經實現瞭解析器,以便在規則減少的情況下逐個構建棧上的表達式樹。這個想法是,當整個腳本被讀入時,我會在堆棧中留下一個表達式樹,然後我可以直接轉換爲字節碼。該特定規則的語法如下:

script: block { pp_write_block($1); pp_free_tree($1); fputc(CODEEND,ppbcout); YYACCEPT; } ;

這裏,pp_free_tree($1)遞歸釋放整個表達式樹。這很好 - 直到我遇到錯誤。如果Bison在解析過程中的任何時候失敗,那麼我在堆棧中留下一堆堆分配的樹。

所以,我的問題是:如果我遇到Bison的分析錯誤,我怎麼能夠釋放這些坐在堆棧上的樹?真的,我需要的是一種循環堆棧的方式,在其中的每個指針上調用pp_free_tree;不過,我不確定我會怎麼做。

tl,dr:如何在Bison中循環堆棧以釋放指針?

回答