2016-11-14 66 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

我想評估表達。我做了解決方案,首先將其轉換爲後綴表達式並使用堆棧對其進行評估 –