2013-03-13 108 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中循环堆栈以释放指针?

回答