Как использовать директиву 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
Другие вопросы по тегам