我想用括号解决一个复合命题并为它绘制电路。
我的问题是我不知道哪种算法是正确的算法。我尝试了抽象语法树,但没有结论。 也许反向波兰表示法是用括号解决复合命题的正确方法,但我应该在每个级别绘制一个电路,反向波兰表示法只是给出最终答案。
示例:
**我想的方式**
答案 0 :(得分:0)
我会按如下方式分解您的问题:
~A
,A|B
,A&B
和A^B
的NOT,OR,AND,XOR,分别您的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
的实现来绘制更大的表达式,这些实现将使用递归来绘制多节点电路。