如何使用 Bison %析构函数指令



我会尽量简短地说。

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

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

这个问题是 :

何时在 BISON 中调用 %析构函数?

事实上,在我看来,%析构函数指令几乎是无用的:如果重新定义 YYSTYPE,则可以指定一个备用C++类/联合,其中包含所需的确切

内容
class AToken
{
   char     *text;
 public:
   AToken() : text(0) {}
   ~AToken() { delete [] text; }
   ...
};
#define YYSTYPE AToken

最新更新