我的解析器功能不起作用

时间:2013-10-20 07:27:28

标签: java parsing

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

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]是/

0 个答案:

没有答案