Определить терминал с именем 'message' для обработки "\n", кошмар.

Я использую определение, так называемое

message : '"'.* '"';

то, что представляет каждую мелочь внутри "" - это сообщение, терминалы, оно хорошо работает с "lkjaldjfa kajf", что-то общее, но когда я встретил "\ n", это превращается в кошмар - который вызывает бесконечный цикл, съедая мою память.

Я не знаю почему.. спасибо

1 ответ

... это превращается в кошмар - который вызывает бесконечный цикл, съедает мою память.

Трудно комментировать это, не имея возможности воспроизвести это.

Однако правило парсера:

message : '"' .* '"';

соответствует токену '"' за которым следует ноль или более других токенов, заканчивающихся токеном '"',

Если у вас нет очень веской причины оставить это правило синтаксического анализатора (о котором я бы хотел услышать), измените его на правило лексера:

Message : '"' .* '"';

который соответствует характеру '"' за которым следует ноль или более других символов, заканчивающихся символом '"',


Также см.: Практическое различие между правилами синтаксического анализатора и правилами лексера в ANTLR?

Другие вопросы по тегам