5.6 Присвоение |
Предыдущая Содержание Следующая |
Присвоение является бинарной операцией. Распознаватель гарантирует, что есть переменная в качестве левого операнда и сумма в качестве правого операнда. Поэтому всё, что нам действительно надо реализовать, это фактическую операцию присваивания, то есть динамически скомпонованную функцию для компонента .exec описания типа:
#include "value.h" #include "value.r"
static double doAssign (const void * tree) { return value(left(tree)) = exec(right(tree)); }
static struct Type _Assign = { mkBin, doAssign, freeBin };
const void * Assign = & _Assign;
Конструктор и деструктор для Bin едины для всех, следовательно, при реализации арифметических операций должен быть сделаны глобальными. struct Bin и функции доступа left() и right() также являются едиными для всех. Все это экспортируется с помощью файла интерфейса value.h и файлом представления value.r. Наша собственная функция доступа value() для struct Var намеренно позволяет модификацию, поэтому присвоение реализуется очень элегантно.
|
Предыдущая Содержание Следующая |