Синтаксический анализатор Lex: конец буфера или NUL - PullRequest
2 голосов
/ 15 августа 2011

У меня возникла проблема с ошибкой сегментации при написании синтаксического анализатора lex.Поэтому я добавил в отладочный ключ -d к Makefile при сборке моей программы.Это вывод, который я получаю от него.

--accepting rule at line 180 ("bxz")
--accepting rule at line 61 (" ")
--accepting rule at line 180 ("e")
--accepting rule at line 68 ("
")
--accepting rule at line 180 ("0L")
--accepting rule at line 193 ("!")
--accepting rule at line 68 ("
")
--accepting rule at line 180 ("0x")
--accepting rule at line 193 (""")
--accepting rule at line 68 ("
")
--(end of buffer or a NUL)
Segmentation fault

Когда я запустил это через инструмент отладки, я обнаружил, что ошибка происходит в yy_get_next_buffer () в lex.yy.c: 1324, который является файлом Cавтоматически генерируется из моего файла lex, закодированного вручную.Как я могу решить эту проблему?Заранее спасибо.

1 Ответ

0 голосов
/ 24 марта 2015

(Я пометил это как "невоспроизводимый", однако время ожидания истекло / устарело . Ответ был дан в комментариях .)

@LokiAstari писал:

Маловероятно, что ошибка в коде lex.Поэтому звучит так, будто вы записываете конец буфера или неправильно используете память другим способом.Valgrind может помочь в поиске ошибок памяти

@ AK wrote:

попытаться поставить новую строку после вашей последней строки токенов.Возможно, ваш синтаксический анализатор пытается найти какой-либо завершающий символ после последнего символа.

@ ChrisDodd wrote:

Возможно, вы как-то испортили указатель на внутренний буфер Flexзаписав конец массива или что-то подобное.Если вы посмотрите на код lex, который дает сбой, вы можете установить точку прерывания данных в структуре данных с неверными данными и выяснить, кто ее модифицирует

...