私はコマンドライン計算機をやっているので、式を解析する必要があります。
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);
}
ご覧のとおり、私のツリーは左に上がっています。上部の演算子による順序付けと、演算子の優先順位を含むリーフとしての番号の順序付けを行う方法がわかりません。
プログラミング(コード)の観点からも、啓発をいただければ幸いです。