我正在做一个基于中缀布尔逻辑表达式构建真值表的小项目。例子:
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 代码会有所帮助,但一种方法/算法就足够了 :)
谢谢!