Алгоритм построения магазинного процессора
Метод.
Магазинный процессор в своем магазине будет повторять действия LL(k)- анализатора , построенного по входной грамматике схемы T, используя вместо выходной ленты устройство памяти прямого доступа, в котором он строит дерево вывода результата трансляции в выходной грамматике схемы.
Алгоритм построения магазинного процессора
1.Первоначально имеет запись (S, pr) на вершине магазина, где pr — указатель на корневой узел nr дерева результата трансляции. Этот же указатель дублируется переменной Root.
Вслучае использования LL(k)-таблиц вместо начального нетерминала S будет использоваться начальная LL(k)-таблица
T0 = TS,{ } .
Алгоритм построения магазинного процессора
2. Если имеет терминал входной грамматики на вершине магазина и текущий входной символ (первый символ аванцепочки) — такой же терминал, то планируется pop-движение процессора , аналогичное движению анализатора.
Алгоритм построения магазинного процессора
3. Если раскрывает нетерминал A (или замещает LL(k)-таблицу, ассоциированную с A) посредством правила A X1 X2…Xm с семантическим элементом y0 B1 y1…Bm ym в схеме, и при этом рядом с этим нетерминалом A (или заменяющей его LL(k)- таблицы) на вершине магазина процессора находится указатель на узел n, то планируются следующие действия процессора:
Алгоритм построения магазинного процессора
a) создание узлов — прямых потомков для n, помеченных слева направо символами цепочки y0 B1 y1…Bm ym;
б) замена на вершине магазина нетерминала A (или соответствующей ему LL(k)-таблицы) и указателя при нём (ней) на цепочку X1X2 … Xm (или её образ) с указателями при каждом нетерминале (или заменяющей его LL(k)-таблицы).
Алгоритм построения магазинного процессора
Если Xj — нетерминал (или заменяющая его LL(k)-таблица), то указатель при нем (ней) должен указывать на узел, созданный для Bi, при условии, что Xj и Bi связаны в правиле схемы
A X1X2… Xj … Xm, y0B1 y1…Bi yi … Bm ym.
Алгоритм построения магазинного процессора
4. Планируется, что завершает работу, когда в его магазине только маркер дна магазина, а аванцепочка пуста.
Результат трансляции, задаваемый данной схемой, получается посредством выписывания меток листьев построенного семантического дерева с корнем Root при его левостороннем обходе.
Алгоритм построения магазинного процессора
Можно показать, что такой алгоритм реализует построение правильного магазинного процессора для реализации трансляции, определяемой данной схемой, и что на подходящей машине с памятью прямого доступа трансляция может быть выполнена за время, линейно зависящее от длины входа.
Алгоритм построения магазинного процессора
Теорема 2.12. Алгоритм 2.9 строит правильный магазинный процессор, выдающий в качестве выхода дерево, метки листьев которого, выписанные слева направо, представляют результат трансляции входной цепочки.
Доказательство следует из предыдущих рассуждений.