1

私は単純なパーサーを設計していました (Shunting Yard Algorithm の単純なバージョンで動作します)。これが私のコードです(私は結合性を扱っていません)。

public class Parser {
    String stack[] = new String[50];
    String res = "";
    int top = 0;
    Operator o1 = new Operator("", 0, 0);

    public String parse(String x) {
        push("(");
        x = x + ")";
        for (int i = 0; i < x.length(); i++) {
            if (o1.isNumber(x.charAt(i) + "")) {
                res = res + x.charAt(i);
            } else if (x.charAt(i) == '(') {
                push("(");
            } else if (o1.isOperator("" + x.charAt(i))) {
                if (top != -1) {
                    while ((top != -1) && (o1.isOperator(stack[top]))) {
                        int m = o1.getOperatorIndex(stack[top]);
                        int mp = o1.op[m].prec;
                        int xp = o1.op[o1.getOperatorIndex("" + x.charAt(i))].prec;
                        if (m >= xp) {
                            res = res + stack[top];
                        }
                        top--;
                    }
                }
                push("" + x.charAt(i));
            } else {
                if (top != -1) {
                    while ((top != -1) && (stack[top] != ")")) {
                        if (o1.isOperator(stack[top])) {
                            res = res + stack[top];
                        }
                        top--;
                    }
                }
            }

        }
        return res;
    }

    public void push(String m) {
        if (top != 49) {
            stack[top] = m;
            top++;
        } else {
            System.out.println("Overflow");
        }
    }
}

Operator クラスのコードは必要ないと思います。を実行しようとすると、+ 記号ではなくparse("1+2")返されるだけです。12なにが問題ですか?はい、o[0] は +、o[1] は -、o[2] は *、o[3] は /

4

0 に答える 0