![]()
|
|||
Генератор лексических анализаторов Lex3.5 Генератор лексических анализаторов Lex В этом разделе мы познакомимся с программным инструментом под названием Lex (или, в более поздних реализациях, Flex), который позволяет определить лексический анализатор, указывая регулярные выражения для описания шаблонов токенов. Входные обозначения для Lex обычно называют языком Lex, а сам инструмент — компилятором Lex. Компилятор Lex преобразует входные шаблоны в диаграмму переходов и генерирует код (в файле с именем lex.yy.c), имитирующий данную диаграмму переходов. 3.5.1 Использование Lex На рис. 3.22 показана схема использования Lex. Входной файл lex.1 написан на языке Lex и описывает генерируемый лексический анализатор. Компилятор Lex преобразует lex.1 в программу на языке программирования С в файле с именем lex.yy.c. Этот файл компилируется компилятором С в файл с названием а.out, как обычно. Выход компилятора С представляет собой работающий лексический анализатор, который может получать поток входных символов и выдавать поток токенов.
Рис. 3.22. Создание лексического анализатора с помощью Lex Обычно скомпилированная программа на языке С, которая на рис. 3.22 показана как a.out, используется в качестве подпрограммы синтаксического анализатора. Это функция на языке программирования С, которая возвращает целое число, представляющее собой код одного из возможных имен токенов. Значение атрибута, которое может быть другим числовым кодом, указателем на запись таблицы символов или просто отсутствовать, помещается в глобальную переменную yylval[1], которая совместно используется лексическим и синтаксическим анализаторами. Этот метод позволяет вернуть из функции как имя токена, так и значение его атрибута.
|
|||
|