我在做一个命令行计算器,所以我需要解析表达式。解析器树或表达式树
calc 2*(3+4)*5
我已经完成了扫描器的步骤,返回一个令牌的数组。 现在我在解析器一步。然而,我不知道如何做一个解析器/表达式树。
这是我到目前为止有:
NODE* create_node(TOKEN* t) {
NODE* n = (NODE*)malloc(sizeof(NODE));
n->t = t;
n->l = n->r = 0;
return n;
}
void insert_node(NODE** top, NODE** n) {
if (!*top) {
*top = *n;
return;
}
if (!(*top)->l) insert_node(&(*top)->l, n);
else
if (!(*top)->r) insert_node(&(*top)->r, n);
else
insert_node(&(*top)->l, n);
}
然后我传似令牌数组:
while (*tokens != 0) {
NODE* n = create_node(*tokens++);
insert_node(&root, &n);
}
正如你可以看到我的树刚刚募集到左边。我不知道如何使顶层的运算符和包含运算符优先顺序的叶子的数字排序。
我希望启发,也在编程(代码)条款。
+1。另外,看看你的编程和数据结构教科书在这个问题上说了什么,它确实应该在那里。 – catchmeifyoutry