1

我正在设计一个简单的解析器(它适用于一个简单版本的调车场算法)。这是我的代码(我没有处理关联性)。

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