[ Содержание ] [ Предыдущая ] [ Следующая ]
Вспомним формат источника lex:
{ определения } %% { правила } %% { подпрограммы пользователя }
Пока что были описаны только провила. Вам понадобятся дополнительные опции хотя бы для определения используемых в вашей программе переменнных и для самого lex. Это можно сделать или в секции определений или в секции правил.
Помните, что lex превращает правила в программу. Любой источник, не перехваченный lex, копируется в созданную программу. Существуют три класса подобных случаев:
Определения, предназначенные для lex, задаются до первого ограничителя %%. Любая строка этой секции, не заключенная между %{ и %} начинающаяся в первом столбце, рассматривается как определение замещающих строк lex. Формат этих строк следующий:
имя перевод
Это вызывает сопоставление строки, заданной как "перевод", с соответствующим именем. Имя и перевод должны разделяться, по крайней мере, одним пробелом или знаком табуляции, причем имя должно начинаться с буквы. Перевод может быть указан в правиле в формате {name}. Например, использование {D} для цифр и {E} для порядка экспоненты может сократить правила распознавания чисел:
D [0-9] E [DEde][-+]?{D}+ %% {D}+ printf("inreger"); {D}+"."{D}*({E})? | {D}*"."{D}+({E})? | {D}+{E} printf("real");
Первые два правила используются для вещественных чисел; в обоих необходима десятичная точка и десятичная часть. В первом правиле необходима хотя бы одна цифра перед десятичной точкой; во втором - хотя бы одна цифра после десятичной точки. Чтобы успешно разрешить проблемы, возникающие в языке FORTRAN при применении выражений вида 35.Q.I, которые не содержат целых чисел, помимо обычных правил для целых чисел используется контекстно-зависимое правило:
[0-9]+/"."EQ printf("integer");
Секция определений может содержать также другие команды, включая таблицу символов, список стартовых условий, соглашения о размерах массивов по умолчанию, содержащиеся внутри самого lex для исходных программ большого размера. Эти возможности описываются в разделе "Формат источника".
[ Содержание ] [ Предыдущая ] [ Следующая ]
c 1998-2000 SoloTony (Antonio Solo) | mailto:solotony@mail.ru |