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

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

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

%destructor { CODE } SYMBOLS

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

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

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

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

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

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

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

Публикации

Истории