Home
Accesso / Registrazione
 di 

Programmazione orientata agli oggetti in ANSI-C. Programmazione Savvy. Information Hiding

Programmazione orientata agli oggetti in ANSI-C. Programmazione Savvy. Information Hiding

Applicando ciò che abbiamo imparato nei paragrafi precedenti, dobbiamo considerare che non renderemo nota all'esterno la struttura di un nodo. Al contrario, però, dobbiamo inserire alcune dichiarazioni nel file header value.h

const void * Add;
...
void * new (const void * type, ...);
void process (const void * tree);
void delete (void * tree);

Ora possiamo codificare sum() come segue:

#include "value.h"
static void * sum (void)
{ void * result = product();
const void * type;
for (;;)
{ switch (token) {
case ’+’:
type = Add;
break;
case ’—’:
type = Sub;
break;
default:
return result;
}
scan(0);
result = new(type, result, product());
}
}

product() la stessa architettura di sum e chiama una funzione per riconoscere numeri, segni e una somma inclusa in parentesi:

static void * sum (void);
static void * factor (void)
{ void * result;
switch (token) {
case ’+’:
scan(0);
return factor();
case ’—’:
scan(0);
return new(Minus, factor());
default:
error("bad factor: ’%c’ 0x%x", token, token);
case NUMBER:
result = new(Value, number);
break;
case ’(’:
scan(0);
result = sum();
if (token != ’)’)
error("expecting )");
}
scan(0);
return result;
}

In particolar modo in factor() dobbiamo essere molto cauti per mantenere lo scanner invariato: token deve sempre contenere il successivo simbolo di input. Non appena token viene "consumato" doppiamo chiamare scan(0)

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ultimi Commenti