Il giorno mer, 15-12-2004 alle 10:56 +0100, Lele Gaifax ha scritto: > No, non c'è nulla nella libreria C che interpreti e risolva > 'espressioni' simboliche. Ci sono dozzine di librerie esterne, e non è > difficile scriverne una tredicesima, armato di bison e un po' di > tempo. Ci sono diverse strade: 1) Farsi il parser delle espressioni con lex+yacc (o bison). La sfiga è che invariabilmente finisci spesso col doverlo estendere per includere condizionali, variabili, minchiate varie, e da un "semplice" parser di "semplici" espressioni ti ritrovi a manutenere un piccolo interprete vero e proprio. 2) Agganciare un interprete esistente. Senza scomodare Perl/Python/Tcl, ce ne sono di piccoli e interessanti, vedi ad esempio il TinyTcl (60K di libreria): http://tinytcl.sourceforge.net/ 3) Se i calcoli sono da fare molto velocemente, c'è chi genera codice sorgente al volo, chiama al volo un compilatore e ne fa una libreria shared che poi manipola con dlopen() e soci. I caveat son due: 1) ti ci vuole tutta la toolchain esterna (compilatore, linker, etc.). O c'è già sul sistema e lo metti come prerequisito, o te la porti dietro tu. Senza scomodar il GCC, c'è ad esempio TCC (http://www.tinycc.org/), che è piccolo e svelto a compilare, ma produce codice solo per x86 e praticamente senza ottimizzazioni 2) Solo perchè il codice compila non vuol dire che poi non vada in crash, tirandosi dietro anche il codice chiamante (a meno di fork() e IPC via pipe/socket/shm), e qui gli interpreti hanno decisamente dei vantaggi (meccanismi di gestione degli errori) -- | \ \ | ___|_ |_ | ianezz a casa sua... :-) | _ \ | \ | _| / / Verba volant, scripta _|_/ _\_| _|____|___|___| manent, data corrupted -- Per iscriversi (o disiscriversi), basta spedire un messaggio con OGGETTO "subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx