- •1. Введение
- •2. Регулярные выражения в Lex-правилах
- •2.1. Обозначения символов в выражениях
- •2.2. Операторы регулярных выражений
- •2.3. Оператор выделения классов символов
- •2.4. Повторители
- •2.5. Операторы выбора
- •2.6. Оператор {}
- •3. Структура Lex-программы
- •3.1. Раздел определений Lex-программы
- •3.2. Раздел правил
- •3.2.1. Действия в правилах Lex-программы
- •3.2.2. Порядок действия активных правил
- •3.3. Раздел программ пользователя
- •3.4. Комментарии Lex-программы
- •3.5. Примеры Lex-программ
- •4. Структура файла lex.Yy.C
- •5. Функция yywrap()
- •6. Функция reject
- •7. Функции yyless и yymore
- •8. Совместное использование lex и yacc
- •9. Использование Ратфора
- •10. Флаги Lex
2. Регулярные выражения в Lex-правилах
Регулярные выражения определяют лексему. Регулярное
выражение может содержать символы латинского и русского
алфавитов в верхнем и нижнем регистрах, другие символы
(цифры, знаки препинания и т.д.) и символы-операторы.
Операторы позволяют осуществлять различные действия над
выделенной цепочкой символов. Операторы также обозначаются
символами.
2.1. Обозначения символов в выражениях
В выражении можно использовать любой символ. Символ
можно указывать в двойных кавычках. В этом случае это всегда
просто символ - его специальное значение отменяется. Напри-
мер:
"abc"
abc
эти последовательности символов идентичны.
. точка означает любой символ, кроме символа новой строки
"\n";
\восьмеричный_код_символа
указание символа его восьмеричным кодом (как в Си);
\n символ новой строки;
\t символ табуляции;
\b возврат курсора на один шаг назад;
8
пробел
любой символ пробела в выражении, если он не находится
внутри квадратных скобок, необходимо заключать в двой-
ные кавычки. Это необходимо, так как пробел и табуляция
используются lex в качестве разделителя между определе-
нием и действием в правиле.
2.2. Операторы регулярных выражений
Операторы обозначаются символами-операторами, к ним
относятся:
\ ^ ? * + | $ / %
[] {} () <<>>
Каждый из этих символов или пар скобок в регулярном выраже-
нии играет роль оператора. Если необходимо отменить специ-
альное значение символа, обозначающего оператор, перед ним
нужно поставить символ \ или указать его в двойных кавычках.
Например:
abc+ - символ "+" - оператор;
abc\+ - символ "+";
abc"+" - символ "+".
2.3. Оператор выделения классов символов
Квадратные скобки задают классы символов, которые в них
заключены.
[abc]
означает либо символ "a", либо "b", либо символ "c";
Знак - используется для указания любого символа из лек-
сикографически упорядоченной последовательности:
[A-z]
означает любой латинский символ;
[А-Я]
любая прописная русская буква;
[+-0-9]
все цифры и знаки "+" и "-".
2.4. Повторители
Когда необходимо указать повторяемость вхождения сим-
вола в регулярном выражении, используют операторы-
повторители * и +.
9
Оператор * означает любое (в том числе и 0) число вхож-
дений символа или класса символов. Например:
x* любое число вхождений символа "x";
abc* любое число вхождений цепочки "abc";
[A-z]*
любое число вхождений любой латинской буквы;
[A-ZА-Яa-zа-я_0-9]*
любое вхождение русских и латинских букв, знака подчер-
кивания и цифр.
Оператор + означает одно и более вхождений. Например:
x+ одно или более вхождений "x";
[0-9]+
одно или более вхождений цифр;
abc+ одно или более вхождений цепочки abc;
[A-z]+
одно или более вхождений любой латинской буквы.