Во-первых, поймите, что скобки не нужны в постфиксной нотации, когда известна арность оператора. Чтобы понять почему:
3 3 6 * *
Начиная слева, складывать операнды, пока не встретите оператора:
operands <- 3 <- 3 <- 6
operator: *
Мы знаем, что *
является бинарным оператором, поэтому вытолкните два операнда из стека, примените оператор и верните результат обратно:
operands -> 3 -> 6
operands <- 18
Продолжайте накапливать операнды, пока не встретите другого оператора:
operator: *
operands -> 3 -> 18
operands <- 54
Когда выражение используется (при условии, что оно правильно сформировано), стек будет содержать одно значение: результат.
Но ваш вопрос касается скобок: если вы хотите иметь возможность произвольного разбора вложенных скобок, регулярные выражения не помогут вам, по причинам, объясненным здесь . Вам нужно что-то, что может распознавать контекстно-свободную грамматику , то есть автомат с нажатием .
Но вы, я так понимаю, ищете что-то большее, чем просто абстрактную информатику; здесь - это связанный вопрос, в котором содержится некоторая полезная информация по алгоритму Shunting Yard , который преобразует инфиксные выражения в скобках в постфиксные выражения.
Редактировать : Хорошо, я должен был сказать " true регулярные выражения один не поможет вам". Вы можете использовать регулярные выражения (соответствующие самым внутренним парам круглых скобок) и подстановку, чтобы (фактически) обрабатывать выражение в скобках как свое собственное неявное дерево разбора. Но алгоритм «Маневрового двора» круче:)