Кроме прямой и обратной польской записи арифметических и логических выражений, существует триадная форма записи, которая очень удобна для представления в явном виде последовательности элементарных вычислений, входящих в арифметические и логические выражения, и, тем самым, процесса вычисления этих выражений. Триадная запись позволяет расчленить ОПЗ выражений на отдельные элементарные вычисления.
Каждое элементарное вычисление в триадной форме представляется с помощью одной строки, которая в общем случае имеет следующий вид:
mi КОП a1,a2
где КОП — код операции; a1,a2 — первый и второй операнды, над которыми выполняется данная операция; mi — номер строки в триадной записи или номер триады.
Если выполняемая операция не является операцией присваивания, то номер триады одновременно служит идентификатором результата вычисления.
Триадная запись для простого арифметического выражения A=B+C–D будет иметь вид
m1 + B, C
m2 – m1, C
m3 = A, m2
В процедуре преобразования выражений из ОПЗ в триадную форму используется стек операндов. Сущность процедуры состоит в том, что ОПЗ выражения просматривается слева направо и выполняются следующие
шаги:
1. Рассмотреть очередной элемент из ОПЗ выражения.
2. Если рассматриваемый элемент является операндом, то занести его в вершину стека операндов. Вернуться к шагу 1.
3. Сформировать очередную строку триадной записи в следующей последовательности:
3.1. Из вершины стека операндов удалить два верхних элемента и поместить их в поле операндов формируемой строки. При этом элемент, удаленный из стека операндов первым, поместить в поле второго операнда. Если рассматриваемый знак операции является унарным минусом, то из вершины стека вытолкнуть только один элемент, а в качестве первого операнда формируемой строки триадной записи взять нуль.
3.2. Номер сформированной триады занести в вершину стека операндов.
3.3. Выполнить возврат к шагу 1.
Процедуру преобразования ОПЗ простых выражений в триадную форму можно рассмотреть на примере уже использованного выше выражения А=(В*(С—D/K)+ E)/F (После рассмотрения элементов ОПЗ они далее не указываются.)
0 коммент.:
Отправить комментарий