Comments 15
UFO just landed and posted this here
Есть у бизона крупный недостаток. В случае синтаксической ошибки происходит свёртка стека. Если на нём были указатели на память в куче, то происходит утечка. Нужно создавать свой аллокатор или типа того.
А разве после синтаксической ошибки компилятор не закрывается? В этом случае память все-равно освободится
представьте себе скажем Javascript-машину в браузере, она не закрывается после ошибки.
Далеко не все программы так работают. Можете представить себе, например, сервер баз данных который перегружается после каждой синтаксической ошибки в запросе?
Даже обычный GCC после синтаксической ошибки не закрывается, а продолжает искать новые ошибки.
Не обращали внимание, что он выдаёт ошибки все списком, а не по одной за запуск?
Не обращали внимание, что он выдаёт ошибки все списком, а не по одной за запуск?
Есть у бизона конструкция
%destructor { CODE } SYMBOLS
описывающая что делать с освобождемыми символами.
%destructor { CODE } SYMBOLS
описывающая что делать с освобождемыми символами.
Нужно создавать свой аллокатор или типа того.
Или обернуть указатели в объект с деструктором.
Или поменять в парсере пару строк, выполняющих свёртку.
У бизона, кстати, есть директива %glr-parser, которая в некоторых случаях позволяет избежать конфликтов из-за необходимости просмотра более чем на один символ.
У меня часто задача разбора битовых полей регистров умных asic чипов по значениям регистров.
Может ли bison генерировать си код для разбора этих бинарных протоколов?
Sign up to leave a comment.
Компиляция. 3: бизон