Unix Man (Справочное руководство)


FLEX(1) - часть 5


(ab|cd+)?(ef)*

которое подбирает такие литерные цепочки, как abefef, efefef, cdef и cddd, но не abc, abcd или abcdef.

Описание зависимости от контекста


lex распознает только малую часть окружающего контекста. Для этого используются два простейших оператора: знак (^) и знак доллара ($). Если (^) - первый знак выражения, то выражение сопоставляется только в начале строки (после символа новой строки или в начале входного потока). Это не может противоречить другому значению символа (^), дополнению класса символов, так как дополнение применяется только внутри скобок. Если самым последним символом является зкак доллара, то выражение сопоставляется только в конце строки (если за ним сразу же следует знак новой строки). Этот оператор является частным случаем оператора косой черты (/), который указывает на последующий контекст. Выражение

ab/cd

подбирает строку ab, если за ней идет cd. Таким образом:

ab$

это то же самое, что

ab/\n

Левый контекст управляется из lex путем описания стартовых условий, которые объясняются в разделе "Описание зависимости от левого контекста". Если правило должно выполняться только в случае нахождения автоматического интерпретатора lex в стартовой позиции x, то оно должно быть заключено в угловые скобки:

<x>

Если мы считаем что стартовое условие ONE находится в начале строки, то оператор (^) будет эквивалентен

<ONE>

Стартовые условия будут детально описаны в этой главе.

Описание повторения выражений


Фигурные скобки ({ }) описывают или повторения (если они содержат число), или определение расширения (если оно содержит имя). Например:

{digit}

ищет встроенную строку символов с именем digit и вставляет ее в данное место выражения.

Описание определений


Определения задаются в первой части ввода lex, перед правилами.

a{1,5}

наоборот, ищет от 1 до 5 экземпляров символа a.

Наконец, начальный знак процента (%) является специальным, поскольку он разграничивает сегменты источника lex.

Описание действий


Когда выражение сопоставляется с образцом текста на вводе, lex выполняет соответствующие действия. Этот раздел описывает некоторые особенности lex, которые помогают при описании действий. Заметим, что существует действие по умолчанию, которое копирует входные данные на выход. Это выполняется для всех символов, которые в противном случае не сопоставляются. Таким образом, пользователь lex, который желает произвести полный ввод без какого-либо вывода, должен составить правила, подбирающие все данные. Если lex используется совместно с yacc, то это считается нормальной ситуацией. Вы можете рассматривать эти действия, как заменяющие копирование входных данных в выходные. Таким образом, правило простого копирования может быть опущено. Самое простое, что можно сделать, это проигнорировать ввод. Описание в качестве действия пустого оператора языка СИ приводит именно к этому результату. Часто используется правило




Начало  Назад  Вперед



Книжный магазин