【发布时间】:2012-06-13 23:16:54
【问题描述】:
我在做一个命令行计算器,所以我需要解析表达式。
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);
}
如您所见,我的树向左升起。我不知道如何让它按顶部的运算符排序,并将数字作为叶子,包括运算符的优先顺序。
我希望能得到启发,在编程(代码)方面也是如此。
【问题讨论】:
标签: c parsing expression-trees