让bedmas正常工作

时间:2017-06-03 01:39:39

标签: java parsing operator-precedence recursive-descent

当我输入3(5)之类的内容时,我的代码失败了。 如何修改我的代码,使其在中间解决,然后相乘?

double parseTerm() {
    double x = parseFactor();
    while(true) {
        if      (shift('*')){
            x *= parseFactor(); // multiply
        }
        else if (shift('/')){
            x /= parseFactor(); // divide
        }
        else{
            return x;
        }
    }
}

double parseExpression() {
    double x = parseTerm();
    while(true) {
        if      (shift('+')){
            x += parseTerm(); // addition
        }
        else if (shift('-')){
            x -= parseTerm(); // subtraction
        }
        else{
            return x;
        }
    }
}

double parseFactor() {
    if (shift('+')){
        return parseFactor(); //plus
    }
    if (shift('-')){
        return -parseFactor(); //minus
    }

    double x;
    int startPos = this.pos;

    if (shift('(')) { // brackets
        x = parseExpression();
        shift(')');

1 个答案:

答案 0 :(得分:0)

这是您需要在parseTerm中更改的内容,以使3(5)这样的表达式与3*(5)的工作方式相同:

double parseTerm() {
    double x = parseFactor();
    while(true) {
        if (shift('*')) {
            x *= parseFactor(); // multiply
        } else if (shift('/')) {
            x /= parseFactor(); // divide
        } else if (shift('(')) { // brackets
            x *= parseExpression();
            shift(')');
        } else {
            return x;
        }
    }
}

(假设您的parseFactor方法是正确的,因为它在您的代码中不完整)