中置式を後置式に変換するには、かっこを慎重に扱う必要があります。括弧の存在により、演算の正しい順序を決定する際に問題が生じます。これに対処するには、次のアプローチを使用できます。
左括弧をプッシュする: 左括弧が見つかったら、それを演算子スタックにプッシュします。
右括弧の処理: 右括弧が見つかったとき:
次の Java コードは、かっこを処理するために toPostFix() メソッドを変更する方法を示しています。
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()); } // opening ( else if (in_fix.peek().type == 4) { post_fix.push(in_fix.pop()); } // closing ) else if(in_fix.peek().type == 5){ while(!(post_fix.isEmpty() || post_fix.peek().type == 4)){ postfixstr.append(post_fix.pop()); } if (post_fix.isEmpty()) ; // ERROR - unmatched ) else post_fix.pop(); // pop the ( in_fix.pop(); // pop the ) } //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(); }
これらの手順を実装することにより、toPostFix() メソッドは括弧を含む式を効果的に処理し、演算の正しい順序を保証し、目的の後置式を生成できるようになります。
以上が中置型から後置型への変換で括弧を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。