本项目源代码:
https://github.com/zhuimengshaonian66/QT-booleanTree/
分析它是因为我在不断的学习的过程中,觉得写计算器的代码和布尔表达式解析有异曲同工之妙,这是我计算器的QT项目:
http://blog.csdn.net/weixin_39788534/article/details/79586181
对于QT解析树本身而言,其涉及到了QT自定义模块的高级功能,但是对我而言,只要深刻的理解了代码的调用和运行顺序,就能够对这个项目本身加以拓展。
在学习编程的过程中,其涉及到的分层思想是非常有启发意义的。那就是把每一个模块都细分为一个小的模块。
仔细对比这两个项目,对我的启发意义非常大。
核心算法:
思路如下:将某表达式看成 X || Y || Z .......
X的计算看成 M && N ......
M其实是 数字 或者是 !(数字)。
上面三步就实现了没有括号的一个表达式的计算。
去除括号重复上诉步骤即可。
Node *BooleanParser::parseOrExpression()
{
Node *childNode = parseAndExpression();
if (matchToken("||")) {
Node *node = new Node(Node::OrExpression);
addChild(node,