0

可能重复:
.NET 中是否有字符串数学评估器?

我需要实现数学表达式解析器。它必须评估以下表达式:

  • 基本运算符(+,-,*,/,%[模运算符])
  • 优先级操作,例如 2*(4-1)
  • sin,cos,tan,cotan, log(base,number) 函数
  • 允许诸如 sin(cos(log(2,32))) 之类的组合
  • 2^5等幂运算

首先,我想使用JScripteval 函数。但这并不是不安全的,也没有电力运营商。中学我在互联网上搜索了一些图书馆。但事实证明,我不能使用它们。所以问题如下:JScript eval 函数调用有多安全,是否有任何标准的 .net 工具可用于我的任务?如果不是,哪种算法最好?截至目前,我正在尝试构建表达式树,然后对其进行编译以获得结果。

4

2 回答 2

1

你可以试试NCalc

Dictionary<string, int> dict = new Dictionary<string, int>() {
    {"a",1} ,
    {"b",4}
};

NCalc.Expression exp = new NCalc.Expression("a + b / 2 * myfunc(3.14)");

exp.EvaluateFunction += (s, e) =>
    {
        var d = (double)e.Parameters[0].Evaluate();
        e.Result = Math.Cos(d);
    };

exp.EvaluateParameter += (s, e) =>
    {
        e.Result = dict[s];
    };

var result = exp.Evaluate();
于 2012-07-21T15:29:29.063 回答
0

或 jep.net - 免责声明:我是作者。

于 2012-07-25T05:35:08.403 回答