- •1. Введение
- •2. Регулярные выражения в Lex-правилах
- •2.1. Обозначения символов в выражениях
- •2.2. Операторы регулярных выражений
- •2.3. Оператор выделения классов символов
- •2.4. Повторители
- •2.5. Операторы выбора
- •2.6. Оператор {}
- •3. Структура Lex-программы
- •3.1. Раздел определений Lex-программы
- •3.2. Раздел правил
- •3.2.1. Действия в правилах Lex-программы
- •3.2.2. Порядок действия активных правил
- •3.3. Раздел программ пользователя
- •3.4. Комментарии Lex-программы
- •3.5. Примеры Lex-программ
- •4. Структура файла lex.Yy.C
- •5. Функция yywrap()
- •6. Функция reject
- •7. Функции yyless и yymore
- •8. Совместное использование lex и yacc
- •9. Использование Ратфора
- •10. Флаги Lex
9. Использование Ратфора
lex можно использовать для генерации программ лексичес-
кого анализа на Ратфоре. Для этого в первой строке раздела
определений необходимо указать %R. Все сказанное выше об
использовании Си в качестве host-языка относится и к Рат-
фору. Необходимо учесть, что Ратфор имеет свою библиотеку
ввода-вывода. Однако, состав функций lex для Ратфора тот же,
что и для Си. Есть и функция, выделенная только для Ратфора
- lexshf. Функция lexshf переводит внутреннее представление
символа (младший байт) из Си во внутреннее представление
символа в Фортране (старший байт).
Дествия правил Lex-программы для Ратфора оформляются в
виде вычисляемых goto в выходном файле, который называется
lex.yy.r.
Допустим, имеется исходный файл source.l с Ратфором в
качестве host-языка, тогда для получения лексического анали-
затора необходимы следующие действия:
% lex source.l
% rc lex.yy.r -llr
Напомним, что в Ратфоре индексы массивов начинаются с 1,
поэтому, например, yytex[yyleng] - это последний полученный
из входного потока символ.
10. Флаги Lex
-t поместить результат в стандартный файл вывода, а не в
файл lex.yy.c;
-v вывести размеры внутренних таблиц;
-f ускорить работу, не упаковывая таблицы (только для
небольших программ);
39
-n не выводить размеры таблиц (устанавливается по умолча-
нию);
-d используется при отладке lex.
Имеется возможность собрать анализатор для диагностики.
Для этого необходимо компиляцию файла lex.yy.c осуществлять
с подключением разделов диагностики:
cc -d -DLEXDEBUG lex.yy.c
При работе полученного таким образом анализатора будет выво-
диться диагностика действий. Флаг -d, кроме того, позволяет
проверить текст программы lex.yy.c с помощью текстового
отладчика cdeb.
40
СОДЕРЖАНИЕ
. Аннотация ......................................... 2
1. Введение .......................................... 3
2. Регулярные выражения в Lex-правилах ............... 8
2.1. Обозначения символов в выражениях ............... 8
2.2. Операторы регулярных выражений .................. 9
2.3. Оператор выделения классов символов ............. 9
2.4. Повторители ..................................... 9
2.5. Операторы выбора ................................ 10
2.6. Оператор {} ..................................... 11
2.7. Оператор <>. Служебные слова START и BEGIN ...... 12
3. Структура Lex-программы ........................... 15
3.1. Раздел определений Lex-программы ................ 15
3.2. Раздел правил ................................... 18
3.2.1. Действия в правилах Lex-программы ............. 19
3.2.2. Порядок действия активных правил .............. 21
3.3. Раздел программ пользователя .................... 22
3.4. Комментарии Lex-программы ....................... 22
3.5. Примеры Lex-программ ............................ 22
4. Структура файла lex.yy.c .......................... 26
5. Функция yywrap() .................................. 27
6. Функция REJECT .................................... 29
7. Функции yyless и yymore ........................... 30
8. Совместное использование lex и yacc ............... 32
9. Использование Ратфора ............................. 39
10. Флаги Lex ......................................... 39
41
Популярность: 5, Last-modified: Mon, 29 Jun 1998 14:01:55 GMT