Один из вариантов решения:
Превратить поток символов в поток лексем (лексема - это NUMBER , OPERATION , OPEN_BRACKET, CLOSE_BRACKET).
Затем по одной лексеме складываем в стек.
После очередной лексемы проверяем: можно ли три верхних лексемы заменить на одну по правилам:
NUMBER OPERATION NUMBER -> NUMBER
OPEN_BRACKET NUMBER CLOSE_BRACKET -> NUMBER.
Если можно - заменяем.
Если замена проведена, проверяем по правилам заново.
При замене выводим содержимое стека и оставшиеся лексемы.
Выполняем пока не закончатся лексемы, а в стеке не останется одна лексема типа NUMBER.