[ Содержание ] [ Следующая ]

Введение

Название

    flex,lex - ЛЕКСИЧЕСКИЙ АНАЛИЗАТОР

Синтаксис

flex [-bcdfhilnpstvwBFILTV78+ 
      -C[aefFmr]
      -Pprefix
      -Sskeleton] 
      [filename ...]

    flex(1) - это генератор программ, предназначенный для лексической обработки символьных входных данных. Он принимает проблемно-ориентированную спецификацию на высоком уровне и формирует программу на языке СИ, которая работает с регулярными выражениями. Регулярные выражения определяются пользователем в ключевой спецификации, выдаваемой программе lex. Система lex распознает эти выражения и разделяет входные данные на блоки в соответствии с ними. На границах между блоками исполняются фрагменты программ, разработанные пользователем. исходный файл lex объединяет регулярные выражения и фрагменты программ. По мере того, как выражения появляются на входе программы, составленной lex, соответствующий фрагмент подается на выполнение.

    Пользователь вводит добавочные фрагменты программ, необходимые для комплектования его задания, включая коды, написанные другими генераторами. Программа, распознающая выражения, формируется из фрагментов программ пользователя на языке СИ. lex - это не полный язык, а только генератор, представляющий новую возможность, которая дополняет возможности языка СИ.

    lex превращает выражения и команды пользователя (называемые в этой главе источником) в программу на языке СИ, имеющую название yylex. Программа yylex распознает выражения во входном потоке (называемые в этой главе входными) и осуществляет специальные операции для каждого выражения, как только оно встретится.

    Рассмотрим программу, удаляющую из стандартного файла ввода все пробелы и знаки табуляции в конце строк. Для этого требуются только следующие строки:

%%
[\t]+$;

    Программа содержит разграничитель %%, выделяющий начало фрагмента и одно правило. Это правило содержит регулярное выражение, которое выбирает один или более экземпляров пробелов или знаков табуляции (для наглядности пишется \t, в соответствии с правилами языка СИ) до конца строки. Скобки указывают на знаковый класс знака табуляции или пробела, + обозначает один или несколько предыдущих пунктов, и знак $ указывает на конец строки. Никаких действий не определяется, поэтому программа, созданная lex, будет просто игнорировать эти символы. Все остальное будет копироваться. Чтобы преобразовать любую цепочку пробелов и знаков табуляции в единственный пробел, добавьте еще одно правило:

%%
[\t]+$;
[\t]+ printf("");

    Программа, созданная по этому источнику, проверяет сразу два правила: контролирует окончание строки пробелов и знаков табуляции и проверяет, имеется ли знак новой строки, затем выполняет действие, предписанное правилом.

[ Содержание ] [ Следующая ]

c 1998-2000 SoloTony (Antonio Solo) mailto:solotony@mail.ru