2014-12-17 2 views
2

Существует правило о полете no (например, CZ3102), в котором есть 2 символа, а затем 3-4 цифры. И его регулярное выражение должно быть: [A-Z] {2} [0-9] {3,4}.Как описать строку, содержащую символы с подсчетом диапазона в соответствии с правилами lexer ANTLR4?

Затем, как написать правило lexer под ANTLR4?

Одно правило лексира: [A-Z] [A-Z] [0-9] [0-9] [0-9] [0-9]?

Но это не так элегантно, и если диапазон большой, например 1-255, это не так просто правило lexer.

Благодаря

+0

За крышкой ANTLR4 использует Java регулярное выражение. Возможно, что-то вроде [этого] (http://www.regular-expressions.info/repeat.html) будет работать. –

+0

@GiovanniBotta Ваше утверждение не могло быть дальше от истины. ANTLR 4 использует пользовательскую реализацию моделирования NFA с кэшированием DFA по требованию. Нет ссылок на реализацию регулярного выражения Java в любом месте ANTLR 4, а тем более в самой реализации lexer. –

+0

Ничего себе, я не мог в это поверить, и я проверил репозиторий github. В основном нет ссылки на java.util.regex. Хороший улов! К сожалению, я не смог найти ссылку для регулярного выражения ANTLR4. Раньше у меня была книга, но я больше не делаю этого, я не могу подтвердить, что она там. –

ответ

1

Но это не так элегантно, и если диапазон велик, например, 1-255, это не так просто правило лексера.

Токсизировать только цифры и проверять числовое значение внутри слушателя или посетителя синтаксического анализатора.

Ссылки по теме: