The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

5.6 Присвоение

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

 

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