我会尽量简短地说。
目前我们正在使用 GNU Bison 来构建一个解释器树,稍后将保存为专有格式并由我们的服务器加载。所以我们在 Bison 代码中使用了大量的动态分配。问题是最近我发现如果Bison出现任何语法错误,我们会得到很多内存泄漏,因为在解析过程中已经分配了树的某些部分。阅读一些书籍,我发现了一些关于"错误恢复"和%析构函数的信息。第一个似乎是正确的方法,但是 %析构函数的使用对我来说还不清楚。
因此,如果由于某种原因 Bison 无法重新同步,这是否意味着将调用 %析构函数来删除创建的所有令牌/符号?
这个问题是 :
何时在 BISON 中调用 %析构函数?
事实上,在我看来,%析构函数指令几乎是无用的:如果重新定义 YYSTYPE,则可以指定一个备用C++类/联合,其中包含所需的确切
内容class AToken
{
char *text;
public:
AToken() : text(0) {}
~AToken() { delete [] text; }
...
};
#define YYSTYPE AToken