//
// evaluator ... 評価器
//
#include <string.h>
#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;
}
}
}