我正在做一个命令行计算器,所以我需要解析表达式。
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);
}
如您所见,我的树向左升起。我不知道如何使它按顶部的运算符排序,并将数字作为叶子,包括运算符的优先顺序。
我会很感激在编程(代码)方面的启发。