
L'assegnamento è una operazione binaria. Il riconoscitore garantisce che vi sia una variabile come operatore sinistro e una somma come operatore destro. Di conseguenza, quello che abbiamo necessità di implementare è di fatto l'operatore assegnazione, ossia la funzione dinamicamente linkata all'interno del componente .exec della descrizione di tipo
#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;
Condividiamo il costruttore e il distruttore per Bin che, di conseguenza, deve essere reso globale nell'implementazione delle operazioni aritmetiche. Dobbiamo inoltre condividere struct Bin e le funzioni di accesso left() e right(). Tutto ciò viene esportato con il file interfaccia in value.h e il file di rappresentazione value.r. La nostra funzione di accesso value() per la struct Var permette di effettuare modifiche così l'assegnazione diventa semplice da implementare.
