95
выражения приведет к полному исключению из него скобок. Последняя
открываемая в группе скобок скобочная пара содержит первое
преобразуемое выражение в этой группе. Принцип "последнее открываемое
выражение вычисляется первым" предполагает использование стека.
Рассмотрим два выражения в инфиксной форме: А+В*С и (А+В)*С и
соответствующие им постфиксные формы АВС*+ и
АВ+С*. В каждом случае
порядок следования операндов в этих формах совпадает с порядком
следования операндов в исходных выражениях. При просмотре первого
выражения (А+В*С) первый операнд А может быть сразу же помещен в
постфиксное выражение. Очевидно, что символ "+" не может быть помещен
в это выражение до тех пор,
пока туда не будет помещен второй, еще не
просмотренный операнд. Следовательно, он (т.е. символ "+") должен быть
сохранен, а впоследствии извлечен и помещен в соответствующую позицию.
После просмотра операнда В этот символ записывается вслед за операндом А.
К этому моменту просмотренными уже оказываются два операнда. Однако
извлекать и помещать символ "+" в
постфиксную запись еще рано, т.к. за ним
следует символ "*", имеющий более высокий приоритет. Во втором
выражении наличие скобок обуславливает выполнение операции "+" в
первую очередь.
Так как при преобразовании инфиксной формы в постфиксную правила
приоритета играют существенную роль, для их учета введем функцию
precedence(oper1, oper2), где oper1 и oper2 – символы,
обозначающие
операции. Эта функция возвращает значение TRUE, если
oper1 имеет более высокий или равный
приоритет по сравнению с oper2.
В противном случае функция precedence(oper1, oper2) возвращает
значение FALSE. Например, значения функций precedence("*","+") и
precedence("+" "+") – "истина", а precedence ("+","*") –
"ложь". Равный приоритет подчеркнут, так как неправильное формирование
постфиксной записи (как вручную, так разработанными студентами