5.6 Присвоение

Предыдущая  Содержание  Следующая V*D*V

Присвоение является бинарной операцией. Распознаватель гарантирует, что есть переменная в качестве левого операнда и сумма в качестве правого операнда. Поэтому всё, что нам действительно надо реализовать, это фактическую операцию присваивания, то есть динамически скомпонованную функцию для компонента .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 намеренно позволяет модификацию, поэтому присвоение реализуется очень элегантно.

 

Предыдущая  Содержание  Следующая