Хелпикс

Главная

Контакты

Случайная статья





Генератор лексических анализаторов Lex



3.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], которая совместно используется лексическим и синтаксическим анализаторами. Этот метод позволяет вернуть из функции как имя токена, так и значение его атрибута.



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.