Domanda

io per prima descrivere il problema e allora quello che attualmente guardare, in termini di biblioteche.

Nella mia applicazione, abbiamo una serie di variabili che sono sempre disponibili. Ad esempio: TOTAL_ITEMS, PREZZO, CONTRATTI, ETC (abbiamo circa 15 di loro). Un client dell'applicazione vorrebbero avere certi calcoli eseguiti e visualizzati, utilizzando queste variabili. Fino ad ora, sono stato costantemente aggiungendo quei calcoli per l'applicazione. E 'dolore nel culo, e vorrei renderlo più generico mediante creazione di un modello, in cui l'utente può specificare un insieme di formule che l'applicazione analizzare e calcolare.

Ecco un caso:

total_cost = CONTRACTS*PRICE*TOTAL_ITEMS

Quindi, vogliono fare qualcosa di simile per l'utente di definire nel file di modello:

total_cost = CONTRACTS*PRICE*TOTAL_ITEMS e alcuni meta-data, come schermo per visualizzare su. Perciò essi saranno specificando la formula con uno schermo. E il file conterrà molte formule di questo tipo.

In questo momento, sto guardando due libraies: Spirit e matheval

Qualcuno formulare raccomandazioni cosa c'è di meglio per questo compito, così come riferimenti, esempi, link?

Per favore fatemi sapere se la questione non è chiara, e cercherò di chiarire ulteriormente.

Grazie,

Sasha

È stato utile?

Soluzione

Se si dispone di un numero fisso di variabili può essere un po 'eccessivo per invocare un parser. Anche se lo Spirito è fresco e Ho voglia di utilizzarlo in un progetto.

avrei probabilmente solo tokenize la corda, fare una mappa delle variabili digitato per nome (assumendo tutte le variabili sono interi):

map<const char*,int*> vars;
vars["CONTRACTS"] = &contracts;
...

Quindi utilizzare una semplice funzione calcolatrice postfix fare la matematica reale.

Modifica:

Guardando MathEval, sembra di fare esattamente quello che vuoi; impostare le variabili e valutare le funzioni matematiche che utilizzano queste variabili. Io non so perché si vorrebbe creare una soluzione a livello di un parser sintassi. Avete requisiti che MathEval non soddisfa?

Altri suggerimenti

sembra che non dovrebbe essere troppo difficile per generare un semplice parser utilizzando yacc e bisonti e integrarlo nel vostro codice.

Non so su matheval, ma boost :: spirito può fare per voi abbastanza efficiente: vedi ci .

Se siete in template metaprogrammazione, si può decidere di avere uno sguardo in Boost :: Proto , ma richiedere un certo tempo per iniziare ad usarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top