首先,如果使用Boost Variant或Utree更容易,那么我将与他们达成和解,我将尝试在另一个主题中解决我们的问题.但是,我非常希望能够像下面一样构建一棵树.
背景,如果你想直接讨论这个问题,请忽略:我希望能够构建一个解析像
"({a} == 0) && ({b} > 5)"
Run Code Online (Sandbox Code Playgroud)
或标准的数学表达式
"(2 * a) + b"
Run Code Online (Sandbox Code Playgroud)
然后我将在评估树之前定义a和b是什么,如下所示:
a = 10;
double val = myExpression->Evaluate();
Run Code Online (Sandbox Code Playgroud)
我的问题来自于当我尝试构建try以将字符串解析为我的表达式树时.我正在使用一个抽象类"Expression",然后导出"变量","常量"和"二进制"表达式(它也会做一元,但它不应该影响我的问题.我一直有使用我的规则添加到树的问题所以我显然做错了什么.我很难绕着属性缠头.
我的树如下(Tree.h):
class BinaryExpression;
typedef double (*func)(double, double);
class Expression
{
public:
virtual double Evaluate() = 0;
};
class BinaryExpression : public Expression
{
private:
Expression* lhs;
Expression* rhs;
func method;
double Evaluate();
public:
BinaryExpression(void);
BinaryExpression(char op, Expression* lhs, Expression* rhs);
BinaryExpression(char op);
void operator()(Expression* lhs, Expression* rhs);
};
class ConstantExpression : public Expression
{
private: …Run Code Online (Sandbox Code Playgroud) 我有像 c++ std::map 对象
std::map<std::string, int> data = {{"a",1},{"b",2}};
Run Code Online (Sandbox Code Playgroud)
我有一个字符串表达式由这个映射中的键组成:
"(a%2)+2*((b-2)%2)"
Run Code Online (Sandbox Code Playgroud)
我要做的就是计算这个表达式的值,返回类型应该是int. 有没有办法做到这一点?也许这个boost包可能会有所帮助。
我想用boost精神来解析像这样的表达式
function1(arg1,arg2,function2(arg1,arg2,arg3),function3(arg1,arg2))
并调用相应的c ++函数.什么应该是语法解析上面的表达式并通过phoneix :: bind()调用相应的c ++函数?
我有两种类型的函数可以调用
1)字符串函数;
wstring GetSubString(wstring stringToCut,int position,int length); wstring GetStringToken(wstring stringToTokenize,wstring seperators,int tokenNumber);
2)返回整数的函数;
int GetCount();
int GetId(wstring srcId,wstring srcType);