
- •Автор: старший преподаватель кафедры Прикладной Математики и Информатики им. Ю.В.Кожевникова Сергей Викторович Сотников.
- •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. Общие методы синтаксического анализа универсальные методы синтаксического анализа. Табличные методы синтаксического анализа Алгоритм Кока-Янгера-Касами
- •Алгоритм разбора Кока-Янгера-Касами
- •Алгоритм нахождения левого разбора по таблице разбора
- •Алгоритм Эрли
- •Алгоритм разбора Эрли
- •Алгоритм построения правого разбора по списку разбора
2.2.1.1. Алгоритм нисходящего разбора с возвратами
Рассмотрим алгоритм
нисходящего разбора с возвратами. Для
реализации алгоритма будем использовать
два магазина (
и
)
и счетчик, в котором будет находиться
текущая позиция входного указателя.
Вход: Нелеворекурсивная
КС-грамматика
и входная цепочка
.
Предполагается, что правила из
занумерованы числами
.
Выход: Один левый разбор цепочки , если таковой существует. В противном случае – слово «ошибка».
Метод:
1. Для каждого
нетерминала
упорядочить альтернативы. Пусть
-
индекс
-ой
альтернативы нетерминала
.
Например, если
- все правила из
и альтернативы упорядочены так, как
записаны, то индексы их соответственно
примут вид
;
2. Введем понятие
конфигурации алгоритма – это упорядоченная
четверка вида
,
где
-
состояние алгоритма,
-
номер позиции указателя чтения входной
цепочки (предполагается, что
-м
входным символом является специальный
символ (маркер)
,
означающий конец входной строки),
-
содержимое первого магазина,
-
содержимое второго магазина;
Примечание: Будем считать, что верх первого магазина расположен справа, а верх второго слева. Магазин служит для представления «текущей» левовыводимой цепочки, т.е. той, которая получилась к данному моменту в результате развертки нетерминалов. Другими словами, верхний символ магазина будет символом, помечающим активную вершину порожденного к данному моменту дерева вывода. В магазине представлены текущая история проделанных выборов альтернатив и выходные символы, по которым прошла входная головка.
Алгоритм может
находиться в одном из трех состояний
,
где
-
состояние нормальной деятельности,
-
состояние возврата,
-
заключительное состояние.
3. Начальная
конфигурация алгоритма -
;
4. Существует всего
6 типов шагов. Шаги будем описывать в
терминах их воздействия на конфигурацию
алгоритма. Запись вида
означает переход из одной конфигурации
алгоритма
в другую
.
Число
,
если не оговорено обратное,
,
где
-
множество индексов альтернатив,
.
Разрастание дерева
,
где
и
-
первая альтернатива нетерминала
.
Этот шаг соответствует разрастанию частичного дерева вывода, при котором применяется первая альтернатива самого левого нетерминала дерева;
Успешное сравнение входного символа с порожденным символом
при условии, что
.
Если
-й
входной символ совпадает с очередным
порожденным терминальным символом, то
он передается из
в
,
а позиция входного указателя увеличивается
на единицу;
Успешное завершение
.
Достигнут конец
входной цепочки и найдена левовыводимая
цепочка, совпадающая с входной. Левый
разбор
входной цепочки восстанавливается по
цепочке
с помощью гомоморфизма
,
что
,
,
где
-
номер правила
и
-
-ая
альтернатива нетерминала
;
Неудачное сравнение входного символа с порожденным символом
Переходим в состояние возврата, как только обнаруживается, что порожденная левовыводимая цепочка не совместима с входной цепочкой;
Возврат по входу
для всех , т.е в состоянии возврата входные символы переносятся назад из в ;
Испытание очередной альтернативы
, если
-
-я альтернатива нетерминала (Заметим, что
в заменяется на );
Следующая конфигурация невозможна, если
и имеет только альтернатив. (Это условие указывает на то, что всевозможные цепочки, совместимые с входной цепочкой уже исчерпаны, а ее разбор не найден);
в оставшихся случаях. (Здесь исчерпаны альтернативы нетерминала и дальнейший возврат происходит путем удаления из и замены в цепочки на ).
Алгоритм выполняем следующим образом
Шаг 1. Исходя из
начальной конфигурации, вычислять
последующие конфигурации
, пока их можно вычислить;
Шаг 2. Если
последняя вычисленная конфигурация -
,
то выдать
и остановиться, в противном случае –
«ошибка»;
Пример :
Пусть задана КС-грамматика вида
.
Требуется построить левый разбор для цепочек вида
,
,
.
Решение:
Сделаем приведение грамматики, т.е. удалим пустые и цепные правила
Перенумеруем правила грамматики
;
Определяем левый разбор как последовательность вида
;
;
Определяем левый разбор как последовательность вида
;
;
.