0

我有Expression对象,它具有以下内容:

  1. 操作员
  2. 范围
  3. 价值

提到的每个简单表达式都可以组合成一个复合表达式。

public SimpleExpresssion createcompound(SimpleExpression simple1,SimpleExpression simple2)    
    {
        CompoundExpression ce = new CompoundExpression();
        ce.lhs(simple1);
        ce.rhs(simple2);
        ce.operator(AND);    
    }

一个复杂的示例看起来像 ((1AND2)OR(3OR4)) 其中 1,2,3,4 是 Expression 对象。我正在寻找一种逻辑来根据表达式中的括号偏好来评估表达式。注意: CompoundExpressionExpression的扩展类,因此最终输出是 Expression 对象。容易解决吗?如果不是,我有什么选择

4

2 回答 2

0

复杂表达式 ((1AND2)OR(3OR4)) 可以重写为前缀表示法:

OR(AND(1,2), OR(3,4))

因此,您唯一需要的是具有 3 个参数的 CompoundExpression 的构造函数或工厂方法:运算符、左右抽象表达式:

CompoundExpression(Operator o, Expression left, Expression right) {
    this.operator = operator;
    this.left = left;
    this.right = right;
}

然后,假设您有 4 个简单的表达式,构建结果表达式很简单:

Expression result = new CompoundExpression(OR, 
    new CompoundExpression(AND, simple1, simple2), 
    new CompoundExpression(OR, simple3, simple4)
);
于 2016-11-14T15:36:54.960 回答
0
  1. 将表达式转换为等效的后缀表达式。
  2. 使用堆栈计算后缀表达式。
于 2016-11-15T14:08:17.773 回答