У меня возникают проблемы при преобразовании выражений инфикса в пост-исправление, потому что я не могу правильно поставить круглые скобки. Например, рассмотрим:3+4*5/6
Двигаясь слева направо, я замечаю «*» с более высоким приоритетом. Таким образом я положил: 3+(4*5)/6
Далее я наблюдаю ‘/’ таким образом: (3+(4*5))/6
Но это дает мне неправильное выражение после исправления. Пожалуйста, укажите на ошибку в моем методе установки скобок.
Вам необходимо проанализировать различные термины (лексический / синтаксический анализ) и создать форму абстрактного синтаксического дерева. С этого момента вы можете вывести выражение в нотацию после исправления.
Например, синтаксический анализ выражения слева направо без какой-либо заглядывания:
3
сохранить значение как операнд+
обнаружить это дополнение4
, сохранить его как операнд*
, новый оператор с более высоким приоритетом, чем текущий оператор (+
), поэтому вы должны отменить последний шаг, создать новый контекст и добавить 4
для операнда этого нового оператора.5
, сохранить его как операнд/
новый оператор с таким же приоритетом, он должен выполняться только после *
поэтому вы закрываете текущий контекст и создаете новый, включающий этот, который используется в качестве первого операнда.6
, второй операнд.В конце вы начинаете с внутреннего контекста, помещаете оператор, а затем операнд, вставляете круглые скобки и делаете то же самое с внешним контекстом:
4 5 *
4 5 * 6 /
4 5 * 6 / 3 +
Или в префиксной записи:
* 4 5
/ (* 4 5) 6
+ (/ (* 4 5) 6) 3
В своем вопросе вы ставите скобки для /
оператор вокруг всей предыдущей части вместо только предыдущего операнда.
Других решений пока нет …