Триадная форма записи

|

Кроме прямой и обратной польской записи арифметических и логических выражений, существует триадная форма записи, которая очень удобна для представления в явном виде последовательности элементарных вычислений, входящих в арифметические и логические выра­жения, и, тем самым, процесса вычисления этих выражений. Триадная запись позволяет расчленить ОПЗ выражений на отдельные элементарные вычисления.

Каждое элементарное вычисление в триадной форме представляется с помощью одной строки, которая в общем случае имеет следующий вид:

mi КОП a1,a2

где КОП — код операции; a1,a2 первый и второй операнды, над которыми выполняется данная операция; mi номер строки в триадной записи или номер триады.

Если выполняемая операция не является операцией присваивания, то номер триады одновременно служит идентификатором результата вычисления.

Триадная запись для простого арифметического выражения A=B+C–D будет иметь вид

m1 + B, C

m2m1, C

m3 = A, m2

В процедуре преобразования выражений из ОПЗ в триадную форму используется стек операндов. Сущность процедуры состоит в том, что ОПЗ выражения просма­тривается слева направо и выполняются следующие

шаги:

1. Рассмотреть очередной элемент из ОПЗ выражения.

2. Если рассматриваемый элемент является операн­дом, то занести его в вершину стека операндов. Вернуться к шагу 1.

3. Сформировать очередную строку триадной записи в следующей последовательности:

3.1. Из вершины стека операндов удалить два верхних элемента и поместить их в поле операндов форми­руемой строки. При этом элемент, удаленный из стека операндов первым, поместить в поле второго операнда. Если рассматриваемый знак операции является унарным минусом, то из вершины стека вытолкнуть только один элемент, а в качестве первого операнда формируемой строки триадной записи взять нуль.

3.2. Номер сформированной триады занести в вершину стека операндов.

3.3. Выполнить возврат к шагу 1.

Процедуру преобразования ОПЗ простых выражений в триадную форму можно рассмотреть на примере уже использованного выше выражения А=(В*(С—D/K)+ E)/F (После рассмотрения элемен­тов ОПЗ они далее не указываются.)

Предлагаю ознакомиться с аналогичными статьями: