我正在尝试用Java构建我自己的数学表达式解析器,我知道那里有很多脚本管理引擎。但我想构建自己的,只是为了parcticing。
然而,我一直在寻找进展中的困难。所以我开始思考是否有更好的写作方式。我是这样做的:
(与此同时我假设输入合法) 唯一合法的运营商是:+ - * / ^()
我从用户那里得到一个String表达式输入。然后我开始循环throgh字符串输入以寻找“(”如果我找到一个我计算其中的值的值然后用结果替换子表达式字符串。
我应该继续以这种方式编程还是应该采取其他方法? 是否有任何教程解释如何实现这一点(不是代码 - 只是一般的理论)?
任何帮助都是适当的。
答案 0 :(得分:3)
您应该查看Shunting Yard Algorithm,它允许您解析包含运算符优先级和括号的代数表达式。
此外,您可能会对Abstract Syntax Trees感兴趣,以表示解析表达式的结果,您可以在其上进行进一步的工作,作为漂亮的打印和评估表达式。
答案 1 :(得分:1)
您可能想要制作recursive descent parser,这是解析合理简单语言的标准方法。从本质上讲,它是一种更加结构化的方式来实现"搜索括号并评估其中的表达式"你正在描述的方法。不过,请确保在开始之前对递归感到满意。