我正在开发一个命令行计算器,因此需要解析表达式。
我已经完成了扫描器步骤,返回了一个标记数组。 现在我正在进行解析器步骤。然而,我不知道如何做解析器/表达式树。
这是我目前为止所拥有的:
然后我像这样传递令牌数组:
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);
}
你可以看到我的树只向左生长。我不知道如何按运算符在顶部排序,并按叶子节点包括运算符优先级顺序进行排序。
如果能够提供编程(代码)方面的启示,我将不胜感激。