- •Введение
- •Формальные грамматики. Выводы Основные понятия
- •Способы задания языков
- •Операции над языками
- •Формальные грамматики. Выводы
- •Преобразования кс-грамматик Основные понятия
- •Устранение лишних символов
- •Исключение лишних правил
- •Исключение -правил
- •Устранение цепных правил
- •Выделение нетерминала
- •Левая факторизация
- •Устранение левой рекурсии
- •Устранение правой рекурсии
- •Нормальная форма Хомского
- •Нормальная форма Грейбах
- •Операторная кс-грамматика
- •Регулярные языки и конечные распознаватели Правосторонние грамматики
- •Левосторонние грамматики
- •Связь правосторонних и левосторонних грамматик
- •Преобразование кс-грамматики произвольного вида в правостороннюю
- •Конечные распознаватели. Основные понятия
- •Преобразование недетерминированных конечных распознавателей с -переходами в детерминированные
- •Эквивалентность состояний конечных детерминированных распознавателей
- •Эквивалентность конечных детерминированных распознавателей
- •Минимизация конечных детерминированных распознавателей
- •Регулярные множества и регулярные выражения
- •Регулярные выражения и конечные распознаватели
- •Получение регулярного выражения из конечного распознавателя
- •Построение конечного распознавателя по регулярному выражению
- •Конечные распознаватели и регулярные грамматики
- •Получение грамматики из конечного распознавателя
- •Построение конечных распознавателей по регулярным грамматикам
- •Ещё один способ взаимного преобразования право- и левосторонних грамматик
- •Программная реализация конечных детерминированных распознавателей
- •Лексический анализ
- •Принципы построения лексических анализаторов
- •Определение границ лексем
- •Выполнение действий, связанных с лексемами
- •Выделение ключевых слов
- •Программная реализация лексических анализаторов
- •Глава 3. Синтаксический анализ
- •3.1. Автомат с магазинной памятью
- •3.2. Таблично-управляемый предсказывающий разбор
- •3.2.1. Алгоритм разбора сверху-вниз
- •3.2.2. Множества first и follow
- •3.2.3. Конструирование таблиц предсказывающего анализатора
- •3.2.4. Ll(1)-грамматики
- •3.2.7. Рекурсивный спуск
- •3.3. Разбор снизу-вверх типа сдвиг-свертка
- •3.3.1. Основа
- •3.3.2. Lr(k)-анализаторы
- •3.3.4. Конфликты разбора типа сдвиг-свертка
Построение конечных распознавателей по регулярным грамматикам
К регулярным грамматикам относятся право- и левосторонние грамматики, которые можно преобразовать в автоматные право- и левосторонние грамматики. По автоматным грамматикам можно построить конечные распознаватели, “обратив” алгоритмы получения автоматных грамматик из конечных распознавателей.
Алгоритм построения конечного распознавателя по автоматной правосторонней грамматике.
1. Множеством входных символов распознавателя сделать множество терминалов грамматики.
2. Множеством состояний распознавателя сделать множество нетерминалов грамматики, а начальным состоянием – состояние, соответствующее начальному нетерминалу.
3. Если в грамматике есть правило Si x Sj , то в распознавателе ввести переход из состояния si в состояние sj под действием входного символа х.
4. Если в грамматике есть правило Si , то состояние si сделать допускающим.
В результате выполнения алгоритма может быть получен детерминированный или недетерминированный распознаватель без -переходов с одним начальным состоянием.
Алгоритм построения конечного распознавателя по автоматной левосторонней грамматике.
1. Множеством входных символов распознавателя сделать множество терминалов грамматики.
2. Множеством состояний распознавателя сделать множество нетерминалов грамматики, а допускающим состоянием – состояние, соответствующее начальному нетерминалу.
3. Если в грамматике есть правило Si Sj х , то в распознавателе ввести переход в состояние si из состояния sj под действием входного символа х.
4. Если в грамматике есть правило Si , то состояние si сделать начальным.
В результате выполнения алгоритма может быть получен детерминированный или недетерминированный распознаватель без -переходов с одним допускающим состоянием.
Ещё один способ взаимного преобразования право- и левосторонних грамматик
Алгоритмы построения конечных распознавателей по право- и левосторонним грамматикам и получения право- и левосторонних грамматик из конечных распознавателей можно использовать для взаимного преобразования право- и левосторонних грамматик.
Алгоритм преобразования правосторонней грамматики в левостороннюю.
1. Правостороннюю грамматику преобразовать в автоматную правостороннюю.
2. По автоматной правосторонней грамматике построить конечный распознаватель.
3. Получить левостороннюю грамматику из конечного распознавателя.
Алгоритм преобразования левосторонней грамматики в правостороннюю.
1. Левостороннюю грамматику преобразовать в автоматную левостороннюю.
2. По автоматной левосторонней грамматике построить конечный распознаватель.
3. Получить правостороннюю грамматику из конечного распознавателя.
Пример.
Автоматная Конечный Автоматная
правосторонняя распознаватель левосторонняя
г рамматика грамматика
1
.
AaB
1.
EDa
2
.
AbD
c b 2.
EBb
3. BaC a 3. ABc
4. BcA 4. A
5
.
BbE
5.
BAa
6. CcB a b a 6. BCc
7. DaE c 7. CBa
8. E 8. DAb
