如何解析公式以在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#特有的。这可能会帮助你开始。这听起来像是家庭作业。你试过什么吗?[运算符作为字符串]的完全副本。我的解决方案甚至提供了这棵树。()听起来像是编译器类的家庭作业。