Задача «Вывод арифметических выражений»

Условие

Задача заключается в реализации программы, которая на входе получает арифметическое выражение и с помощью псевдографики отображает его.

Формат входного выражения может быть выбран самостоятельно и ничем не ограничивается, однако должен поддерживать произвольные выражения с операциями +, -, *, /. Например, может использоваться прямая или обратная польская нотация.

От выходного выражения требуется следующее:

  • не должно быть лишних скобочек, удаление которых не вносит разночтения;
  • отображение для (1/2)/3 и для 1/(2/3) должны отличаться;
  • делимое и делитель должны быть выравнены по центру относительно палочки дроби;
  • слагаемые дожны быть выравнены по высоте: знак сложения/вычитания, линейное выражение и палочка дроби должны быть на одной высоте.

Примеры

Имея на входе x / (x + 1) программа должна выдать

      x
    -----
    x + 1

Более сложное выражение (((a / (b * c) + 1) * d)/ 3) + 7 будет выглядеть, например, так (возможны разумные вариации)

       a
    (----- + 1) * d
     b * c
    --------------- + 7
           3

Замечания по реализации

Программа должна корректно обрабатывать ввод некорректного выражения.

Расширения

В качестве бонуса можно придумать способ вывода и других арифметических операций:

  • унарные операции;
  • возведение в степень.

Также в качестве бонуса можно выводить простейшие дроби в линейном виде, т.е. дробь 1/2 выводить как есть.

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