La corrispondente dichiarazione di tipo C è
typedef struct AMB * AMBIENTE; struct AMB{ IDENT Funzione; IDENT Parametro_Formale; ESPRESSIONE Corpo; AMBIENTE Next; };Il modulo contiene una variabile globale Funzioni in cui verrà contenuto l'ambiente delle funzioni corrente, e tale variabile è completamente incapsulata all'interno del modulo.
const AMBIENTE Vuoto = NULL; AMBIENTE Funzioni = Vuoto; /*variabile globale che contiene le definizioni delle funzioni*/Sviluppiamo ora le varie funzioni che appaiono nell'interfaccia del modulo.
void Aggiungi_Funzione(IDENT funz, IDENT param, ESPRESSIONE cor) /*aggiunge a Funzioni la definizione della funzione funz con parametro formale param e corpo cor */ { AMBIENTE Funzioni1 = (AMBIENTE)malloc(sizeof(struct AMB)); Funzioni1 -> Corpo = cor; Copia_Ident(Funzioni1 -> Funzione,funz); Copia_Ident(Funzioni1 -> Parametro_Formale,param); Funzioni1 -> Next = Funzioni; Funzioni = Funzioni1; }
void Parametro_Formale(IDENT funz, IDENT par) /*ritorna il parametro formale della funzione funz come registrato in Funzioni, nel parametro variabile par, si assume che ci sia sempre una definizione per funz in Funzioni */ { AMBIENTE Funzioni1 = Funzioni; while(Funzioni1 != Vuoto) if(Uguali_Ident(Funzioni1 -> Funzione,funz)){ Copia_Ident(par, Funzioni1 -> Parametro_Formale); return; } else Funzioni1 = Funzioni1 -> Next; }
ESPRESSIONE Corpo(IDENT funz) /*ritorna il corpo della funzione funz come registrato in Funzioni, si assume che ci sia sempre una definizione per funz in Funzioni */ { AMBIENTE Funzioni1 = Funzioni; while(Funzioni1 != Vuoto) if(Uguali_Ident(Funzioni1 -> Funzione,funz)) return Funzioni1 -> Corpo; else Funzioni1 = Funzioni1 -> Next; }