我在尝试构建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