有没有办法为堆管理指定我自己的allocator / deallocator函数而不是malloc()/ free()用于bison中的纯推送解析器?
答案 0 :(得分:3)
Bison的大多数的内存分配可以用宏重定向 - 在序言中(%{
和%}
之间)你可以写
#define YYMALLOC mymalloc
#define YYFREE myfree
然后Bison会拨打mymalloc
和myfree
而不是malloc
和free
。但是,它希望您提供的任何函数具有与标准malloc
和free
完全相同的类型签名;没有办法让它传递额外/不同的参数。如果我是你,我不会使用类似函数的宏。更糟糕的是,在我的副本(Bison 2.4.1)yypstate_new
直接调用malloc
,没有覆盖可能 - 这可以说是一个错误。