相关疑难解决方法(0)

在Spirit中构建自定义表达式树:Qi(没有Utree或Boost :: Variant)

首先,如果使用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++ parsing expression-trees boost-spirit boost-spirit-qi

7
推荐指数
1
解决办法
2593
查看次数

计算表达式字符串由 std::map 中的键组成

我有像 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包可能会有所帮助。

c++ boost dictionary

4
推荐指数
1
解决办法
68
查看次数

Boost :: spirit如何解析和调用类似c ++函数的表达式

我想用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);

c++ parsing boost-spirit expression-evaluation

2
推荐指数
2
解决办法
3293
查看次数