Россия, Челябинск, Южно-Уральский Государственный Университет (НИУ) |
Восходящие анализаторы
Восходящие анализаторы
Восходящие анализаторы
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)-анализатор
- входная цепочка обрабатывается слева направо (left-to-right parse);
- выполняется правый вывод (rightmost derivation);
- не более k символов цепочки (k-token lookahead) используются для принятия решения.
При LR(k)-анализе применяется метод "перенос-свертка" (shift-reduce) . Этот метод использует магазинный автомат. Суть метода сводится к следующему. Символы входной цепочки переносятся в магазин до тех пор, пока на вершине магазина не накопится цепочка, совпадающая с правой частью какого-нибудь из правил (операция "перенос", " shift "). Далее все символы этой цепочки извлекаются из магазина и на их место помещается нетерминал, находящийся в левой части этого правила (операция "свертка", " reduce "). Входная цепочка допускается автоматом, если после переноса в автомат последнего символа входной цепочки и выполнения операции свертка, в магазине окажется только аксиома грамматики.
Анализатор состоит из входной цепочки, выхода, магазина, управляющей программы и таблицы, которая имеет две части (действие и переход). Схема такого анализатора выглядит следующим образом: