регулярные выражения flex (лексический анализатор) — Повторное использование определений

#regex #flex-lexer #lexical-analysis

Вопрос:

У меня есть это рабочее определение:

 IDENTIFIER   [a-zA-Z][a-zA-Z0-9]*
 

Я не хочу повторять [a-zA-Z] и [0-9], поэтому я сделал два новых определения

 DIGIT    [0-9]
VALID    [a-zA-Z]
 

Как я могу переписать правило ИДЕНТИФИКАТОРА, чтобы использовать ПРАВИЛЬНЫЕ и ДОПУСТИМЫЕ определения?

Я не знаю, как провести «второй» матч, я застрял здесь:

 IDENTIFIER {VALID}[{VALID}{DIGIT}]* // This syntax is incorrect
 

Спасибо.

Редактировать: Вся тестовая программа, которую я использую: http://pastebin.com/f5b64183f.

Ответ №1:

Похоже, ты действительно хочешь:

 IDENTIFIER {VALID}({VALID}|{DIGIT})*
 

[{VALID}{DIGIT}] решения [[A-Za-z][0-9]] , которые не являются юридической конструкцией.

Комментарии:

1. Отлично. Вы аккуратно перешли к делу, в отличие от меня, который предпринял три попытки. Поэтому я удалил свой довольно запутанный ответ. Извините, что не поднял голос, но я использовал все свои голоса на сегодня 🙁

2. @Дэвид Арно: Не стесняйтесь вернуться завтра и ответить на мой вопрос. 🙂

Ответ №2:

Я думаю, что это сработает, но я не могу это проверить. У вас есть примеры данных?

 (?:[a-zA-Z]) (?:[0-9])