检查操作符是否嵌套在括号内

时间:2014-11-27 15:26:51

标签: java expression parentheses

我正在尝试构建一个计算器来评估从java中的字符串读取的表达式。

我的算法以递归方式将输入字符串拆分为最低优先级操作(即最右边的+),然后评估何时使用二进制操作。

由于某些原因,我无法检查操作符是否嵌套在括号内。

这是我的检查 - exp是表达式的字符串,lastMD是有问题的运算符在exp中的索引

if (exp.lastIndexOf('(', lastMD) != -1 && exp.lastIndexOf('(', lastMD) < lastMD && exp.lastIndexOf('(', lastMD) > exp.lastIndexOf('(', lastMD)) {
    // it is in parenthesis
}
else { 
    // it is not in parenthesis
}

由于某些原因,即使在括号中包含lastMD,它也无法工作并跳转到其他地方。

我错过了什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

现在表达的条件永远不会返回true:

int i = exp.lastIndexOf('(', lastMD);
if (i != -1 && i < lastMD && i > i) { ...

i > i将始终评估为false

作为旁注,正如评论中已经指出的那样,您可以考虑使用另一种方法(如简单的解析器)来构建可遍历的AST(查看ANTLR)。

以下相关问题可能也很有用:How does a simple calculator with parentheses work?

答案 1 :(得分:0)

看起来你是语言和编译器的新手。如果您想构建Rock Solid表达式求值程序,请在Java中搜索“递归下降解析器”实现。更好的是:构建一个表驱动的解析器(例如基于JavaCC),但学习曲线更陡峭。