Как стать автором
Обновить

Комментарии 15

НЛО прилетело и опубликовало эту надпись здесь
портировал баги или гцц ?)))
НЛО прилетело и опубликовало эту надпись здесь
Есть у бизона крупный недостаток. В случае синтаксической ошибки происходит свёртка стека. Если на нём были указатели на память в куче, то происходит утечка. Нужно создавать свой аллокатор или типа того.
А разве после синтаксической ошибки компилятор не закрывается? В этом случае память все-равно освободится
представьте себе скажем Javascript-машину в браузере, она не закрывается после ошибки.
Далеко не все программы так работают. Можете представить себе, например, сервер баз данных который перегружается после каждой синтаксической ошибки в запросе?
Даже обычный GCC после синтаксической ошибки не закрывается, а продолжает искать новые ошибки.
Не обращали внимание, что он выдаёт ошибки все списком, а не по одной за запуск?
Есть у бизона конструкция

%destructor { CODE } SYMBOLS

описывающая что делать с освобождемыми символами.
Это только во второй версии. Мне доводилось иметь дело только с первой. Рад, что это исправили.
Нужно создавать свой аллокатор или типа того.

Или обернуть указатели в объект с деструктором.
Или поменять в парсере пару строк, выполняющих свёртку.
Речь о C. Никаких деструкторов нет.
Надо менять не парсер, а шаблон, т.е. сам bison.

Да и выше мне уже указали, что в новых версиях есть %destructor
Я просто предложил ещё варианты.

(Не сам bison, а сгенерированный им код.)
У бизона, кстати, есть директива %glr-parser, которая в некоторых случаях позволяет избежать конфликтов из-за необходимости просмотра более чем на один символ.

У меня часто задача разбора битовых полей регистров умных asic чипов по значениям регистров.

Может ли bison генерировать си код для разбора этих бинарных протоколов?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории