c - Bison 推纯解析器中的堆处理

标签 c language-design bison parser-generator

有什么方法可以为堆管理指定我自己的分配器/解除分配器函数,而不是为 bison 中的纯推送解析器指定 malloc()/free() 吗?

最佳答案

大多数 Bison 的内存分配都可以用宏重定向 - 在序言中(在 %{%} 之间)你可以写

#define YYMALLOC mymalloc
#define YYFREE myfree

然后 Bison 将调用 mymallocmyfree 而不是 mallocfree。但是,它希望您提供的任何函数都具有与标准 mallocfree 完全相同的类型签名;没有办法让它传递额外的/不同的参数。如果我是你,我不会使用类似函数的宏。更糟糕的是,在我的副本 (Bison 2.4.1) 中,yypstate_new 直接调用了 malloc,没有覆盖可能——这可以说是一个错误。

关于c - Bison 推纯解析器中的堆处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5376833/

相关文章:

c++ - C++ 子类上的 Bison 类型冲突

bison - Lex/Flex - 扫描 EOF 字符

c - sizeof(struct tag *) 和 sizeof(struct tag) 之间的区别

c - 如何打印以下图案的矩形

c - 尝试反转字符串会导致空字符串

c - 如何正确初始化一个字符串

c - Lex/Yacc Flex/Bison : Precedence on reusing tokens for multiple production rules

c - 为什么这在 C 中是合法的?

functional-programming - 函数式编程和方程求解器

javascript - 为什么Javascript是 "most misunderstood language"?