Разработка компиляторов

       

Способы записи регулярных выражений в Lex-программе


Рассмотрим способы записи регулярных выражений во входном языке Lex'а. Символ из входного алфавита, естественно, представляет регулярное выражение из одного символа. Специальные символы (в том числе +-*?()[]{}|/\^$.<>) записываются после префикса \. Символы и цепочки можно брать в кавычки, например допустимы следующие три способа кодирования символа а: а, "а" и \а.

Имеется возможность задания класса символов:

[0-9] или [0123456789] - любая цифра [A-Za-z] - любая буква [^0-7] - любая литера, кроме цифр от 0 до 7 . - любая литера, кроме \n

Грамматика для записи регулярных выражений (в порядке убывания приоритета):

<р>* - повторение 0 или более раз <р>+ - повторение 1 или более раз <р>? - необязательный фрагмент <р><р> - конкатенация <р>{m,n} - повторение от m до n раз <р>{m} - повторение m раз <р>{m,} - повторение m или более раз ^<р> - фрагмент в начале строки <р>$ - фрагмент в конце строки <р>|<р> - любое из выражений <р>/<р> - первое выражение, если за ним следует второе (р) - скобки, используются для группировки

Пример. Регулярное выражение ^[^aeiou]*$ означает любую строку, не содержащую букв a, e, i, o .



Содержание раздела