Комментарии 15
Есть у бизона крупный недостаток. В случае синтаксической ошибки происходит свёртка стека. Если на нём были указатели на память в куче, то происходит утечка. Нужно создавать свой аллокатор или типа того.
А разве после синтаксической ошибки компилятор не закрывается? В этом случае память все-равно освободится
представьте себе скажем Javascript-машину в браузере, она не закрывается после ошибки.
Далеко не все программы так работают. Можете представить себе, например, сервер баз данных который перегружается после каждой синтаксической ошибки в запросе?
Даже обычный GCC после синтаксической ошибки не закрывается, а продолжает искать новые ошибки.
Не обращали внимание, что он выдаёт ошибки все списком, а не по одной за запуск?
Не обращали внимание, что он выдаёт ошибки все списком, а не по одной за запуск?
Есть у бизона конструкция
%destructor { CODE } SYMBOLS
описывающая что делать с освобождемыми символами.
%destructor { CODE } SYMBOLS
описывающая что делать с освобождемыми символами.
Нужно создавать свой аллокатор или типа того.
Или обернуть указатели в объект с деструктором.
Или поменять в парсере пару строк, выполняющих свёртку.
У бизона, кстати, есть директива %glr-parser, которая в некоторых случаях позволяет избежать конфликтов из-за необходимости просмотра более чем на один символ.
У меня часто задача разбора битовых полей регистров умных asic чипов по значениям регистров.
Может ли bison генерировать си код для разбора этих бинарных протоколов?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Компиляция. 3: бизон