Предварительные утверждения (регулярные выражения) не работают в 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]+)* 
Другие вопросы по тегам