1

我会尽量简短。

目前我们正在使用 GNU Bison 构建解释器树,稍后将保存为专有格式并由我们的服务器加载。所以我们在 Bison 代码中使用了很多动态分配。问题是,最近我发现如果 Bison 出现任何语法错误,我们就会得到很多内存泄漏,因为在解析树的某些部分时已经分配了。阅读了一些书,我发现了一些关于“错误恢复”和 %destructor 的信息。第一个似乎是正确的方法,但是 %destructor 的使用对我来说还不是很清楚。

那么,如果由于某种原因 Bison 无法重新同步,是否意味着将调用 %destructor 来删除创建的所有令牌/符号?

4

1 回答 1

1

This question is a duplicate of :

When is %destructor invoked in BISON?

In fact to my point of view the %destructor directive is almost useless : If you redefine the YYSTYPE, you can specify an alternate C++ class/union with what exactly what you want

class AToken
{
   char     *text;
 public:
   AToken() : text(0) {}
   ~AToken() { delete [] text; }
   ...
};

#define YYSTYPE AToken
于 2012-06-12T07:29:13.653 回答