Как использовать директиву Bison %destructor
Я постараюсь быть кратко.
В настоящее время мы используем GNU Bison для построения дерева интерпретаторов, которое в дальнейшем будет сохранено в собственном формате и загружено нашим сервером. Поэтому мы используем много динамического размещения внутри кода Bison. Проблема в том, что недавно я обнаружил, что если Bison получает какую-либо синтаксическую ошибку, мы получаем много утечек памяти, потому что во время синтаксического анализа некоторые части дерева уже были выделены. Читая некоторые книги, я нашел немного о "Восстановлении ошибок" и деструкторе%. Первый путь кажется правильным, но использование% destructor для меня еще не было так очевидно.
Итак, если по какой-то причине Bison не может выполнить повторную синхронизацию, означает ли это, что деструктор% будет вызван для удаления всех созданных токенов / символов?
1 ответ
Этот вопрос является дубликатом:
Когда% Деструктор вызывается в BISON?
На самом деле, на мой взгляд, директива%destructor практически бесполезна: если вы переопределите YYSTYPE, вы можете указать альтернативный класс / союз C++ с тем, что именно вы хотите
class AToken
{
char *text;
public:
AToken() : text(0) {}
~AToken() { delete [] text; }
...
};
#define YYSTYPE AToken