2016-11-14 110 views
0

具体要求表达我有表达对象,其具有以下内容:评估在Java

  1. 参数

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

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对象。 容易解决吗?如果不是有哪些选择

回答

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

复杂表达式((1AND2)OR(3OR4))可以改写为前缀符号:

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

因此,你需要的仅仅是一个构造函数或工厂操作者,左和右抽象表达式: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) 
); 
+0

提供的解决方案似乎是要走的路。它可以被推广吗? –

+0

我不确定你想实现什么。使用这些类,您可以手动构建任何表达式的抽象语法树(AST)。 – pkalinow

+0

我想评估表达。我做了解决方案,首先将其转换为后缀表达式并使用堆栈对其进行评估 –