Предварительные утверждения (регулярные выражения) не работают в JFlex
Я пытаюсь создать сканер с помощью JFlex.
Одно из правил идентификатора для грамматики, которую я пытаюсь реализовать, заключается в следующем (в синтаксисе регулярных выражений):
[a-zA-Z]((_(?!_)|[a-zA-Z0-9])*[a-zA-Z0-9])?
Я убедился, что приведенное выше выражение действительно допустимо и работает. Тем не менее, кажется, что jFlex 1.4.3 не нравится мое использование прогнозного утверждения (?!_)
как он продолжает жаловаться на "знак вопроса". Есть ли что-то, что я делаю не так, или есть другое, чтобы использовать Lookaheads в JFlex?
Я использую "lookahead" для удовлетворения правила, которое гласит, что в имени идентификатора не может быть двух последовательных подчеркиваний.
Любая помощь будет оценена.
1 ответ
Решение
Вместо
[a-zA-Z]((_(?!_)|[a-zA-Z0-9])*[a-zA-Z0-9])?
использовать оптимизированный шаблон
[a-zA-Z]+(_[a-zA-Z0-9]+|[a-zA-Z0-9]+)*