]> AND Private Git Repository - blast.git/blob - ArithmeticEvaluator.h
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
nearly finished GroupBlock VHDL gen
[blast.git] / ArithmeticEvaluator.h
1 /*-==============================================================-
2
3 file : ArithmeticEvaluator.h
4
5 creation date : 19/05/2015
6
7 author : S. Domas (sdomas@univ-fcomte.fr)
8
9 description : 
10
11 supp. infos : saved in UTF-8 [éè]
12
13 -==============================================================-*/
14 #ifndef __ARITHMETICEVALUATOR_H__
15 #define __ARITHMETICEVALUATOR_H__
16
17 #include <iostream>
18 #include <fstream>
19
20 #include <QtCore>
21
22
23 using namespace std;
24 using namespace Qt;
25
26 class ArithmeticEvaluator {
27
28 public:
29
30   ArithmeticEvaluator();
31   ArithmeticEvaluator(const QString& _expression) throw(int);
32
33   //getters
34   inline QList<QString> getVariableNames() { return varNames; }
35   
36   // setters
37   void setExpression(const QString& _expression) throw(int);
38   void setVariablesValue(const QHash<QString,double>& _varValues);
39   inline void setVariableValue(const QString& var, double value) { varValues.insert(var,value); }
40   inline void setVariableMarkers(const QString& _markers) { varMarkers = _markers; }
41
42   void print();
43   double evaluate() throw(int);
44   inline QString getError() { return errorMessage; }
45
46 protected:
47   QStringList expression;
48   QList<QString> varNames; // the names of variables that ARE in the expression
49   QHash<QString,double> varValues;
50   QString varMarkers; // a sequence of symbols that are allowed to start a variable. $ is by default
51   QString opMarkers; // a sequence if symbols used as operators. +-*/ is the hard-coded default
52   QStringList fctMarkers;
53
54   void convert(const QString& _expression) throw(int);
55   QString convertRecur(const QString& _expression, int* offset) throw(int);
56   QString getNumber(const QString& _expression, int offset, int *size);
57   QString getVariable(const QString& _expression, int offset, int *size);
58   int getFunction(const QString& _expression, int offset, int *size);
59   bool checkAfterOp(const QString& _expression, int offset);
60   bool checkAfterPar(const QString& _expression, int offset);
61
62   double evalFunction(int indexFunc, double value);
63   
64   void setVariableNames(const QString &_expression);
65   
66   QString errorMessage;
67
68 };
69
70 #endif //__ARITHMETICEVALUATOR_H__