我会尽量简短。
目前我们正在使用 GNU Bison 构建解释器树,稍后将以专有格式保存并由我们的服务器加载。 所以我们在 Bison 代码内部使用了很多动态分配。 问题是最近我发现如果 Bison 出现任何语法错误,我们就会出现大量内存泄漏,因为在解析过程中已经分配了树的某些部分。 阅读一些书籍,我发现了一些关于“错误恢复”和 %destructor 的内容。 第一个似乎是正确的方法,但 %destructor 的使用对我来说还不是很清楚。
因此,如果由于某种原因 Bison 无法重新同步,是否意味着将调用 %destructor 来删除所有已创建的 token /符号?
最佳答案
此问题与以下问题重复:
When is %destructor invoked in BISON?
事实上,在我看来,%destructor 指令几乎毫无用处: 如果您重新定义 YYSTYPE,您可以指定一个替代的 C++ 类/union ,这正是您想要的
class AToken
{
char *text;
public:
AToken() : text(0) {}
~AToken() { delete [] text; }
...
};
#define YYSTYPE AToken
关于c++ - 如何使用 Bison %destructor 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10930930/