next up previous contents
Next: Регулярные выражения Up: LEX - лексический анализатор Previous: Введение   Contents

Команда lex

В целом подсистема LEX для систем UNIX включает следующие файлы:

/usr/ccs/bin/lex; lex.yy.c; /usr/ccs/lib/lex/ncform; /usr/lib/libl.a; /usr/lib/libl.so. В каталоге /usr/ccs/lib/lex имеется файл-заготовка ncform, который LEX используется для построения ЛА. Этот файл является уже готовой программой лексического анализа. Но в нем не определены действия, которые необходимо выполнять при распознавании лексем, отсутствуют и сами лексемы, не сформированы рабочие массивы и т.д. С помощью команды lex файл ncform достраивается. В результате мы получаем файл со стандартным именем lex.yy.c. Если LEX-программа размещена в файле program.l, то для получения ЛА с именем program необходимо выполнить следующий набор команд:

lex program.l cc lex.yy.c -ll -o program Если имя входного файла для команды lex не указано, то будет использоваться файл стандартного ввода. Флаг -ll требуется для подключения /usr/ccs/lib/libl.a - библиотеки LEX. Если необходимо получить самостоятельную программу, как в данном случае, подключение библиотеки обязательно, поскольку из нее подключается главная функция main. В противном случае, если имеется необходимость включить ЛА в качестве функции в другую программу (например, в программу синтаксического анализа), эту библиотеку необходимо вызвать уже при сборке. Тогда, если main определен в вызывающей ЛА программе, редактор связей не будет подключать раздел main из библиотеки LEX.

Общий формат вызова команды lex:

lex [-ctvn -V -Q[y|n]] [file] Флаги:

-c - включает фазу генерации Си-файла (устанавливается по умолчанию);

-t - поместить результат в стандартный файл вывода, а не в файл lex.yy.c;

-v - вывести размеры внутренних таблиц;

-n - не выводить размеры таблиц (устанавливается по умолчанию);

-V - вывести информацию о версии LEX в стандартный файл ошибок;

-Q - вывести (Qy) либо не выводить (Qn, устанавливается по умолчанию) информацию о версии в файл lex.yy.c.



2004-06-22