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

时间:2012-06-07 11:28:32

标签: c++ bison parser-generator

我会尽量简短。

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

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

1 个答案:

答案 0 :(得分:1)

这个问题与以下内容重复:

When is %destructor invoked in BISON?

事实上,就我而言,%析构函数指令几乎是无用的: 如果重新定义YYSTYPE,则可以指定另一个C ++类/联合,其中包含您想要的内容

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

#define YYSTYPE AToken