Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Использование Lex

Читайте также:
  1. I. Использование функции Подбор параметра
  2. V. Использование дополнительной информации для принятия решения
  3. АВТОР ВПРАВЕ ОГРАНИЧИВАТЬ РАЗРЕШЕНИЕ НА ИСПОЛЬЗОВАНИЕ СВОЕГО ПРОИЗВЕДЕНИЯ ПРОСТРАНСТВЕННО-ВРЕМЕННЫМИ РАМКАМИ
  4. Активизация и использование ментальных механизмов как сущность подхода Эриксона; как успокоить пациента, "излучая" одобрение и поддержку
  5. Альтернативные системы теплоснабжения с использованием тепловых насосов
  6. Анализ прибыли и рентабельности с использованием международных стандартов
  7. В данной ситуации криминалистической тактикой рекомендуется использование следующих тактических приемов.

Расширения регулярных выражений

С тех пор как в 1950-х годах Клини (Kleene) ввел регулярные выражения с ба­зовыми операторами для объединения, конкатенации и замыкания Клини, к ним было добавлено много расширений, повышающих их способность определять строковые шаблоны. К сожалению, в настоящее время не определены стандарты на запись расширенных регулярных выражений, и в языках программирования нотация записи шаблонов может несколько отличаться. Здесь мы рассмотрим несколько расширений в записи ре­гулярных выражений, которые первоначально появились в утилитах Unix, таких как Lex, и которые в особенности полезны при определении лексических ана­лизаторов.


 

Выражение Соответствие Пример
с Один неоператорный символ с а
Символ с буквально \*
"s" Строка s буквально "**"
Любой символ, кроме символа новой строки \n а.*b
^ Начало строки ^аbс
$ Конец строки abc$
[s] Любой символ из s [abc]
[^s] Любой символ, не входящий в s [^abc]
r* Нуль или более строк, соответствующих r а*
г+ Одна или более строк, соответствующих r а+
г? Нуль или одно r а?
r{m,n} От т до n повторений r а{1,5}
r1r2 r1, за которым следует r2, конкатенация ab
r1|r2 r1 или r2, объединение а|b
(г) То же, что и r, группировка (a|b)
r1/r2 r1, если за ним следует r2 abc/123

Рис. 3.8. Регулярные выражения Lex.

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

В этом разделе мы познакомимся с программным инструментом под названи­ем Lex (или, в более поздних реализациях, Flex), который позволяет определить лексический анализатор, указывая регулярные выражения для описания шабло­нов токенов. Входные обозначения для Lex обычно называют языком Lex, а сам инструмент — компилятором Lex. Компилятор Lex преобразует входные шаблоны в диаграмму переходов и генерирует код (в файле с именем lex.yy.c), ими­тирующий данную диаграмму переходов.

Использование Lex

На рис. 3.22 показана схема использования Lex. Входной файл lex.1 напи­сан на языке Lex и описывает генерируемый лексический анализатор. Компилятор Lex преобразует lex.1 в программу на языке программирования С в файле с име­нем lex.yy.c. Этот файл компилируется компилятором С в файл с названием а.out, как обычно. Выход компилятора С представляет собой работающий лекси­ческий анализатор, который может получать поток входных символов и выдавать поток токенов.

Рис. 3.22. Создание лексического анализатора с помощью Lex

Обычно скомпилированная программа на языке С, которая на рис. 3.22 по­казана как a.out, используется в качестве подпрограммы синтаксического ана­лизатора. Это функция на языке программирования С, которая возвращает целое число, представляющее собой код одного из возможных имен токенов. Значе­ние атрибута, которое может быть другим числовым кодом, указателем на запись таблицы символов или просто отсутствовать, помещается в глобальную перемен­ную yylval[1], которая совместно используется лексическим и синтаксическим анализаторами. Этот метод позволяет вернуть из функции как имя токена, так и значение его атрибута.


Дата добавления: 2015-07-12; просмотров: 101 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Хай-тек остановка.| Структура программ Lex

mybiblioteka.su - 2015-2024 год. (0.005 сек.)