67
ИНФОРМАЦИОННЫЕ СТРУКТУРЫ И ИХ
ПРЕОБРАЗОВАНИЕ
Inc(p);
Для "5." и "4."
ничего не делаем, продолжаем синтаксический
анализ;
Для "3."
P(p)='*';
// <T> и <F> уже существуют;
Inc(p); // заносим только '*';
Для "2."
ничего не делаем, продолжаем синтаксический
анализ;
Для "1."
P(p)='+';
Inc(p).
Содержание стека
– текущий символ
входной цепочки
статок
цепочк
и
Результат –
польская
запись
#
—
*(i+i)#
—
#
(A) – i
*(i+i)#
i(A)
#F
интаксический анализатор вызвал
п.6 и сразу заменил i на F
*
(i+i)#
A
#T*
Замена по п.4
(
i+i)#
A
#T*(
(B) – i
+i)#
A
*(i(B)
T*(F
Замена по п.6
+
i)#
AB
T*(E+
Замена по п.4, п.2
(C) - i
)#
AB
(E+i(C)
*(E+F
)
#
ABC
*(E+T)
T*(E) Замена и вызов программы п.1
#
—
ABC+
T*F
#T
Замена и вызов программы п.3
#
—
ABC+*
#E
#
—
ABC+*
Триады и тетрады
Триады и тетрады представляют собой низкоуровневые формализмы
записи промежуточного представления программы, приближающие
программу к объектному коду. В этих формализмах все операции
записываются в виде последовательности действий, выдающих результаты.
Тетрады (также называемые "четверками" или трехадресным кодом),
состоят из двух операндов, разделенных операцией, и результата операции,
записываемого с помощью равенства и обозначаемого целым числом (см.
пример на слайде). Таким образом, тетрады содержат явную ссылку на
результат операции. В каком-то смысле, это может считаться недостатком