Я работаю над домашним заданием, чтобы использовать Flex для создания лексера.Последнее требование, которое я должен выполнить:
Определение идентификаторов должно быть изменено таким образом, чтобы можно было включать подчеркивания, однако нельзя допускать использование последовательных подчеркиваний, начальных и конечных подчеркиваний.
Данное регулярное выражение [A-Za-z][A-Za-z0-9]*
.Распознать подчеркивание было легко, я просто добавил его во вторую группу, например [A-Za-z][A-Za-z0-9_]*
.Таким образом, регулярное выражение не соответствует ни одной строке с начальным подчеркиванием.
Проводя тщательную проверку, чтобы убедиться, что я не публикую то, что мне не нужно, я создал это регулярное выражение, которое, кажется, работает [A-Za-z]([A-Za-z0-9][_]?[A-Za-z0-9])*
.При этом начинается поиск буквы в начале, затем повторяющегося шаблона или буквенно-цифрового символа, возможного подчеркивания и буквенно-цифрового символа.Хотя это работает, я не думаю, что это то, что ожидается, и надеялся получить какой-нибудь совет относительно лучших способов
Я тестировал, используя следующие строки (предоставленные инструктором):
name_1
name__2
_name3
name4_