Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Bison出错后释放堆栈上剩余的指针_C_Malloc_Bison_Flex Lexer - Fatal编程技术网

C Bison出错后释放堆栈上剩余的指针

C Bison出错后释放堆栈上剩余的指针,c,malloc,bison,flex-lexer,C,Malloc,Bison,Flex Lexer,我正在研究一种脚本语言,它的解析器是用Bison实现的。我对语法没有任何疑问——它是完全功能性的,而且语言是有效的,但它没有以我希望的方式处理错误 问题是:我已经实现了解析器,以便随着规则的减少,它在堆栈上逐段构建表达式树。这个想法是,当整个脚本读入后,我将在堆栈上留下一个表达式树,然后我可以直接将其转换为字节码。该特定规则的语法如下所示: 脚本: 块{pp_write_块($1);pp_free_树($1); fputc(代码结束,ppbcout);YYACCEPT;} ; 这里,pp\u f

我正在研究一种脚本语言,它的解析器是用Bison实现的。我对语法没有任何疑问——它是完全功能性的,而且语言是有效的,但它没有以我希望的方式处理错误

问题是:我已经实现了解析器,以便随着规则的减少,它在堆栈上逐段构建表达式树。这个想法是,当整个脚本读入后,我将在堆栈上留下一个表达式树,然后我可以直接将其转换为字节码。该特定规则的语法如下所示:

脚本:
块{pp_write_块($1);pp_free_树($1);
fputc(代码结束,ppbcout);YYACCEPT;}
;

这里,
pp\u free\u树($1)
递归地释放整个表达式树。这很好,直到我遇到一个错误。如果Bison在解析过程中的任何时候都失败了,那么我将在堆栈上留下一堆堆分配的树

因此,我的问题是:如果我在Bison中遇到解析错误,如何释放堆栈上的这些
malloc
'd树?实际上,我所需要的只是一种在堆栈中循环的方法,在堆栈中的每个指针上调用
pp\u free\u tree
;然而,我不确定我将如何去做


tl,dr:如何在Bison中的堆栈中循环到我放在那里的自由指针?

看来,您在寻找%destructor指令


看起来,您在寻找%destructor指令