В ANTLR 4 я пытаюсь разобрать текстовый файл, но некоторые из моих определенных токенов постоянно игнорируются в пользу других. Я произвел небольшой пример, чтобы показать, что я имею в виду:Antlr4 игнорирует токены
Файл для анализа:
hello world
hello world
Грамматика:
grammar TestLexer;
file : line line;
line : 'hello' ' ' 'world' '\n';
LINE : ~[\n]+? '\n';
Книга ANTLR объясняет, что «привет» станет неявным маркер, который помещается перед маркером LINE, и этот порядок символов имеет значение. Так что я бы ожидать, что анализатор не будет соответствовать маркер линии, но он делает, так как в результате дерево показывает:
Как я могу это исправить, так что я получаю фактические неявные маркеры?
КПП. Я также пытался писать явные токены перед LINE, но это ничего не меняло.
Он выбирает самый длинный токен, и если есть более 1 кандидата, он выбирает первый (самый верхний) из них. – Onur
Если вы хотите сделать что-нибудь полезное с LINE в своем парсере или последующей обработке, это должно быть правило анализатора. В большинстве случаев это нормально только для большого количества текста для одного токена для комментариев и т. Д. – Onur
Я хотел использовать его больше для неполной грамматики, где у меня есть токен, который соответствует всему, что еще не охвачено. Поэтому, в конце концов, я больше не ожидаю, что что-то будет соответствовать этому токену. –