- •Лекция № 3 теория языков и формальных грамматик
- •3.1 Способы определения языков
- •3.2 Формальные грамматики
- •3.3 Грамматики с ограничениями на правила
- •Лекция № 4 способы записи синтаксиса языка. Распознаватели
- •4.1 Метаязык Хомского
- •4.2 Метаязык Хомского-Щутценберже
- •4.3 Бэкуса-Наура формы (бнф)
- •4.4 Расширенные Бэкуса-Наура формы (рбнф)
- •4.5 Диаграммы Вирта
- •Диаграмм Вирта
- •4.6 Распознаватели
- •Лекция № 5 демонстрационный язык программирования dpl
- •5.1 Синтаксис и семантика dpl
- •5.1.1 Элементарные конструкции
- •5.1.2 Составные конструкции. Организация программы
- •5.1.3 Краткое описание семантики языка
- •5.3 Описание пользовательского синтаксиса с использованием диаграмм Вирта
- •6.2 Транслитератор
- •6.3 Грамматики и распознаватели для лексического анализа
- •6.3.1 Связь между диаграммой Вирта и конечным автоматом
- •В эквивалентный конечный автомат
- •Задающая идентификатор
- •6.3.2 Связь между диаграммами Вирта и праволинейными грамматиками. Преобразование правой рекурсии в итерацию
- •Грамматик в диаграммы Вирта
- •В итеративную диаграмму Вирта
- •Идентификатора в итеративную диаграмму Вирта
- •Идентификатора в итеративную диаграмму Вирта (окончание)
- •6.3.3 Связь между диаграммами Вирта и грамматиками с левой рекурсией. Преобразование левой рекурсии в итерацию
- •В итеративную диаграмму Вирта
- •6.4 Методы лексического анализа
- •6.4.1 Организация непрямого лексического анализатора
- •Лексического анализатора
- •6.4.2 Организация прямого лексического анализатора
- •Прямого лексического анализатора
- •Лекция № 7 лексический анализатор демонстрационного языка программирования
- •7.1 Транслитератор dpl
- •7.1.1 Общая организация транслитератора
- •7.1.2 Программная реализация транслитератора
- •7.2 Непрямой лексический анализатор dpl
- •7.2.1 Диаграммы Вирта для отдельных автоматов непрямого лексического анализатора
- •7.2.1 Программная реализация отдельных автоматов
- •7.2.3 Общая структура непрямого лексического анализатора
- •7.3 Прямой лексический анализатор dpl
- •Прямого лексического анализатора
- •Прямого лексического анализатора (продолжение)
- •Прямого лексического анализатора (окончание)
- •Лекция № 8 общие принципы организации синтаксического разбора
- •8.1 Назначение синтаксического разбора
- •8.2 Классификация методов синтаксического разбора
- •Синтаксического разбора
- •8.3 Методы разбора
- •С операции умножения
- •Распознавателя самых нижних ветвей дерева выступает лексический анализатор
- •8.4 Последовательность разбора
- •8.5 Использование просмотра вперед
- •8.6 Использование возвратов
- •8.7 Выводы
- •Лекция № 9 использование автоматов с магазинной памятью для нисходящего разбора слева направо
- •9.1 Организация автомата с магазинной памятью
- •9.1.1 Операции автомата
- •9.1.2 Распознаватель скобочных выражений
- •9.2 Общая связь между грамматиками и автоматами с магазинной памятью
- •9.3 Связь между s-грамматикой и автоматом с магазинной памятью
- •9.3.1 Обобщенный алгоритм построения нисходящего амп
- •9.4 Построение автомата с магазинной памятью по q-грамматике
- •9.4.1 Построение нисходящего автомата
- •Заменить (αr), Сдвиг
- •Вытолкнуть, Сдвиг.
- •Вытолкнуть.
- •9.4.2 Примеры построения амп по q-грамматике
- •Список использованных источников
- •Содержание
9.4.1 Построение нисходящего автомата
Рассмотренные понятия и методы их использования приводят к небольшой корректировке правил порождения АМП по S-грамматике, чтобы получить процедуру создания автомата по q-грамматике. Эта корректировка касается только пункта 5. Можно, конечно, полностью переписать исправленный алгоритм создания автомата, но лучше воспользуемся авторским текстом [16]. Пятое правило заменяется двумя следующими:
5.1. Правило грамматики применяется всякий раз, когда магазинный символ является его левой частью, а входной символ принадлежит его множеству выбора. Для того чтобы применить правило вида:
A → bα,
используется переход:
Заменить (αr), Сдвиг
Если правило имеет вид:
A → b,
то используется:
Вытолкнуть, Сдвиг.
Для того чтобы применить правило:
A →
используется переход
Вытолкнуть.
5.2. Если имеется правило с нетерминалом A в левой части и элемент, соответствующий магазинному A и входному символу b не был создан по правилу 5.1, то таким элементом может быть или применение пустого правила (A → α ) или операция «Отвергнуть».
9.4.2 Примеры построения амп по q-грамматике
Построим автомат с магазинной памятью по q-грамматике, используемой выше для различных иллюстраций. Его таблица переходов будет иметь следующий вид.
Магазинные символы |
Входные символы |
|||
a |
b |
c |
┤ |
|
S |
↕ SA, → |
↑, → |
Отвергнуть |
Отвергнуть |
A |
↑ |
↑ |
↕ SA, → |
Отвергнуть |
|
Отвергнуть |
Отвергнуть |
Отвергнуть |
Допустить |
Следующий пример иллюстрирует использование правила 5.2, когда описанное в нем ячейка таблицы переходов может быть реализована любым из двух вариантов (для определенности выберем второй). Грамматика G9.5(S) описывается следующими правилами:
1. S → aA
2. S → b
3. A → cSa
4. A →
Множества выбора для каждого из правил будут выглядеть следующим образом:
ВЫБОР(1) = ВЫБОР (S → aA) = {a}
ВЫБОР(2) = ВЫБОР (S → b) = {b}
ВЫБОР(3) = ВЫБОР (A → сSa) = {c}
ВЫБОР(4) = ВЫБОР (A → )
= СЛЕД (A) = {a,
}
Полученные данные использованы для построения таблицы переходов. Ячейка, содержащая альтернативные правила, находится на пересечении строки с магазинным символом A и столбце с входным символом b.
Магазинные символы |
Входные символы |
|||
a |
b |
c |
┤ |
|
S |
↕ A, → |
↑, → |
Отвергнуть |
Отвергнуть |
A |
↑ |
1) ↑ или 2)Отвергнуть |
↕ aS, → |
↑ |
a |
↑, → |
Отвергнуть |
Отвергнуть |
Отвергнуть |
|
Отвергнуть |
Отвергнуть |
Отвергнуть |
Допустить |
Для того чтобы проверить, как действуют эти правила, необходимо ввести неправильную цепочку. Возьмем, например, цепочку ab. В первом случае используем выталкивание, которое ведет к отвержению цепочки на третьем шаге.
Номер шага |
Содержимое стека |
Остаток входной цепочки |
Применяемый переход |
Комментарий |
1 |
S |
ab┤ |
↕ A, → |
|
2 |
A |
b┤ |
↑ |
Использовано выталкивание |
3 |
|
b┤ |
Отвергнуть |
Все равно отвергли |
Во втором варианте цепочка отвергается уже на втором шаге.
Номер шага |
Содержимое стека |
Остаток входной цепочки |
Применяемый переход |
Комментарий |
1 |
S |
ab┤ |
↕ A, → |
|
2 |
A |
b┤ |
Отвергнуть |
На шаг раньше |
Распознавание вложенности скобок и q-грамматика
Теперь у нас достаточно знаний для построения простой грамматики, порождающей вложенные скобки. Данная q-грамматика содержит следующие правила:
S → (B)B
B → B)B
B →
Правила выбора выглядят следующим образом:
ВЫБОР(1) = ВЫБОР (S → (B)B ) = {(}
ВЫБОР(2) = ВЫБОР (B → B)B ) = {(}
ВЫБОР(3) = ВЫБОР (B → ) = СЛЕД (B) = {), ┤}
Они лишний раз подтверждают, что мы построили q-грамматику. Следует специально отметить, что, начиная с q-грамматики, далее постоянно приходиться доказывать принадлежность грамматики заданному классу, чтобы затем использовать необходимые процедуры построения автомата. Таблица переходов данного автомата будет выглядеть следующим образом:
Магазинные символы |
Входные символы |
||
( |
) |
┤ |
|
S |
↕ B)B, → |
Отвергнуть |
Отвергнуть |
B |
↕ B)B, → |
↑ |
↑ |
) |
Отвергнуть |
↑, → |
Отвергнуть |
|
Отвергнуть |
Отвергнуть |
Допустить |
