C ++使用堆栈构建语法树的问题

时间:2015-08-01 22:04:44

标签: c++ parsing syntax tree grammar

我在尝试构建AST /语法树以使用简单数学(如(1 + 1)或类似(1 + 1> = 2)

时遇到问题

基本上我有一个像这样的输入字符串:

1 + 1 * 2

所以我解析输入并将它们添加到* Expression **类类型

的堆栈中

堆栈看起来像这样:

1
+
1
*
2

然后我调用一个“parseTree”函数来构建树及其节点:

void BehaviourDatabase::parseStack()
{
    while (stack.size() > 1) // Stacks must only have 1 root node
    {
        Expression* top = stack.front();
        stack.pop_front();
        switch (top->getExpressionType())
        {
        case EXPRESSION_NUMBER:
            stack.push_back(top);
            break;
        case EXPRESSION_OPERATOR:
            Expression* ev1 = stack.front();
            stack.pop_front();

            Expression* ev2 = stack.front();
            stack.pop_front();

            top->setLeftNode(ev1);
            top->setRightNode(ev2);

            stack.push_back(top);
            break;
        }
    }

    std::cout << "Finished building the expression stack" << std::endl;
}

由于堆栈中的前端对象 1 ,它将被添加到后面,让我有一个操作符 + ,所以我继续并弹出接下来的两个表达式这将是 1&amp; * - 我应该在这里做什么来包括解析下一个操作以及构建树?

基本上树应该看起来像我这样吗?

       *
     +   2
   1   1

0 个答案:

没有答案