Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解析公式以在C#中建立树?_C#_Lexical Analysis - Fatal编程技术网

如何解析公式以在C#中建立树?

如何解析公式以在C#中建立树?,c#,lexical-analysis,C#,Lexical Analysis,如果我有一个公式: A = 2+3*5-6/3+2 如何将公式建立为带节点的树,然后我可以根据树从下到上、从左到右轻松计算结果 有人能提供一个所需解析器的示例或一些参考吗?如果只是算术的话。如果您想要构建一个合适的解析器,您需要创建一个语法,从该语法生成一个解析器,然后构建一个解释器来处理解析器的输出。对于该任务非常有用,并且已经完成。其他选项包括和 如果你真的想推出自己的,有很多资源。GOLD解析系统页面实际上已经有很多关于它的信息: 等等。解析有很多可能的策略 如果您想自己编写解析

如果我有一个公式:

A = 2+3*5-6/3+2
如何将公式建立为带节点的树,然后我可以根据树从下到上、从左到右轻松计算结果

有人能提供一个所需解析器的示例或一些参考吗?

如果只是算术的话。如果您想要构建一个合适的解析器,您需要创建一个语法,从该语法生成一个解析器,然后构建一个解释器来处理解析器的输出。对于该任务非常有用,并且已经完成。其他选项包括和

如果你真的想推出自己的,有很多资源。GOLD解析系统页面实际上已经有很多关于它的信息:


等等。

解析有很多可能的策略

如果您想自己编写解析代码,那么一个好的策略就是。这并不难做到,正如我自己为C#语言写的一样


如果你想使用解析器生成器工具,你可以使用传统的GNU flex/bison组合,或者google for“C#parser generator”来找到一个C#one,这样你就不必用C编写。这将生成一个。

如果它是简单的数学表达式,那么一种方法是将它转换为反向波兰符号。在这种表示法中,计算表达式非常容易,因为表示法“线性化”了树(到堆栈中)。然后用RPN表示法解析和转换真正的任务(实际上非常简单)

[http://en.wikipedia.org/wiki/Reverse_Polish_notation#Example]


非常古老的计算器使用RPN,因为它更容易计算。

您能补充一些细节吗?这个公式能有括号吗?加法、减法、乘法和除法是唯一的运算吗?非常相似,尽管它不是C#特有的。这可能会帮助你开始。这听起来像是家庭作业。你试过什么吗?[运算符作为字符串]的完全副本。我的解决方案甚至提供了这棵树。()听起来像是编译器类的家庭作业。