gpt4 book ai didi

c - 在 Bison 出错后释放留在堆栈上的指针

转载 作者:太空宇宙 更新时间:2023-11-04 03:57:09 26 4
gpt4 key购买 nike

<分区>

我正在研究一种脚本语言,其解析器是在 Bison 中实现的。我对语法没有疑问——它功能齐全,语言也能用,但它没有按照我想要的方式处理错误。

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

脚本:
block { pp_write_block($1); pp_free_tree($1);
fputc(代码,ppbcout); YY接受; }
;

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

所以,我的问题是:如果我在 Bison 中遇到解析错误,我如何才能释放这些位于堆栈上的 malloc 树?实际上,我所需要的只是一种遍历堆栈的方法,对其中的每个指针调用 pp_free_tree;但是,我不确定我将如何去做。

tl,dr:我如何在 Bison 中遍历堆栈以释放放在那里的指针?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com