В целом подсистема 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
.