c++ - 如何使用 Bison %destructor 指令

标签 c++ bison parser-generator

我会尽量简短。

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

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

最佳答案

此问题与以下问题重复:

When is %destructor invoked in BISON?

事实上,在我看来,%destructor 指令几乎毫无用处: 如果您重新定义 YYSTYPE,您可以指定一个替代的 C++ 类/union ,这正是您想要的

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

#define YYSTYPE AToken

关于c++ - 如何使用 Bison %destructor 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10930930/

相关文章:

c++ - 新手问题 - 使用 Eigen 的复矩阵代数

c++ - C++ 中的 int64 和 int64_t 有什么区别?

ide - 从示例数据创建解析器语法

c - Bison - 推送和纯解析器的附加参数

regex - Scala RegexParsers 中的非贪婪匹配

c++ - QPropertyAnimation : Immedately jump to end of animation?

C++ - 对象在超出范围和 vector 时被破坏

c++ - 为什么即使字符串有效也要调用yyerror()?

c - 将 Flex 和 Bison 生成的 yyparse() 嵌入到用 C 语言编写的 CLI 程序中

c - 我怎样才能一次提供一个词法分析器字节的数据?