我正在开发一个小项目来构建基于中缀布尔逻辑表达式的真值表。例如:
A ∧ (B ∨ C)
我可以将其转换为后缀:
ABC∨∧
因此能够将表达式构造成二叉树(可以将树转换回中缀,获取后缀或前缀):
ABC∨∧的语法树:
digraph graphname {
node1 [label="∧"];
node2 [label="A"];
node3 [label="∨"];
node6 [label="B"];
node7 [label="C"];
node1 -> node2;
node1 -> node3;
node3 -> node6;
node3 -> node7;
}
我的问题是在构建真值表时,如何找出完成真值表所需的其余列标题?
目前,我可以在符号上生成所有排列:
| A | B | C |
| - | - | - |
| F | F | F |
| F | F | T |
| F | T | F |
| F | T | T |
| T | F | F |
| T | F | T |
| T | T | F |
| T | T | T |
基本上,为了获得这些标题,我只需根据输入创建一个Set<Character>
个不同的字母字符。
但是,这不是A ∧ (B ∨ C)
的完整真值表。对于完整的真值表,我需要添加列(B ∨ C)
和A ∧ (B ∨ C)
,以便完整的真值表如下所示:
| A | B | C | (B ∨ C) | A ∧ (B ∨ C) |
| - | - | - | ------- | ----------- |
| F | F | F | | |
| F | F | T | | |
| F | T | F | | |
| F | T | T | | |
| T | F | F | | |
| T | F | T | | |
| T | T | F | | |
| T | T | T | | |
那么,我将如何以编程方式生成所需的其他标题(即具有逻辑连接词的标题),使我能够生成其语义含义?
一些树遍历算法会这样做吗?或者你只是使用输入的中缀/后缀版本?
某些Java代码会有所帮助,但方法/算法就足够了:)
谢谢!