Alberi n-ari:
* Albero<Tipoelem> acquisisciFile(FILE *F), che applica a ciascun rigo del file di testo F il metodo acquisisciElementoFile(F) * Albero<Tipoelem> acquisisciTastiera(), che applica a ciascun rigo letto da tastiera (fino a quando l'utente non decide di finire) il metodo acquisisciElementoTastiera()
e generano un albero n-ario, in cui la radice dell'albero è fittizia (non contiene informazione), i nodi intermedi sono caratteri dei campi Desinenza organizzati in modo da raggruppare i caratteri comuni, e le foglie contengono i campi Radice, Uscita e POS associati alla desinenza corrispondente al percorso che le lega alla radice. Ad esempio, il file: (>=1)ar(e) "v-inf/pres" (>=1)er(e) "v-inf/pres" (=1)at(o,i) "s-m/sing,m/pl" (=1)at(a,e) "s-f/sing,s/pl" (>1)at(o,a,i,e) "v-part/pass" genera l'albero: * + r | + a | + {Radice: (> = 1); Uscita: (e); POS: (v - i n f / p r e s)} | + e | + {Radice: (> = 1); Uscita: (e); POS: (v - i n f / p r e s)} + t + a + {Radice: (= 1); Uscita: (o , i); POS: (s - m / s i n g , m / p l)} + {Radice: (= 1); Uscita: (a , e); POS: (s - f / s i n g , f / p l)} + {Radice: (> 1); Uscita: (o , a , i , e); POS: (v - p a r t / p a s s)}
* void traduci(Albero<Tipoelem> A, FILE *F), che dato un albero A prodotto dal metodo acquisisciFile(FILE *F) o acquisisciTastiera() ne stampa il contenuto su un file di testo F secondo la sintassi del costrutto switch del C
Ad esempio, l'albero dell'esempio precedente viene tradotto in: switch (c) { case 'r': switch (c) { case 'a': { printf("Radice: (>=1); Uscita: (e); POS: (v-inf/pres)\n"); } case 'e': { printf("Radice: (>=1); Uscita: (e); POS: (v-inf/pres)\n"); } } case 't': switch(c) { case 'a': { printf("Radice: (=1); Uscita: (o,i); POS: (s-m/sing,m/pl)\n"); printf("Radice: (=1); Uscita: (a,e); POS: (s-f/sing,f/pl)\n"); printf("Radice: (>1); Uscita: (o,a,i,e); POS: (v-part/pass)\n"); } } } |