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)

Iscriviti e ricevi GRATIS
Speciale Pi

Fai subito il DOWNLOAD (valore 15€) GRATIS

STAMPA     Tags:,

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Iscriviti e ricevi GRATIS
Speciale Pi

Fai subito il DOWNLOAD (valore 15€) GRATIS