Спонсор: Microsoft
Опубликован: 23.07.2006 | Доступ: свободный | Студентов: 1320 / 151 | Оценка: 4.28 / 4.17 | Длительность: 21:37:00
Специальности: Системный архитектор
Лекция 7:

Восходящие анализаторы

Аннотация: Восходящие анализаторы. LR (k)-анализаторы. Построение LR (0)-анализатора. LR (1)-анализатор. LALR-анализаторы. Неоднозначные грамматики. Различные типы конфликтов. Разрешение конфликтов.

Восходящие анализаторы

Восходящие анализаторы

S -> aABe
A -> Abc
A -> b
B -> d

Свертка цепочки abbcde в аксиому S:

abbcde, aAbcde, aAde, aABe, S.

Правый вывод цепочки:

S->aABe->aAde->aAbcde->abbcde

Восходящий анализатор (bottom-up parsing) предназначен для построения дерева разбора, начиная с листьев и двигаясь вверх к корню дерева разбора. Мы можем представить себе этот процесс как "свертку" исходной строки w к аксиоме грамматики. Каждый шаг свертки заключается в сопоставлении некоторой подстроки w и правой части какого-то правила грамматики и замене этой подстроки на нетерминал, являющийся левой частью правила. Если на каждом шаге подстрока выбирается правильно, то в результате мы получим правый вывод строки w .

Пример.Рассмотрим грамматику

S -> aABe
A -> Abc
A -> b
B -> d

Цепочка abbcde может быть свернута в аксиому следующим образом:

abbcde, aAbcde, aAde, aABe, S.

Фактически, эта последовательность представляет собой правый вывод этой цепочки, рассматриваемый справа налево:

S->aABe->aAde->aAbcde->abbcde.

LR(k)-анализатор

LR(k) означает, что

  • входная цепочка обрабатывается слева направо (left-to-right parse);
  • выполняется правый вывод (rightmost derivation);
  • не более k символов цепочки (k-token lookahead) используются для принятия решения.

При LR(k)-анализе применяется метод "перенос-свертка" (shift-reduce) . Этот метод использует магазинный автомат. Суть метода сводится к следующему. Символы входной цепочки переносятся в магазин до тех пор, пока на вершине магазина не накопится цепочка, совпадающая с правой частью какого-нибудь из правил (операция "перенос", " shift "). Далее все символы этой цепочки извлекаются из магазина и на их место помещается нетерминал, находящийся в левой части этого правила (операция "свертка", " reduce "). Входная цепочка допускается автоматом, если после переноса в автомат последнего символа входной цепочки и выполнения операции свертка, в магазине окажется только аксиома грамматики.

Анализатор состоит из входной цепочки, выхода, магазина, управляющей программы и таблицы, которая имеет две части (действие и переход). Схема такого анализатора выглядит следующим образом:


Оксана Пагина
Оксана Пагина
Россия, Москва
Александр Королёв
Александр Королёв
Россия