Как поставить круглые скобки в инфиксные выражения вручную?

У меня возникают проблемы при преобразовании выражений инфикса в пост-исправление, потому что я не могу правильно поставить круглые скобки. Например, рассмотрим:3+4*5/6

Двигаясь слева направо, я замечаю «*» с более высоким приоритетом. Таким образом я положил: 3+(4*5)/6

Далее я наблюдаю ‘/’ таким образом: (3+(4*5))/6

Но это дает мне неправильное выражение после исправления. Пожалуйста, укажите на ошибку в моем методе установки скобок.

0

Решение

Вам необходимо проанализировать различные термины (лексический / синтаксический анализ) и создать форму абстрактного синтаксического дерева. С этого момента вы можете вывести выражение в нотацию после исправления.

Например, синтаксический анализ выражения слева направо без какой-либо заглядывания:

  • Вы разбираете 3сохранить значение как операнд
  • Вы разбираете +обнаружить это дополнение
  • Вы разбираете 4, сохранить его как операнд
  • Вы разбираете *, новый оператор с более высоким приоритетом, чем текущий оператор (+), поэтому вы должны отменить последний шаг, создать новый контекст и добавить 4 для операнда этого нового оператора.
  • Вы разбираете 5, сохранить его как операнд
  • Вы разбираете /новый оператор с таким же приоритетом, он должен выполняться только после * поэтому вы закрываете текущий контекст и создаете новый, включающий этот, который используется в качестве первого операнда.
  • Наконец, вы анализируете 6, второй операнд.

В конце вы начинаете с внутреннего контекста, помещаете оператор, а затем операнд, вставляете круглые скобки и делаете то же самое с внешним контекстом:

  • 4 5 *
  • 4 5 * 6 /
  • 4 5 * 6 / 3 +

Или в префиксной записи:

  • * 4 5
  • / (* 4 5) 6
  • + (/ (* 4 5) 6) 3

В своем вопросе вы ставите скобки для / оператор вокруг всей предыдущей части вместо только предыдущего операнда.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]