在野牛推进纯粹的解析器堆处理

Fla*_*ius 7 c language-design bison parser-generator

有没有办法为堆管理指定我自己的allocator/deallocator函数而不是malloc()/ free()用于bison中的纯推送解析器?

zwo*_*wol 3

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

#define YYMALLOC mymalloc
#define YYFREE myfree
Run Code Online (Sandbox Code Playgroud)

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