// // evaluator ... 評価器 // #include #include "base.h" #include "tree.h" // 名前が等しいか否かの判定 static int equal_name(char *name, char *str) { return strcmp(name, str) == 0; } int evaluate(Tree *tree) { // 式 -> 数 | 名前 | ( if 式 式 式 ) | ( 名前 式* ) // 【課題b4】式の評価器を完成させる (入力プログラムが正しいと仮定して実装) if (is_number_tree(tree)) { return 0; } else if (is_name_tree(tree)) { return 0; } else /* (is_list_tree(tree)) */ { Tree *head = get_subtree(tree, 0); char *op = get_name(head); if (equal_name(op, "if")) { return 0; } else /* 呼び出し */ { if (equal_name(op, "+")) return 0; else if (equal_name(op, "-")) return 0; else return 0; } } }