Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lex.docx
Скачиваний:
12
Добавлен:
20.03.2016
Размер:
133.64 Кб
Скачать

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]