Qt学习之路2的bool树模型,根据豆子的文章整理为代码形式,便于阅读理解

// booleanparser.h
class BooleanParser
{
public:
    Node *parse(const QString &expr);

private:
    Node *parseOrExpression();
    Node *parseAndExpression();
    Node *parseNotExpression();
    Node *parseAtom();
    Node *parseIdentifier();
    void addChild(Node *parent, Node *child);
    void addToken(Node *parent, const QString &str, Node::Type type);
    bool matchToken(const QString &str) const;

    QString in; //存储要处理的布尔表达式的字符串
    int pos;    //分析布尔表达式字符串时的当前字符位置,起始为0
};

// booleanparser.cpp
Node *BooleanParser::parse(const QString &expr)
{
//首先将传入的布尔表达式的字符串保存下来,避免直接修改参数(这也是库的接口设计中常见的一个原则)
    in = expr;
    in.replace(" ", "");    //将其中的空格全部去掉
    pos = 0;
//创建Root节点——布尔表达式的树状表达,显然需要有一个根节点,所以我们在这里直接创建根节点,这个根节点就是一个完整的布尔表达式
Node *node = new Node(Node::Root);
//或运算的优先级最低,应该最后被处理。一旦或运算处理完毕,意味着整个布尔表达式已经处理完毕,所以在调用了addChild(node, parseOrExpression())之后,返回整个node。
    addChild(node, parseOrExpression());
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值