Question

Je vais d'abord décrire le problème et ce que je regarde actuellement, en termes de bibliothèques.

Dans ma demande, nous avons un ensemble de variables qui sont toujours disponibles. Par exemple: TOTAL_ITEMS, PRIX, contrats, etc. (nous avons environ 15 d'entre eux). Un client de l'application aimeraient avoir certains calculs effectués et affichés, en utilisant ces variables. Jusqu'à présent, je suis constamment ajouter ces calculs à l'application. Il est la douleur dans le cul, et je voudrais le rendre plus générique par le biais de la création d'un modèle, où l'utilisateur peut spécifier un ensemble de formules que l'application va analyser et calculer.

Voici un cas:

total_cost = CONTRACTS*PRICE*TOTAL_ITEMS

Alors, voulez faire quelque chose comme ça pour l'utilisateur de définir dans le fichier de modèle:

total_cost = CONTRACTS*PRICE*TOTAL_ITEMS et une méta-jour, comme écran pour l'afficher sur. Par conséquent, ils spécifieront la formule avec un écran. Et le fichier contiendra de nombreuses formules de cette nature.

En ce moment, je regarde deux libraies: Esprit et matheval

Quelqu'un faire des recommandations Quoi de mieux pour cette tâche, ainsi que des références, des exemples, des liens?

S'il vous plaît laissez-moi savoir si la question est claire, et je vais essayer de préciser davantage.

Merci,

Sasha

Était-ce utile?

La solution

Si vous avez un nombre fixe de variables, il est peut-être un peu exagéré d'invoquer un analyseur. Bien que l'Esprit est cool et j'ai eu envie de l'utiliser dans un projet.

Je probablement tokenizer la chaîne, faire une carte de vos variables clés sont les noms (en supposant toutes vos variables sont ints):

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

Ensuite, utilisez une simple fonction de calcul de Postfix pour faire le calcul réel.

Edit:

En regardant MathEval, il semble faire exactement ce que vous voulez; définir des variables et évaluer les fonctions mathématiques en utilisant ces variables. Je ne sais pas pourquoi vous voulez créer une solution au niveau d'un analyseur syntaxique. Avez-vous des exigences MathEval ne répond pas?

Autres conseils

On dirait qu'il ne devrait pas être trop difficile de générer un analyseur simple en utilisant yacc et bison et l'intégrer dans votre code.

Je ne sais pas matheval, mais boost :: esprit peut faire pour vous assez efficace: voir il .

Si vous êtes en modèle métaprogrammation, vous voudrez peut-être avoir un regard sur Boost :: Proto , mais prendre un certain temps pour commencer à l'utiliser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top