![]() |
1
1
该怎么做?和:取决于解析器生成的树。我将假装解析器生成一个类似树的
首先,你不需要在转换之前评估树,而大多数你改变的地方就像
进入之内
用+替换为所有不同的运算符。 为了什么?你…
对于评估bool的定义,您有几个选择。C路或多或少
然后,您需要为“<”和朋友定义返回0.0表示“假”,以及任何其他表示“真”的定义。值-1是一个非常流行的真值,尽管通常用于在ints中存储bools。 更结构化的方法是将返回booleans的所有运算符(如“<”)移动到被评估bool的主体中,并使其或多或少像被评估树那样工作。 最后,不是做三元运算符?:使用两个节点,您还可以将节点(和解析器)的定义更改为最多具有三个子树,那么大多数运算符将具有两个树,但是?有三个。可能有点像
但是你必须重写你的预顺序,顺序,后顺序树遍历。 第二部分,功能。一种方法是将函数名存储在szValue中。另一种方法是根据函数的不同,为类型设置一组不同的值。您必须在解析器中选择一些规则,并在解释器中使用它。你可以做一些像…
那么evaluatefunc可能看起来像
看起来像一个有趣的项目,享受吧! |
![]() |
2
1
我认为您应该将“node”结构改为拥有一个子数组,而不是“pleft”和“pright”。像sin()这样的函数有一个参数/子参数。条件(三元)运算符有三个参数/子参数。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 3 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 3 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 4 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 4 月前 |