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


FLEX(1) - часть 14


Первые два правила используются для вещественных чисел; в обоих необходима десятичная точка и десятичная часть. В первом правиле необходима хотя бы одна цифра перед десятичной точкой; во втором - хотя бы одна цифра после десятичной точки. Чтобы успешно разрешить проблемы, возникающие в языке FORTRAN при применении выражений вида 35.Q.I, которые не содержат целых чисел, помимо обычных правил для целых чисел используется контекс тно-зависимое правило:

[0-9]+/"."EQ printf("integer");

Секция определений может содержать также другие команды, включая таблицу символов, список стартовых условий, соглашения о размерах массивов по умолчанию, содержащиеся внутри самого lex для исходных программ большого размера. Эти возможности описываются в разделе "Формат источника".

lex и yacc


Если вы используете lex совместно с yacc, помните: все написанное lex заносится в программу с именем yylex(); это имя потребуется анализатору yacc. Обычно принимаемая по умолчанию главная программа библиотеки lex вызывает эту подпрограмму. Но если yacc загружен и используется его главная программа, yacc будет вызывать yylex(). В этом случае все правила lex будут оканчиваться:

return (token);

которое возвращает значение соответствующей лексемы.

Простой способ получить доступ к именам лексем yacc - оттранслировать выходной файл lex как часть выходного файла yacc, поместив в последнюю секцию входных данных yacc следующую строку:

#include "lex.yy.c"

Предположим, грамматика имеет имя good, а лексические правила - имя better, тогда нужная последовательность команд XENIX может быть такой:

yacc good lex better cc y.tab.c-ly-ll

Библиотеку yacc(-ly) следует загрузить до загрузки библиотеки lex, чтобы получить главную программу, вызывающую анализатор yacc. Генерация программ lex и yacc может быть осуществлена в любом порядке.

В качестве простой задач, рассмотрим копировани входного файла с прибавлением 3 к каждому положительному числу, кратному 7. Вот пример исходной программы lex, показывающей как это делать:




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