【发布时间】:2015-06-17 16:09:14
【问题描述】:
我编写了这个简单的递归解析器方法,它计算简单的算术表达式(仅由 +、-、* 和 / 组成)。
但是,我目前被困在一些事情上:
- 如何实现括号识别?
- 如何实现一元运算符的识别?例如一元减号 (-) 和阶乘 (!)
-
如何实现功能识别?例如罪(x)
private static double eval(String s) { if (s.charAt(0) == '-' || s.charAt(0) == '+') { s = "0" + s; } if (s.indexOf("+") > -1) { return (eval(s.substring(0, s.indexOf("+"))) + eval(s.substring(s.indexOf("+") + 1, s.length()))); } else if (s.indexOf("-") > -1) { return (eval(s.substring(0, s.indexOf("-"))) - eval(s.substring(s.indexOf("-") + 1, s.length()))); } else if (s.indexOf("*") > -1) { return (eval(s.substring(0, s.indexOf("*"))) * eval(s.substring(s.indexOf("*") + 1, s.length()))); } else if (s.indexOf("/") > -1) { return (eval(s.substring(0, s.indexOf("/"))) / eval(s.substring(s.indexOf("/") + 1, s.length()))); } else if (s.indexOf("^") > -1) { return (Math.pow(evaluate(s.substring(0, s.indexOf("^"))), evaluate(s.substring(s.indexOf("^") + 1, s.length())))); } return Double.parseDouble(s); }
感谢任何帮助。提前致谢!
【问题讨论】:
-
你听说过反向波兰表示法吗? en.wikipedia.org/wiki/Reverse_Polish_notation 还是必须递归?
-
是的,我已经使用堆栈完成了一个数学解析器(使用 shuntingyard 从中缀转换为后缀)。这个必须是递归的:/