Я пытаюсь выполнить базовое сканирование на основе ANTLR. У меня проблема с лексером, который не соответствует разыскиваемым токенам.
lexer grammar DefaultLexer;
ALPHANUM : (LETTER | DIGIT)+;
ACRONYM : LETTER '.' (LETTER '.')+;
HOST : ALPHANUM (('.' | '-') ALPHANUM)+;
fragment
LETTER : UNICODE_CLASS_LL | UNICODE_CLASS_LM | UNICODE_CLASS_LO | UNICODE_CLASS_LT | UNICODE_CLASS_LU;
fragment
DIGIT : UNICODE_CLASS_ND | UNICODE_CLASS_NL;
Для приведенной выше грамматики строка hello. world
, заданная в качестве входных данных, дает только world
. В то время как я ожидал бы получить как hello
, так и world
. Что мне не хватает? Спасибо.
ДОБАВЛЕН:
Хорошо, я узнал, что ввод hello. world
соответствует большему количеству символов с использованием правила HOST, чем ALPHANUM, поэтому lexer выберет его. Затем, когда ему не удается сопоставить ввод с правилом HOST, он не «оглядывается» на , потому что именно так работает лексер.
Как мне это обойти?