gpt4 book ai didi

c# - 在运行时从字符串创建数学函数

转载 作者:太空宇宙 更新时间:2023-11-03 19:20:04 24 4
gpt4 key购买 nike

我问这个问题,因为我还没有找到任何与 C# 相关的帖子,并且可能有一些我找不到的内置方法。如果有,请告诉我,我可以关闭这个问题。

基本上我有常见的情况:

  1. 用户键入一个函数 w.r.t.将一个或两个变量放入一些 TextBlock
  2. 我把这个字符串分析一下
  3. 作为返回,我希望有一个方法的委托(delegate),该方法将接受一个或两个输入(变量)并根据用户输入的内容返回函数值。

现在,我可能会想到(我想自己做这个,因为我想用我的大脑)一种逐步分析字符串的算法,以实际找出首先必须计算的内容以什么方式。例如。首先扫描括号,在一组括号中寻找表达式,并根据更通用的函数等进行计算。

但最后我想“创建”一个这种分析的方法,以便轻松用作带有几个参数的普通委托(delegate),这些参数将返回正确的函数值。C# 中是否已经包含任何方法,或者我是否必须自己编写所有程序?

请注意:我不想使用任何其他人的库,只有 .NET 库对我来说是可以接受的。

编辑 Matt 指出表达式树后,我找到了 this thread 这是我的问题的一个很好的例子。

Edit2: 指出的示例仅包含简单的函数,如果我想包含更复杂的函数(例如三角函数或指数函数),则将无用。

最佳答案

您所描述的是一个解析器。有许多不同的实现方式,但一般来说,对于复杂的语法,通常使用“解析器生成器”。

解析器生成器将获取语法描述并将其转换为代码,将符合语法的文本解析为某种形式的内部表示形式,可以由程序操作,例如解析树。

既然您表示要避免使用第三方库,我将假设同样排除了解析器生成器的使用,这让您可以实现自己的解析器(幸运的是这是一个非常有趣的练习)。

Recursive descent parsers 上的维基百科页面会特别有用。我建议通读它并根据您的特定用例调整其中的示例代码。以此为起点,我自己针对不同的语法做过多次此操作,因此可以证明它的用处。

这样的解析器的输出将是一个“解析树”。然后,您可以通过多种方式将其转换为可执行委托(delegate)。一种选择是在您的解析树节点上实现 Evaluate() 方法,该方法将采用一组变量并返回评估用户表达式的结果。正如其他人所提到的,您的解析树可以利用 .NET 的表达式树,或者您可以沿着直接发出 IL 的路线走下去(允许您从用户的表达式生成已编译的 .NET 程序集,供以后根据需要使用)。

关于c# - 在运行时从字符串创建数学函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13069594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com