le formule di analisi in file di modello: parser
-
09-09-2019 - |
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
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
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.