评估java

时间:2016-11-14 14:37:32

标签: java expression expression-evaluation

我有表达式对象,其中包含以下内容:

  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对象。 我正在寻找一个逻辑来根据表达式中的括号首选项来计算表达式。 注意: CompoundExpression Expression 的扩展类,因此最终输出是Expression对象。 它可以轻松解决吗?如果不是我的选择

2 个答案:

答案 0 :(得分: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)
);

答案 1 :(得分:0)

  1. 将表达式转换为等效的后缀表达式。
  2. 使用堆栈评估后缀表达式。