ANTLR, как обнаруживать мусорные данные в конце ввода

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

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

Спасибо.


person Gabriel    schedule 27.01.2010    source источник
comment
Включает ли AST, произведенный ANTLR, мусор или все в порядке? Вы должны иметь возможность получить смещение и длину последнего токена и выяснить, где он остановился, но прошло некоторое время с тех пор, как я использовал ANTLR   -  person Steve g    schedule 27.01.2010
comment
AST в порядке. Все работает нормально, вывод формируется правильно, просто было бы удобнее сообщать об ошибке, если они оставляют что-нибудь в конце файла. Возможно, уловка с сохранением позиции последнего токена и последующим поиском за его пределами сработает, но, может быть, есть более элегантный способ сделать это?   -  person Gabriel    schedule 27.01.2010


Ответы (1)


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

Привет,

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

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

Спасибо, Габи.

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

- Скотт

person Bart Kiers    schedule 27.01.2010
comment
да. Спасибо, что снова связались с нами. - person Gabriel; 28.01.2010