Обработка скобок при преобразовании инфиксных выражений в постфиксные выражения

Я работаю над проектом на Java, который требует, чтобы я преобразовал инфиксное выражение в постфиксное выражение. В настоящее время я могу конвертировать инфиксные выражения в постфикс с помощью этого метода, если они не содержат скобок, но я не могу понять, как обрабатывать скобки.

По сути, у меня есть два стека, которые содержат объекты, которые называются «токенами». Токен - это класс-оболочка, который содержит строку, представляющую собой число, переменную (которая оценивается как число, ожидающее ввода пользователя), оператор (с оператором связан уровень приоритета, так что мой метод может определить, как обрабатывать порядок операций между '+', '-', '*' и '/') или круглыми скобками (в скобках есть способ определить, является ли эта скобка открытой или закрытой).

Как мне обращаться с круглыми скобками? Как насчет нескольких слоев скобок?

public String toPostFix() {
    StringBuilder postfixstr = new StringBuilder();

    Stack<Token> in_fix = new Stack<>();
    Stack<Token> post_fix = new Stack<>();

    for (int i = tokens.length - 1; i >= 0; i--) {
        t = new Token(tokens[i]);
        in_fix.push(t);
    }

    //there are still tokens to process
    while (!in_fix.empty()) {
        //is a number
        if (in_fix.peek().type == 1) {     
            postfixstr.append(in_fix.pop().toString());
        } 

        //is an operator and the stack is empty
        else if (in_fix.peek().type == 3 && post_fix.empty()) {   
            post_fix.push(in_fix.pop());
        } 

        // is an operator that has higher priority than the operator on the stack
        else if (in_fix.peek().type == 3 && in_fix.peek().isOperator() > post_fix.peek().isOperator()) {
            post_fix.push(in_fix.pop());
        } 

        // is an operator that has lower priority than the operator on the stack
        else if (in_fix.peek().type == 3 && in_fix.peek().isOperator() <= post_fix.peek().isOperator()) {
            postfixstr.append(post_fix.pop());
            post_fix.push(in_fix.pop());
        } 

        //puts the rest of the stack onto the output string
        if (in_fix.empty()) {
            while (!post_fix.empty()) {
                postfixstr.append(post_fix.pop());
            }
        }
    }

    return postfixstr.toString();
}

Ответы на вопрос(2)

Ваш ответ на вопрос