Есть ли способ учесть Q при лексировании исходной строки, но исключить его при запросе результата QUOTED_NAME?
Нет, не без добавления целевого кода (Java или другого).
Но на самом деле я не вижу необходимости: на более позднем этапе вы будете обрабатывать текст из ваших токенов, почему вы не можете удалить кавычки на этом этапе и оставить их там вэтап лексинга?
Вы можете позволить анализатору создать имя в кавычках, а затем позволить анализатору создать AST вместо простого дерева синтаксического анализа.С помощью AST вы можете указать синтаксическому анализатору, какие токены включить (а какие удалить) из AST.Затем вы можете удалить цитаты из вашего дерева.Тем не менее, обработка текста в кавычках - это, скорее, задача, которая принадлежит лексеру.
В любом случае, вот небольшая демонстрация того, как создать AST, который удаляет цитаты из дерева:
grammar Test;
options {
output=AST;
}
parse
: name+ EOF -> name+
;
name
: NAME
| quoted_name
;
quoted_name
: Q NAME Q -> NAME
;
NAME : ('a'..'z')+;
Q : '"';
SPACE : ' ' {$channel=HIDDEN;};
который создает следующие AST:
![enter image description here](https://i.stack.imgur.com/cPGVJ.png)
для ввода:
"mytext" mytext
Дополнительная информация о создании AST с помощью ANTLR: Как вывестиAST построен с использованием ANTLR?