1
我想用圓括號解決複合命題,併爲它畫出電路。複合命題的繪圖電路
我的問題是,我不知道哪個算法是正確的算法。我嘗試了抽象語法樹,但沒有結論。 也許反向波蘭符號是用圓括號解決複合命題的正確方法,但我應該在每個級別上繪製一個電路,逆波蘭符號只是給出最終答案。
例子:
**我想它
我想用圓括號解決複合命題,併爲它畫出電路。複合命題的繪圖電路
我的問題是,我不知道哪個算法是正確的算法。我嘗試了抽象語法樹,但沒有結論。 也許反向波蘭符號是用圓括號解決複合命題的正確方法,但我應該在每個級別上繪製一個電路,逆波蘭符號只是給出最終答案。
例子:
**我想它
如下我會分解你的問題的方法**:
~A
,A|B
,A&B
和A^B
,分別你的AST節點可能看起來像:
public interface CircuitNode {
// parsing-related
String getExpression();
List<String> getInputNames();
List<CircuitNode> getChildren();
String getOutputName();
// drawing-related; call children to compute things and draw children
int calculateHeight();
int calculateWidth();
void draw(Graphics2D g, int x, int y);
// simulate circuit, if you need it
boolean simulate(boolean[] inputs);
}
如果按照分解步驟中,您將首先實現CircuitNode
接口的解析相關的部分(不需要圖紙)。然後,您將嘗試draw
簡單節點(那些不包含其他節點的簡單節點),這將返回例如100對於calculateWidth
和50對於calculateHeight
。最後,您將嘗試繪製更大的表達式,其中calculateHeight
,calculateWidth
和draw
的實現將使用遞歸繪製多節點電路。
向我們展示,您到目前爲止得到了什麼。由於樹(你在第二個鏈接中提供的)幾乎是你想要的圖(只是用不同的圖像替換一些節點,並且你完成了),AST對我來說似乎是明智的。 – Turing85
你問的問題應該是完整的,不必遵循鏈接(至少對於主要想法)。另外,當問問題時,請用正確的英文寫(i => I,...) - 它使事情變得更容易閱讀。 – tucuxi
AST和RPN不是「算法」 - 算法是一個配方,AST代表一個分析樹,而RPN是一個(後綴)符號,允許輕鬆進行基於堆棧的表達式評估。 – tucuxi