обработка кучи в бизоне push чистого парсера - PullRequest
6 голосов
/ 21 марта 2011

Есть ли способ указать мои собственные функции распределителя / освобождения для управления кучей вместо malloc () / free () для чистого push-парсера в зубрах?

1 Ответ

3 голосов
/ 22 марта 2011

Большинство выделений памяти Bison могут быть перенаправлены с помощью макросов - в прологе (между %{ и %}) вы можете написать

#define YYMALLOC mymalloc
#define YYFREE myfree

и тогда Бизон позвонит mymalloc и myfree вместо malloc и free. Однако ожидается, что любые предоставляемые вами функции будут иметь точно такую ​​же сигнатуру типа, что и стандартные malloc и free; нет способа заставить его передавать дополнительные / другие аргументы. И я бы не использовал функциональные макросы на вашем месте. Хуже того, в моей копии (Bison 2.4.1) yypstate_new вызывает malloc напрямую, без возможности переопределения - возможно, это ошибка.

...