2010-01-27 2 views
4

При использовании грамматик, написанных в ANTLR, анализатор правильно распознает данные из входного потока, но если у меня есть текст мусора в конце ввода (который не должен быть анализируется грамматикой) парсер не жалуется.ANTLR как обнаружить данные мусора в конце ввода

Я думаю, что это все в порядке (я имею в виду, что синтаксический анализатор выполнил свою работу и проанализировал все, что я сказал, что он должен разобрать), но есть ли какой-либо трюк, чтобы обнаружить, когда есть какие-либо данные, оставшиеся на входе после того, как парсер сделал его работу?

Спасибо.

+0

АСТ производится ANTLR Включается ли мусор или это выглядит хорошо? Вы должны иметь возможность получить смещение и длину последнего токена и выяснить, где он остановился, но это было некоторое время с тех пор, как я использовал ANTLR –

+0

АСТ отлично. Все работает нормально, вывод генерируется правильно, просто чтобы было легче сообщать об ошибке, если они оставляют что-либо в конце файла. Возможно, трюк хранения позиции последнего токена, а затем поиск за его пределами, но, возможно, есть еще более элегантный способ сделать это? – Gabriel

ответ

4

Как Scott уже ответил на список ANTLR рассылки:

Здравствуйте,

При использовании грамматик, написанных в ANTLR синтаксический анализатор корректно распознает данные из входного потока, но если у меня есть некоторый текст мусора в конце вход (который текст мусора не должен анализироваться грамматикой) анализатор не жалуется.

Я предполагаю, что это поведение все в порядке (я имею в виду анализатор сделал свою работу и разобраны все, что я сказал, что это должен разобрать), но есть ли трюк, чтобы обнаружить, когда есть какие-либо данные, оставленные на входе после синтаксического анализа выполнил свою работу?

Thanks, Gabi.

Добавить маркер EOF до конца вашего стартового правила

- Скотт

+0

Да. Спасибо за ссылку сюда. – Gabriel