【发布时间】:2014-12-05 15:28:29
【问题描述】:
我编写了一个项目,它可以在不使用 java 中的 math 等现有包的情况下计算正弦、MCM 等不同的函数
现在我想从用户那里得到一个字符串形式的表达式,然后打印出结果
喜欢:
import java.util.Scanner;
public class Phase2main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String expression ;
double result = 0 ;
System.out.println(" Enter your desired expression from the available functions ");
expression = s.nextLine();
System.out.println("Result is : " + result);
}
}
那么它应该像这样运行: 输入表达式:ADD(DIV(SIN(FACT(3)),CEIL(TAN(MUL(1.5,FIB(4))))),GCD(2,10)) 结果是:1.94
如何让程序识别我的功能,如 CEIL 及其输入? 我检查了许多类似的问题,但我发现的那些是相当复杂的库,我无法理解或在没有识别函数及其输入的情况下进行基本算术运算
那么我怎样才能为这个特定问题编写一个简单的评估器呢?
【问题讨论】:
-
您可以使用OGNL 实现此目的。它很容易使用。您可以创建一个上下文并使用它来评估表达式。
-
这是一个非常广泛的问题。如果您只想识别函数 - 使用任何解析器(或编写自己的 - 那里有大量指南)。如果您也需要评估方面的帮助 - 那么这个问题类似于“帮助我编写自己的 Wolfram Alpha!”
-
除非您找到符合您需要的语法的库,否则没有简单的解决方案可以解决您的问题。您必须借助 javacc、antlr 或 eclipse Xtext 等解析器生成器编写自己的解析器。
-
你能推荐一个简单的库吗?我看过这个github.com/uklimaschewski/EvalEx,但我不明白如何将我的结果和输入与该库联系起来
-
JavaCC : cs.rit.edu/~ats/java/html/skript/4__04.htmld 或 XText zverovich.net/2011/12/03/first-experience-with-xtext.html。您也可以阅读此stackoverflow.com/questions/7258538/…。但恐怕这个解决方案都不是你所说的“简单库”。
标签: java expression evaluator