我想读数学函数并解释它们。 到目前为止,我使用二进制表达式并使用Infix to Prefix Method来读取我的字符串(例如4 * 3 + 1)。
然而,与此同时,我想要阅读更复杂的表达式,这些表达式无法翻译成二叉树。
一些例子:
我有一些问题要找到将给定字符串转换为非二叉树的方法。如何做到这一点的好方法,是否有一些已知的方法? 由于我需要支持一些自己的自定义函数,所以我不能使用任何现有的库。
我不期待任何代码,我对理论这样做感兴趣。
答案 0 :(得分:0)
通常你需要定义一个语法(在这种情况下是一个非常简单的语法),它定义解析文本的规则是什么,然后通过各种语法之一生成一个基于这个语法的解析器存在的库。对于一个如此简单的语法Antlr肯定是夸大其词。有一系列文章here关于写一个"写一个递归下降解析器"或者如果你在nuget上搜索 peg (一系列语法分析器),你会发现很多实现。
请注意,这个计算机科学的分支非常庞大......你可以从这里开始lexers vs parsers作为理论部分。
答案 1 :(得分:0)
以与查看二进制表达式相同的方式查看自定义非二进制函数。
E.g。 2 + 3 * 4转换为+(*(3,4),2)// +和*这里只是函数名称
您可以混合使用自定义功能:
E.g。 a ^ 3 + Max(a,b,c)* 2转换为:+(^(a,3),*(2,Max(a,b,c))
在你的解释器中定义什么是+(),^(),Max(),your_custom_function()意味着什么和期望的参数(即树中的子节点)。树不是二进制的,但这并不会真正改变你创建它的方式并遍历它。