数学表达式解析器

时间:2012-07-21 14:45:01

标签: c# math

  

可能重复:
  Is there a string math evaluator in .NET?

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

  • 基本运算符(+, - ,*,/,%[modulo operator])
  • 优先操作,例如2 *(4-1)
  • 罪,cos,tan,cotan,log(base,number)函数
  • 允许诸如sin(cos(log(2,32)))
  • 的组合物
  • 电力操作如2 ^ 5

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

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

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