计算器的C#表达式树

计算器的C#表达式树,c#,expression,mathematical-expressions,C#,Expression,Mathematical Expressions,我是个新手。我想用C#写一个计算器应用程序。C#expression trees会是一种很好的方式来挖掘它的精髓吗?(也就是说,将一系列按键转换为计算器可以计算并显示在屏幕或图形上的表达式的部分。) 我想包括标准的数学函数,包括trig、logs、exponents等。因为你的数学表达式语言肯定比C#简单得多,我怀疑尝试重用框架表达式树类来表示你的AST会有点过火,可能会让你感到沮丧;如果您查看这些类,您将看到许多与您的小语言完全无关的属性和功能。如果我是你的话,我会自己动手。你也许可以从这个项

我是个新手。我想用C#写一个计算器应用程序。C#expression trees会是一种很好的方式来挖掘它的精髓吗?(也就是说,将一系列按键转换为计算器可以计算并显示在屏幕或图形上的表达式的部分。)


我想包括标准的数学函数,包括trig、logs、exponents等。

因为你的数学表达式语言肯定比C#简单得多,我怀疑尝试重用框架表达式树类来表示你的AST会有点过火,可能会让你感到沮丧;如果您查看这些类,您将看到许多与您的小语言完全无关的属性和功能。如果我是你的话,我会自己动手。

你也许可以从这个项目中学习,有很好的教程,但它是如何制作的

你看到了吗

它是可扩展的、快速的(例如有自己的缓存),使您能够通过处理EvaluateFunction/EvaluateParameter事件在运行时提供自定义函数和变量。它可以解析的示例表达式: 表达式e=新表达式(“圆形(Pow(Pi,2)+Pow([Pi2],2)+X,2”)

e、 参数[“Pi2”]=新表达式(“Pi*Pi”); e、 参数[“X”]=10

e、 EvaluateParameter+=委托(字符串名称、参数args args) { 如果(名称=“Pi”) 参数结果=3.14; };

Assert(117.07==e.Evaluate())

它还以本机方式处理unicode和许多数据类型。如果你想更改语法,它附带一个鹿角锉。还有一个fork支持MEF加载新函数

它还支持逻辑运算符、日期/时间字符串和if语句