Вы можете встроить пользовательский код, обернув {
и }
вокруг него. Таким образом, вы можете сделать что-то вроде:
MONTH
: DIGIT DIGIT
{
int month = Integer.parseInt(getText());
// do your check here
}
;
Как видите, я позвонил getText()
, чтобы взять совпавший текст токена.
Обратите внимание, что я предположил, что вы ссылаетесь на это правило MONTH
из другого правила лексера. Если вы собираетесь выдать исключение, если 1 > month > 12
, то всякий раз, когда ваш источник содержит недопустимое значение месяца, ни одно из правил синтаксического анализатора никогда не будет найдено. Хотя правила лексера и парсера могут быть смешаны в одном файле грамматики .g
, входной источник сначала токенизируется на основе правил лексера, и как только это произойдет, только тогда правила парсера будут сопоставлены.