3.8 Арифметика |
Предыдущая Содержание Следующая |
Если мы хотим выполнять арифметические действия, то позволяем исполнительным функциям возвращать значения типа double, которые будут напечатаны в process():
static double exec (const void * tree) { return (* (struct Type **) tree) -> exec(tree); }
void process (const void * tree) { printf("\t%g\n", exec(tree)); }
Для каждого типа узла требуется одна исполнительная функция, который вычисляет и возвращает значение для данного узла. Вот два примера:
static double doVal (const void * tree) { return ((struct Val *) tree) -> value; }
static double doAdd (const void * tree) { return exec(((struct Bin *) tree) -> left) + exec(((struct Bin *) tree) -> right); }
static struct Type _Add = { mkBin, doAdd, freeBin }; static struct Type _Value = { mkVal, doVal, free };
const void * Add = & _Add; const void * Value = & _Value;
|
Предыдущая Содержание Следующая |