Все хорошо, но алгоритм не верно работает с унарным отрицанием.
Он и не рассчитан на работу с унарным отрицанием.
Как исправить?
Проще всего -- введя для унарного отрицания специальный символ, отличный от остальных операторов.
Иначе придётся вводить дополнительное состояние -- был ли предыдущий символ и был ли он оператором, и если так, то трактовать непосредственно следующий за ним оператор '-' как унарный.