ホームページ > Java > &#&チュートリアル > 中置型から後置型への変換で括弧を処理するにはどうすればよいですか?

中置型から後置型への変換で括弧を処理するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-17 19:59:02
オリジナル
229 人が閲覧しました

How to Handle Parentheses in Infix to Postfix Conversions?

中置から後置への変換でのかっこを処理する

中置式を後置式に変換するには、かっこを慎重に扱う必要があります。括弧の存在により、演算の正しい順序を決定する際に問題が生じます。これに対処するには、次のアプローチを使用できます。

括弧を処理するメカニズム

左括弧をプッシュする: 左括弧が見つかったら、それを演算子スタックにプッシュします。

右括弧の処理: 右括弧が見つかったとき:

  1. 演算子をスタックからポップし、開き括弧が見つかるまで出力文字列に追加します。
  2. 開き括弧が見つからずスタックが空の場合、一致しない閉じ括弧があることを示します。
  3. 開き括弧が見つかった場合は、それをスタックからポップします。
  4. ポップ入力スタックからの右かっこ。

コードの実装

次の 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート