Нет, вы не можете. Лексер - это конечный автомат.
Что вы можете сделать, это реализовать лексическое действие, которое проверяет символы совпадающей строки и добавляет результат этой проверки к выданному токену (например, путем установки значения настраиваемого поля). Но вы не можете использовать результат проверки для руководства лексером.
Вы должны определить токен ID
как перечисление всех возможных символов:
TOKEN {
< ID: [ "a"-"z", "α"-"ω", ... ] > // The enumeration is to be continued
}
Примечание: Если вы не используете экранирование Unicode, не забудьте сообщить JavaCC точную кодировку вашего файла грамматики.
Это утомительно, но так работает лексер.
Альтернативой является принятие любого отдельного символа в качестве идентификатора и проверка его в анализаторе или даже позже:
TOKEN {
< ID: ~[] >
}
Хотя я не вижу причин для этого.