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