- •Автор: старший преподаватель кафедры Прикладной Математики и Информатики им. Ю.В.Кожевникова Сергей Викторович Сотников.
- •2.3. Общие методы синтаксического анализа 81
- •1. Класс контекстно-свободных языков (V-3.0 28.02.2009)
- •1.1. Свойства кс-языков
- •1.1.1. Теорема Огдена. Лемма о разрастании кс-языков
- •1.2. Приведение кс-грамматик
- •1.2.5. Удаление цепных правил
- •Удаление недостижимых символов;
- •Удаление бесплодных (бесполезных) символов;
- •Удаление цепных правил;
- •1.2.5.1. Алгоритм удаления цепных правил
- •1.3. Нормализация грамматик (Приведение кс-грамматик к нормальной форме)
- •1.3.1.1. Алгоритм преобразования к нормальной форме Хомского
- •1.3.2.1. Устранение левой (правой) рекурсии
- •1.3.2.1.1. Алгоритм устранения левой рекурсии
- •1.3.2.2. Преобразование нелеворекурсивной приведенной кс-грамматики к нормальной форме Грейбах
- •1.3.2.2.1. Алгоритм преобразования нелеворекурсивной приведенной кс-грамматики к нормальной форме Грейбах
- •1.3.2.3. Другой способ преобразования кс-грамматики к нормальной форме Грейбах (Метод Розенкранца)
- •1.3.2.3.1. Алгоритм метода Розенкранца
- •1.4. Автоматы с магазинной памятью (mп-автоматы)
- •1.5. Соотношения между различными мп-автоматами
- •1.5.1. Алгоритм построения мп-автомата по расширенному мп-автомату
- •1.5.2. Алгоритм построения расширенного мп-автомата по мп-автомату
- •1.5.3.1. Алгоритм построения по мп-автомату мп-автомата, допускающего цепочки опустошением магазина
- •1.5.3.1. Алгоритм построения мп-автомата по мп-автомату, допускающего цепочки опустошением магазина
- •1.6. Эквивалентность мп-автоматов и кс-грамматик
- •1.6.1. Алгоритм построения мп-автомата по произвольной кс-грамматике
- •1.6.2. Алгоритм построения расширенного мп-автомата по произвольной кс-грамматике
- •1.6.3. Алгоритм построения кс-грамматики для произвольного мп-автомата
- •1.6.4. Алгоритм построения кс-грамматики для произвольного расширенного мп-автомата
- •2. Методы трансляции
- •2.1. Теория перевода
- •2.1.1. Формализмы, используемые для определения перевода
- •2.1.1.1. Перевод и семантика
- •2.1.1.2. Схемы синтаксически управляемого перевода ( су-схемы)
- •2.1.1.3. Конечные преобразователи
- •2.1.1.4. Преобразователь с магазинной памятью
- •2.1.1.5. Эквивалентность простых су-схем и преобразователей с магазинной памятью
- •2.1.1.5.1. Алгоритм построения мп-преобразователя для простой су-схемы
- •2.1.1.5.2. Алгоритм построения простой су-схемы по мп-преобразователю
- •2.1.2. Лексический анализ
- •2.1.2.1. Непрямой лексический анализ
- •2.1.2.2. Прямой лексический анализ
- •2.1.2.3. Программное моделирование конечных преобразователей
- •2.1.3. Синтаксический анализ
- •2.1.3.1. Определение разбора
- •2.2. Общие методы синтаксического анализа
- •2.2.1. Синтаксический анализ с возвратами
- •2.2.1.1. Алгоритм нисходящего разбора с возвратами
- •2.2.1.2. Проблемы алгоритм нисходящего разбора с возвратами
- •2.2.1.3. Алгоритм восходящего разбора с возвратами
- •Синтаксический анализ с возвратами
- •2.3. Общие методы синтаксического анализа универсальные методы синтаксического анализа. Табличные методы синтаксического анализа Алгоритм Кока-Янгера-Касами
- •Алгоритм разбора Кока-Янгера-Касами
- •Алгоритм нахождения левого разбора по таблице разбора
- •Алгоритм Эрли
- •Алгоритм разбора Эрли
- •Алгоритм построения правого разбора по списку разбора
1.3.2.2. Преобразование нелеворекурсивной приведенной кс-грамматики к нормальной форме Грейбах
Лемма: Пусть
грамматика
- нелеворекурсивная приведенная
грамматика, тогда существует такой
линейный порядок
на
,
что если имеется правило вида
,
то
.
1.3.2.2.1. Алгоритм преобразования нелеворекурсивной приведенной кс-грамматики к нормальной форме Грейбах
Вход: Нелеворекурсивная грамматика .
Выход: Грамматика
в нормальной форме Грейбах.
Метод:
Строим линейный порядок на множестве нетерминалов таким образом, что каждое правило для нетерминала начинается либо с терминала, либо с нетерминала, для которого выполняется условие
.
Упорядочим
таким образом, что
;
2. Полагаем
;
3. Если , то переходим к шагу 5;
если
,
то заменить каждое правило вида
,
где
,
правилами
,
где
- все правила для нетерминала
.
Далее мы убедимся, что если каждая из
цепочек
начинается терминалом, то и все правые
части правил для нетерминала
должны начинаться с терминала;
4. Положим
и переходим к шагу 3;
5. В результате
выполнения шагов 3,4 все правые части
каждого правила (кроме возможно
)
будут начинаться с терминалов. Для
любого нетерминала
,
если в правых частях правил терминал
находится не на первом месте, то заменяем
его на новый нетерминал
и в множество правил
добавляется правило вида
и записываем
результирующую грамматику
.
Домашнее задание: Проверить результирующую грамматику, после удаления левой рекурсии.
.
Пример :
.
Решение: После выполнения алгоритма удаления левой рекурсии множество правил примет вид
1.
,
,
.
Строим линейный
порядок
;
2. Положим
3. Так как ,то вместо правил добавляем в множество правил правила вида
;
4. Положим
и переходим к шагу 3;
3. Так как , то вместо правил добавляем в множество правил правила вида
;
4. Положим
и переходим к шагу 3;
3. Так как , то вместо правил добавляем в множество правил правила вида
;
4. Положим
и переходим к шагу 3;
3. Так как , то переходим к шагу 5;
5. Выполняем замену
всех терминалов
,
которые находятся не на первом месте
на новые нетерминалы
и в множество правил
добавляются правила вида
.
Записываем результирующую грамматику .
;
;
.
Недостаток: Недостаток описанной техники преобразования грамматики к нормальной форме Грейбах в том, что она дает много новых правил. Чтобы не вводить слишком много правил, можно применить другой метод, который излагается ниже. Однако он может давать больше нетерминалов.
1.3.2.3. Другой способ преобразования кс-грамматики к нормальной форме Грейбах (Метод Розенкранца)
Рассмотрим другой
способ построения грамматики, в которой
каждое правило имеет вид
,
где
,
,
.
Здесь грамматика переписывается только
один раз. Пусть
- КС-грамматика, в которой нет пустых
правил (даже вида
)
и цепных правил.
Определение: Пусть
и
- два непересекающихся алфавита.
Системой определяющих уравнений
в алфавитах
,
называется система уравнений вида
, (1)
где
,
,
.
Если
,
то уравнение записывается
.
Определение: Решением
системы (1)
называется отображение вида
,
и это отображение называется наименьшей
неподвижной точкой
системы определяющих уравнений.
Определение: Матричная форма записи системы уравнений выглядит следующим образом
, (2)
где
-вектор строка;
- матрица порядка
(квадратная матрица);
-вектор строка.
Причем
, (3)
где
.
Если во множестве
правил для
-го
нетерминала существуют правила вида
,
где
,
,
то выполняется
условие (3), иначе , если таких правил
нет, то
.
Рассматриваем
множество правил для
-го
нетерминала, которые начинаются с
-го
нетерминала.
Если существуют правила вида
,
тогда
.
Если множество
правил для данного нетерминала пусто,
то
.
.
Построим для системы (1) эквивалентную систему определяющих уравнений.
Лемма: Пусть система (1) – система определяющих уравнений, тогда наименьшей неподвижной точкой данной системы будет выражение вида
, (4)
где
;
- единичная матрица,
на главной диагонали которой находятся
,
все остальные элементы данной матрицы
– пустые выражения.
Если положить
,
то наименьшую неподвижную точку матричного уравнения
можно записать в виде
.
К сожалению, для
данной системы нельзя найти соответствующую
грамматику: она не является системой
определяющих уравнений, так как элементы
матрицы
могут буть бесконечными суммами членов
исходных уравнений. Однако
можно заменить новой матрицей «неизвестных»
,
каждый элемент
которой, расположенный в
-й
строке и
-м
столбце, - новый символ.
Тогда, заметив, что
,
можно получить систему определяющих уравнений
с неизвестными
.
Отметим, что если матрицы
и
- матрицы порядка
,
то система состоит из
уравнений.
Лемма: Пусть система – система определяющих уравнений в алфавитах и и пусть матрица - матрица того же порядка что и . Причем, все её элементы –различные новые символы, тогда система определяющих уравнений вида
имеет наименьшую неподвижную точку, которая совпадает с наименьшей неподвижной точкой системы .
